Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 12:11
Оценка:
Всем привет!

Есть некий модуль, написанный на C++. Будет портирован на Java и Python.
В модуле производятся вычисления на матрице и дёргается GUI через абстрактный интерфейс.
Динамическая память напрямую не используется.

Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..

Вызывать нативный код из управляемого категорически не хочется.
И тащить с собой библиотеку интерпретатора байт-кода тоже.

ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...
Re: Синхронизация C++ исходника с Java и Python
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.15 12:12
Оценка: -1 :)
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Всем привет!


ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python.


Boost.Python же
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Синхронизация C++ исходника с Java и Python
От: BulatZiganshin  
Дата: 12.10.15 12:25
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python.

ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..

а быстродействие пофиг?
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 12:30
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>а быстродействие пофиг?


угу
Re[2]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 12:32
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Boost.Python же


Как я понял, это для линковки кусков C++ и питона.
Не подходит.
Re[3]: Синхронизация C++ исходника с Java и Python
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.15 12:33
Оценка: :))
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Здравствуйте, jazzer, Вы писали:


J>>Boost.Python же


ROP>Как я понял, это для линковки кусков C++ и питона.

ROP>Не подходит.

Я так понял, тебе надо вычисления на матрице, работающие на С++, вызывать из Питона же? А гуй каким-то образом прикрутить (к чему) на жабе?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 12:44
Оценка:
Здравствуйте, jazzer, Вы писали:

ROP>>Как я понял, это для линковки кусков C++ и питона.

ROP>>Не подходит.

J>Я так понял, тебе надо вычисления на матрице, работающие на С++, вызывать из Питона же? А гуй каким-то образом прикрутить (к чему) на жабе?


Неа. Я же четко написал. Хочу чтобы модуль был написан на одном из трех языков, на на двух остальных генерился из первого. Чисто для удобства синхронизации.

Быстродействие не критично. Более критична простота полученного кода и минимум зависимостей.
Re: Синхронизация C++ исходника с Java и Python
От: Кодт Россия  
Дата: 12.10.15 13:05
Оценка: 1 (1)
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..


Может, тогда в качестве исходного языка выбрать Cython?
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
Re: Синхронизация C++ исходника с Java и Python
От: BulatZiganshin  
Дата: 12.10.15 13:07
Оценка: +2
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..


думаю, куда реалистичней найти 4-й язык, с которого моджно генерить проги на этих трёх. но даже в таком раскладе я ничго не припомню. попробуй обратиться в Философию, что ли
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Синхронизация C++ исходника с Java и Python
От: BulatZiganshin  
Дата: 12.10.15 13:13
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>Может, тогда в качестве исходного языка выбрать Cython?


The Cython language is a superset of the Python language that additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code.

т.е. исходники на C будут генериться, на этом всё. разве что есть cython->python трансляторы, вроде там достаточно указание типов убрать?

к слову, вроде была программа которая из кода на Lua генерила последовательность вызовов Lua C API. по идее вещей, такое же можно сварганить и для питона. хотя всё равно нужна будет runtime языка, мы избавимся только от транслирующей части
Люди, я люблю вас! Будьте бдительны!!!
Отредактировано 12.10.2015 13:14 BulatZiganshin . Предыдущая версия .
Re: Синхронизация C++ исходника с Java и Python
От: enji  
Дата: 12.10.15 13:27
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Всем привет!


ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python.

ROP>В модуле производятся вычисления на матрице и дёргается GUI через абстрактный интерфейс.

C++ <-> Ява можно наверное один исходник использовать, с небольшим добавлением препроцессора

С питоном наверное тоже проканает, но препроцессора надо будет побольше
Re[2]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 13:35
Оценка:
Здравствуйте, enji, Вы писали:

E>C++ <-> Ява можно наверное один исходник использовать, с небольшим добавлением препроцессора

E>С питоном наверное тоже проканает, но препроцессора надо будет побольше

В молодости увлекался подобными трюками.
http://rsdn.ru/forum/humour/590646.all
Автор: R.O. Prokopiev
Дата: 01.04.04


Но в рабочий код такие трюки тащить нельзя.
Re[5]: Синхронизация C++ исходника с Java и Python
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.15 13:36
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Неа. Я же четко написал. Хочу чтобы модуль был написан на одном из трех языков, на на двух остальных генерился из первого. Чисто для удобства синхронизации.


ROP>Быстродействие не критично. Более критична простота полученного кода и минимум зависимостей.


Т.е. тебе просто нужна трансляция из одного языка в два других? Я думаю, это можно из Питона сделать — там богатые возможности интроспекции и типов, и самого кода. Только надо будет изобрести что-то вроде венгерской нотации, чтоб типы в Java/C++ прописывать сообразно им.

https://docs.python.org/2/library/dis.html

там простая стек-машина, с которой легко сгенерить код на любом языке.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Отредактировано 12.10.2015 14:52 jazzer . Предыдущая версия .
Re[2]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 13:39
Оценка:
Здравствуйте, Кодт, Вы писали:

ROP>>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..

К>Может, тогда в качестве исходного языка выбрать Cython?

Спасибо посмотрю.
Кстати есть такая штука Jython и вроде как умеет настоящие джавовские class-файлы выдавать
http://www.jython.org/archive/21/docs/jythonc.html
Re: Синхронизация C++ исходника с Java и Python
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 12.10.15 13:39
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Всем привет!


ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python.

Зачем портируется? Какие платформы будут использоваться?
ROP>В модуле производятся вычисления на матрице и дёргается GUI через абстрактный интерфейс.
Что за ГУЙ библиотека?
ROP>Динамическая память напрямую не используется.
Не факт.
ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..
Написать это на метаязыке каком-нибудь, но мне кажется что в С++ это не будет транслироваться, максимум С.
ROP>Вызывать нативный код из управляемого категорически не хочется.
Почему?
ROP>ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...
Возможно, можно попробовать получить байткод llvm и использоваться бэкенд который компилит всё в байткод джавы/нэйтив. Я не знаю будет ли работать это или нет если что.
Sic luceat lux!
Re[2]: Синхронизация C++ исходника с Java и Python
От: Alexey F  
Дата: 12.10.15 13:56
Оценка: 39 (4)
Здравствуйте, BulatZiganshin, Вы писали:

BZ>думаю, куда реалистичней найти 4-й язык, с которого моджно генерить проги на этих трёх. но даже в таком раскладе я ничго не припомню. попробуй обратиться в Философию, что ли


Врать не буду — сам язык я почти не пробовал, но Haxe обещает что может генерировать Python начиная с 2015 года — правда, фича ещё в стадии beta:

This release introduces the new Python target which was developed by Heinz Hölzer and Dan Korostelev. As with any new target it should be considered to be in beta stage.


Поддержка Java, C++ и JavaScript у него есть довольно давно.
Re: Синхронизация C++ исходника с Java и Python
От: Evgeny.Panasyuk Россия  
Дата: 12.10.15 21:57
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...


Есть Emscripten на базе Clang+LLVM — он транслирует C++ в JS. Там получается вот такой JS код
Автор: Evgeny.Panasyuk
Дата: 06.06.15
.
Re[2]: Синхронизация C++ исходника с Java и Python
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 12.10.15 22:07
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Есть Emscripten на базе Clang+LLVM — он транслирует C++ в JS. Там получается вот такой JS код
Автор: Evgeny.Panasyuk
Дата: 06.06.15
.


Спасибо. JS не нужен.
Re[3]: Синхронизация C++ исходника с Java и Python
От: Evgeny.Panasyuk Россия  
Дата: 12.10.15 22:17
Оценка:
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>>>ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...

EP>>Есть Emscripten на базе Clang+LLVM — он транслирует C++ в JS. Там получается вот такой JS код
Автор: Evgeny.Panasyuk
Дата: 06.06.15
.

ROP>Спасибо. JS не нужен.

Я понимаю. Но если дошло до LLVM — то как вариант можно посмотреть и на результирующий JS, может получится его перевести малыми усилиями в нужные языки, или может модифицировать Emscripten так, чтобы сразу генерировал необходимый код.
Re[3]: Синхронизация C++ исходника с Java и Python
От: enji  
Дата: 13.10.15 05:52
Оценка: 1 (1) +1
Здравствуйте, R.O. Prokopiev, Вы писали:


ROP>Но в рабочий код такие трюки тащить нельзя.


Ява-плюсы проблем практически не вызывают, если писать на подмножестве обоих языков. Питон-плюсы — немного препроцессора понадобится, плюс соглашение об отступах


FUNC(void, myFunc, (int, a)(float b)) {
  DECL(int) c = a + b;
  IF (a > b) {
    c = c - 2;
  }
  g(a, c);
}


Все это обрабатывается стандартным сишным препроцессором, плюс {} для питона убираются. Не так и страшно, на самом деле.

Это всяко проще сопровождать, чем какой-нить транслятор из си в питон, имхо. Ну и порог вхождения значительно ниже, бери и пиши Конечно, надо будет сделать обертки для функций из стандартной библиотеки, если таковые используются.

Т.е. получается, что надо сделать АПИ для каждого языка, которое одинаково выглядит и скрывает нюансы стандартной библиотеки (выделение памяти — для плюсов будет умный указатель, для питона и явы — пустышки, и т.п.). Плюс макросы, которые скрывают нюансы синтаксиса.

ЗЫ на твой изврат с комментариями по ссылке это все ж не похоже
Отредактировано 13.10.2015 6:01 enji . Предыдущая версия . Еще …
Отредактировано 13.10.2015 5:56 enji . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.