Мета-программирование на несколько языков вывода

Я ищу способ написать и поддерживать определенный алгоритм (субмодуль рендеринга графического кода моего кода, фактически) только один раз. Мне нужен алгоритм в С++, PHP и Javascript. Теоретически я мог бы написать его на С++ и обернуть его в расширение PHP; но это имеет много проблем и не решает Javascript-ссылку.

Я считаю, что я ищу инструмент, который преобразует язык (неважно, какой из них) в три (или два, если исходный язык является одним из трех) языков вывода я ' м. Я нашел MetaL (http://www.meta-language.net/), который, кажется, делает то, что я хочу, но также выгляжу мертвым (без обновлений с 2007 года) и нацелен только на один из трех необходимых мне языков. Он должен быть достаточно гибким и позволить мне обновлять результаты - например, я использую Cairo в моем представлении на С++ и PHP и HTML Canvas на стороне Javascript. Поэтому мне нужно настроить API для определенных эффектов.

В качестве альтернативы, я бы согласился на парсер PHP и lexer, которые предоставили бы мне AST с достаточной информацией для того, чтобы я мог писать генераторы для С++ и Javascript в качестве альтернативного бэкэнд.

Любые идеи? Спасибо.

Ответ 1

Вы можете посмотреть haXe. haXe - это язык программирования с открытым исходным кодом. он может быть скомпилирован в JavaScript, Flash/ActionScript, php5, С++ и в будущем Java, С#.

Ответ 2

Проект 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 на стороне клиента.

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

Ответ 4

Возможно, вы можете просто записать его в javascript, а затем использовать интерпретатор javascript на С++ и PHP.

Ответ 5

Совершенно другой подход заключается в использовании кода сборки. Напишите алгоритм на выбранном вами языке, скомпилируйте его в источник ASM. Затем предоставьте оболочку интерфейса на языках развертывания.

Конечно, это все так "воздушный пирог". Это зависит от множества переменных, количества целевых платформ, важности оптимизации, частоты изменения интерфейса, связанной с изменением реализации и т.д. И т.д.