【问题标题】:PHP to Ruby compiler [closed]PHP到Ruby编译器[关闭]
【发布时间】:2010-10-06 14:59:05
【问题描述】:

有人知道(最好是开源的)PHP 到 ruby​​ 编译器吗?即解析 PHP 代码并生成语义等效的 ruby​​ 代码的程序?

【问题讨论】:

  • 任何类似的东西都会产生该死的丑陋的 Ruby 代码——Ruby 比 PHP 更具表现力。为什么要这样做?
  • 嗯,是的,它不希望它与手工制作的 Ruby 相媲美,但你提到的语言的表现力应该只会让 PHP 语义的实现变得更容易。我正在考虑将大型 PHP 代码库迁移到 ruby​​ 的选项,这样的工具会让这变得更容易。
  • 您不想使用编译器的输出来生成您将维护的代码。如果生成的代码正确执行,正在编译的人会(正确地)生成任何有效的东西(丑陋或不可维护是无关紧要的)。这就是为什么这些编译器被称为“迁移工具”的原因很糟糕;他们不是!将 PHP 应用程序迁移到 可维护 Ruby 是一个完全不同的问题。

标签: php ruby compiler-construction


【解决方案1】:

我自己没用过,但你可能想看看Phuby。它允许您在 ruby​​ 中运行 PHP 代码。然后我会尝试对代码的生命进行单元测试(使用 ruby​​ 单元测试),然后在 ruby​​ 中重新编写代码。

但是,我怀疑 Phuby 甚至还没有准备好远程生产。

【讨论】:

  • 是的,嵌入很复杂,这使得 Phuby 远未做好生产准备。为什么不直接从外部调用 php Web 服务?
【解决方案2】:

这已经是一项相当艰巨的任务了。你选择了两种非常不同的语言。当然,您可能可以通过编程方式将 PHP 转换为 Ruby,但生成的代码将非常不像 ruby​​。

查看一些相关问题及其答案:

如果您可以将惯用的 PHP 翻译成惯用的 Ruby,您可能需要类似人类的智能 - 即:理解代码的功能(本质上)并用目标语言重写它的能力。不幸的是,我们在这方面没有非常聪明的人工智能。至少我不知道。

【讨论】:

  • 它们比 PHP 和 C++ 更相似,人们开发了针对 C++ 的 PHP 编译器,尽管目的不同——我相信 Facebook 的 HipHop 就是这样做的。从语法上讲,是的,它们完全不同,这就是为什么你需要一个成熟的编译器而不是某种“音译器”。
  • @Ramon PHP 毕竟是用 C 编写的,它的许多函数只是 C 函数的包装。请参阅第二个链接,了解创建这样的“编译器”极其困难的原因。
  • @Ramon: 将 PHP 编译成 Ruby 可能类似于编译成 C++ 的工作,但增加了实现 PHP 所依赖的所有 C 库的工作(C++ 实现只使用那些 C图书馆)。所以,如果你想像 Facebook 那样花费同样多的精力来获得 PHP 到 Ruby 的编译器,我相信你可以做到。您可能会发现这是一项相当多的工作。
【解决方案3】:

我认为不存在。

Quercus(在 Java 中重新实现 PHP)和 JRuby 的组合可能会有所帮助,具体取决于您要完成的工作。

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

http://jruby.org/

【讨论】:

  • 有趣的想法,但这听起来更像是在 JRuby 运行时上运行 PHP 代码和 Ruby 代码的一种方式——这不是一个坏主意,因为生产 Quercus 编译器不是开源的,而 JRuby 似乎处于领先地位JVM 上非 Java 语言的方式。
【解决方案4】:

人脑与镐的副本相结合;)

【讨论】:

    【解决方案5】:

    使用 SWI-Prolog 的 universal-transpiler 库,您可以将 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
    

    【讨论】:

      【解决方案6】:

      http://railsforphp.com/reference/ 可以在您刚开始从 PHP 转向 Ruby 时成为一个方便的参考。您可以查找 PHP 函数并找到它的 Ruby 等效项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        相关资源
        最近更新 更多