Есть некий модуль, написанный на C++. Будет портирован на Java и Python.
В модуле производятся вычисления на матрице и дёргается GUI через абстрактный интерфейс.
Динамическая память напрямую не используется.
Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..
Вызывать нативный код из управляемого категорически не хочется.
И тащить с собой библиотеку интерпретатора байт-кода тоже.
ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python. ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..
а быстродействие пофиг?
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Синхронизация C++ исходника с Java и Python
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>Здравствуйте, jazzer, Вы писали:
J>>Boost.Python же
ROP>Как я понял, это для линковки кусков C++ и питона. ROP>Не подходит.
Я так понял, тебе надо вычисления на матрице, работающие на С++, вызывать из Питона же? А гуй каким-то образом прикрутить (к чему) на жабе?
Здравствуйте, jazzer, Вы писали:
ROP>>Как я понял, это для линковки кусков C++ и питона. ROP>>Не подходит.
J>Я так понял, тебе надо вычисления на матрице, работающие на С++, вызывать из Питона же? А гуй каким-то образом прикрутить (к чему) на жабе?
Неа. Я же четко написал. Хочу чтобы модуль был написан на одном из трех языков, на на двух остальных генерился из первого. Чисто для удобства синхронизации.
Быстродействие не критично. Более критична простота полученного кода и минимум зависимостей.
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?..
думаю, куда реалистичней найти 4-й язык, с которого моджно генерить проги на этих трёх. но даже в таком раскладе я ничго не припомню. попробуй обратиться в Философию, что ли
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Синхронизация C++ исходника с Java и Python
Здравствуйте, Кодт, Вы писали:
К>Может, тогда в качестве исходного языка выбрать 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 языка, мы избавимся только от транслирующей части
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>Всем привет!
ROP>Есть некий модуль, написанный на C++. Будет портирован на Java и Python. ROP>В модуле производятся вычисления на матрице и дёргается GUI через абстрактный интерфейс.
C++ <-> Ява можно наверное один исходник использовать, с небольшим добавлением препроцессора
С питоном наверное тоже проканает, но препроцессора надо будет побольше
Re[2]: Синхронизация C++ исходника с Java и Python
Здравствуйте, enji, Вы писали:
E>C++ <-> Ява можно наверное один исходник использовать, с небольшим добавлением препроцессора E>С питоном наверное тоже проканает, но препроцессора надо будет побольше
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>Неа. Я же четко написал. Хочу чтобы модуль был написан на одном из трех языков, на на двух остальных генерился из первого. Чисто для удобства синхронизации.
ROP>Быстродействие не критично. Более критична простота полученного кода и минимум зависимостей.
Т.е. тебе просто нужна трансляция из одного языка в два других? Я думаю, это можно из Питона сделать — там богатые возможности интроспекции и типов, и самого кода. Только надо будет изобрести что-то вроде венгерской нотации, чтоб типы в Java/C++ прописывать сообразно им.
Здравствуйте, Кодт, Вы писали:
ROP>>Как бы сделать так чтобы модифицировать файл только на одном языке, а остальные генерились?.. К>Может, тогда в качестве исходного языка выбрать Cython?
Здравствуйте, 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
Здравствуйте, BulatZiganshin, Вы писали:
BZ>думаю, куда реалистичней найти 4-й язык, с которого моджно генерить проги на этих трёх. но даже в таком раскладе я ничго не припомню. попробуй обратиться в Философию, что ли
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 у него есть довольно давно.
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить...
Есть Emscripten на базе Clang+LLVM — он транслирует C++ в JS. Там получается вот такой JS код
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>>>ЗЫ: Посмотрел llvvm+clang. Даже простая конструкция вида "return 42;" превращается в кучу монструзных библиотечных вызовов. Может я не умею его готовить... EP>>Есть Emscripten на базе Clang+LLVM — он транслирует C++ в JS. Там получается вот такой JS код
Я понимаю. Но если дошло до LLVM — то как вариант можно посмотреть и на результирующий JS, может получится его перевести малыми усилиями в нужные языки, или может модифицировать Emscripten так, чтобы сразу генерировал необходимый код.
Re[3]: Синхронизация C++ исходника с Java и Python
Ява-плюсы проблем практически не вызывают, если писать на подмножестве обоих языков. Питон-плюсы — немного препроцессора понадобится, плюс соглашение об отступах
FUNC(void, myFunc, (int, a)(float b)) {
DECL(int) c = a + b;
IF (a > b) {
c = c - 2;
}
g(a, c);
}
Все это обрабатывается стандартным сишным препроцессором, плюс {} для питона убираются. Не так и страшно, на самом деле.
Это всяко проще сопровождать, чем какой-нить транслятор из си в питон, имхо. Ну и порог вхождения значительно ниже, бери и пиши Конечно, надо будет сделать обертки для функций из стандартной библиотеки, если таковые используются.
Т.е. получается, что надо сделать АПИ для каждого языка, которое одинаково выглядит и скрывает нюансы стандартной библиотеки (выделение памяти — для плюсов будет умный указатель, для питона и явы — пустышки, и т.п.). Плюс макросы, которые скрывают нюансы синтаксиса.
ЗЫ на твой изврат с комментариями по ссылке это все ж не похоже