Ответ 1
Вы можете посмотреть haXe. haXe - это язык программирования с открытым исходным кодом. он может быть скомпилирован в JavaScript, Flash/ActionScript, php5, С++ и в будущем Java, С#.
Я ищу способ написать и поддерживать определенный алгоритм (субмодуль рендеринга графического кода моего кода, фактически) только один раз. Мне нужен алгоритм в С++, PHP и Javascript. Теоретически я мог бы написать его на С++ и обернуть его в расширение PHP; но это имеет много проблем и не решает Javascript-ссылку.
Я считаю, что я ищу инструмент, который преобразует язык (неважно, какой из них) в три (или два, если исходный язык является одним из трех) языков вывода я ' м. Я нашел MetaL (http://www.meta-language.net/), который, кажется, делает то, что я хочу, но также выгляжу мертвым (без обновлений с 2007 года) и нацелен только на один из трех необходимых мне языков. Он должен быть достаточно гибким и позволить мне обновлять результаты - например, я использую Cairo в моем представлении на С++ и PHP и HTML Canvas на стороне Javascript. Поэтому мне нужно настроить API для определенных эффектов.
В качестве альтернативы, я бы согласился на парсер PHP и lexer, которые предоставили бы мне AST с достаточной информацией для того, чтобы я мог писать генераторы для С++ и Javascript в качестве альтернативного бэкэнд.
Любые идеи? Спасибо.
Вы можете посмотреть haXe. haXe - это язык программирования с открытым исходным кодом. он может быть скомпилирован в JavaScript, Flash/ActionScript, php5, С++ и в будущем Java, С#.
Проект Emscripten (который я только заметил на прошлой неделе) может вас заинтересовать: http://syntensity.blogspot.com/2011/04/emscripten-10.html
Этот парень в основном написал компилятор для C/С++, который компилируется в Javascript-код.
Это должно решить сторону Javascript вашей проблемы.
Надеюсь, что это поможет.
Другим продуктом в одних и тех же строках и немного более известным является Google Web Toolkit (GWT). Он основан на Java, но конечный результат схож - вы пишете свое веб-приложение в Java-коде и компилируете интерфейсные части в Javascript и внутренние части в обычный байт-код Java. Я знаю, что вы не просите Java, но если это вас интересует, ссылка здесь: http://code.google.com/webtoolkit/
Немного менее полезный, но, возможно, более соответствующий вашему вопросу PHPJS. Это проект для реализации как можно большего количества языка PHP в Javascript. Они делают это по принципу "по функциям", поэтому он будет только когда-либо приближаться, но с учетом того, что синтаксисы языка похожи, может быть возможно использовать его для написания кода, который не изменяется в собственном PHP и также в Javascript на стороне клиента.
Конечно, одна большая сторона компиляции одного языка в другой состоит в том, что полученный код всегда будет субоптимальным. Не так много вы можете с этим поделать, но это стоит иметь в виду, прежде чем вы начнете писать общую кодовую базу на одном языке.
Возможно, посмотрите на "кодирование" исходного алгоритма в xml и использование различных шаблонов xslt для вывода на целевые языки? Или, возможно, antlr (http://www.antlr.org/http://www.amazon.com/Definitive-Antlr-Reference-Domain-Specific-Programmers/дп/0978739256/исх = sr_1_1 с = книги &? е = UTF-8 & QID = 1303114884 &. = 1-1 стерад)
Возможно, вы можете просто записать его в javascript, а затем использовать интерпретатор javascript на С++ и PHP.
Совершенно другой подход заключается в использовании кода сборки. Напишите алгоритм на выбранном вами языке, скомпилируйте его в источник ASM. Затем предоставьте оболочку интерфейса на языках развертывания.
Конечно, это все так "воздушный пирог". Это зависит от множества переменных, количества целевых платформ, важности оптимизации, частоты изменения интерфейса, связанной с изменением реализации и т.д. И т.д.