代码之家  ›  专栏  ›  技术社区  ›  EarlyPoster

有没有办法把C代码翻译成Ruby?

  •  4
  • EarlyPoster  · 技术社区  · 16 年前

    我正在处理大量遗留的C代码,这些代码需要为一个项目转换为Ruby。

    我在网上见过Ruby-to-C翻译人员,但不是相反。有没有一个简单的方法来处理这个特殊的问题?

    4 回复  |  直到 8 年前
        1
  •  6
  •   Timo Geusch    16 年前

    您要么要编写一个C到Ruby的转换器,这是可能的,但这项工作可能是不合理的,要么您可以将C代码分解成更小的模块,作为第一步,您可以为这些模块创建Ruby包装器。一旦它们都用Ruby包好了,并且主控制流用Ruby完成了,您就可以编写一个测试工具(既可以验证替换代码的正确性,也可以帮助逆向工程),并开始用Ruby模块替换C模块。

    如果您将模块用作本机扩展,那么Divide&Converse方法应该与常规Ruby一起使用,但如果您将JRuby之类的东西作为运行时环境,显然这将导致进一步的问题。如果您想在JRuby中根据您的评论做类似的事情,那么您将看到在JNI中包装C模块,并通过这种方式从JVM中调用。这两种方法都允许C代码与Ruby代码交互,但这两种方法不能互换。

    两种方法都不会很快,而且都是 许多 工作。

        2
  •  1
  •   Marcelo Cantos    16 年前

    你可以:

    1. 用Ruby编写一个C解释器(非常难)。
    2. 用类似swig的东西包装编译后的C代码(要容易得多)。
        3
  •  1
  •   Anderson Green    8 年前

    至少可以将C的一个子集转换成Ruby,但输出将是一个“类型删除”程序。

    使用 universal-transpiler ,可以将此C函数转换为Ruby:

    int add(int a,int b){
        return a+b;
    }
    

    这是翻译器的输出:

    def add(a,b) 
        return a+b
    end
    
        4
  •  0
  •   Mladen Jablanović    16 年前

    C语言编程和Ruby语言编程都有完全不同的编程模式。所以当老话说 您可以用任何语言编写Fortran(本例中为C)代码 是的,最终通过机器翻译得到的Ruby代码根本不是Ruby,除了语法上的。

    所以,imho,除了手工操作(我可能会补充说,是由熟练的鲁比派操作)之外,任何其他方法都是不可能的,或者至少根本没有用处。