2010-10-06 2 views
1

Кто-нибудь знает о PHP (желательно с открытым исходным кодом) PHP для рубинового компилятора? то есть программа, которая анализирует PHP-код и создает семантически эквивалентный код ruby?PHP-компилятор Ruby

+0

Ничего подобного, будет производить чертовски уродливый код на Ruby - Руби настолько более выразительным чем PHP. почему ты хочешь сделать это? – Skilldrick

+0

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

+1

Вы не хотите использовать вывод компилятора для создания кода, который вы будете поддерживать. Люди, которые компилируют, генерируют (правильно) все, что работает (уродливое или недостижимое, не имеет значения), если сгенерированный код выполняется правильно. Вот почему такие компиляторы имеют ужасную репутацию как «инструменты миграции»; их нет! Перенос PHP-приложения на * поддерживаемый * Ruby - совершенно другая проблема. –

ответ

2

Я не использовал его сам, но вы можете посмотреть на Phuby. Он позволяет запускать PHP-код в рубине. Затем я попробую блок проверить жизнь из кода (с использованием рубиновых модулей), а затем переписать код в рубине.

Однако я подозреваю, что Phuby даже не готов к производству.

+1

Да, внедрение сложное, что делает Phuby далеко не готовым к производству. Почему бы просто не вызвать внешнюю ссылку на веб-службу php? –

2

Я не думаю, что существует.

Комбинация Quercus, которая повторно реализует PHP на Java, и JRuby может помочь, в зависимости от того, что вы пытаетесь выполнить.

http://www.caucho.com/resin-3.0/quercus/

http://jruby.org/

+0

Интересная идея, но это звучит как еще один способ запустить PHP-код вместе с кодом Ruby во время выполнения JRuby - не плохая идея, поскольку производственный компилятор Quercus не является открытым исходным кодом, а JRuby, похоже, лидирует в плане не- Java-языки на JVM. – Ramon

2

человеческий мозг в тандеме с копией заступом;)

3

Это довольно сложная задача уже. И вы выбрали два языка, которые очень разные. Конечно, вы, вероятно, могли бы программно перевести PHP на Ruby, но полученный в результате код был бы очень не-рубиновым.

См некоторые смежные вопросы и ответы на них:

Если бы вы могли перевести идиоматическое РНР идиоматических Ruby, вы, вероятно, нужно человекоподобное интеллект - то есть: способность понять, что делает код (по сути) и переписывать его на целевом языке. К сожалению, у нас нет очень умного ИИ в этом фронте. По крайней мере, я не знаю.

+0

Они более похожи, чем, скажем, PHP и C++, и люди разработали компиляторы для PHP, которые нацелены на C++, хотя и для другой цели - Facebook HipHop делает это, я считаю. Синтаксически, да, они совершенно разные, поэтому вам нужен полномасштабный компилятор, а не какой-то «транслитератор». – Ramon

+0

@Ramon PHP написан на C в конце концов, и многие из его функций являются просто оболочками для функций C. См. Вторую ссылку по причинам, почему было бы чрезвычайно сложно создать такой «компилятор». – NullUserException

+0

@Ramon: компиляция PHP в Ruby, скорее всего, будет похожа на попытку компиляции на C++ с добавленной работой по реализации всех тех библиотек C, на которых рисует PHP (реализация C++ использует только те библиотеки C). Итак, если вы хотите потратить столько же энергии, сколько Facebook, чтобы получить компилятор PHP для Ruby, я уверен, что вы можете это сделать. Вы можете узнать, что это довольно много работы. –

0

http://railsforphp.com/reference/ может быть удобной ссылкой, когда вы только начинаете с PHP на Ruby. Вы можете найти функцию PHP и найти ее эквивалент Ruby.

1

Используя библиотеку universal-transpiler для SWI-Prolog, вы можете преобразовать подмножество PHP в Ruby и несколько других языков. Это пример программы с PHP исходным кодом в качестве входных данных:

:- use_module(library(transpiler)). 
:- set_prolog_flag(double_quotes,chars). 
:- initialization(main). 

main :- 
    Input = "function add($a,$b){return $a.$b;}function squared($a){return $a*$a;}function add_exclamation_point($parameter){return $parameter.\"!\";}", 
    translate(Input,'php','ruby',X), 
    atom_chars(Y,X), 
    writeln(Y). 

Это вывод программы в Ruby:

def add(a,b) 
     return a+b 
end 
def squared(a) 
     return a*a 
end 
def add_exclamation_point(parameter) 
     return parameter+"!" 
end 
Смежные вопросы