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

时间:2010-04-02 10:28:38

标签: c ruby translation legacy-code

我正在使用大量遗留的C代码,需要将其转换为项目的Ruby。

我在线看过Ruby to C的翻译,但不是相反。是否有一种简单的方法可以解决这个特定问题?

6 个答案:

答案 0 :(得分:6)

你要么必须编写一个C到Ruby的翻译器,这是可能的,但这种努力可能是不合理的,或者你可以将C代码拆分成更小的模块,你可以创建Ruby包装器作为第一步。一旦它们全部用Ruby包装并且主控制流程在Ruby中完成,您就可以编写一个测试工具(用于验证替换代码的正确性并辅助逆向工程)并开始用Ruby模块替换C模块。 / p>

分界&如果您将模块用作本机扩展,那么征服方法应该适用于常规Ruby,但是如果您将JRuby作为运行时环境的目标,这显然会导致进一步的问题。如果你想根据你的评论在JRuby中做类似的事情,那么你正在考虑将这些C模块包装在JNI中并通过这种方式从JVM中调用。无论哪种方式都允许您的C代码与Ruby代码进行交互,但这两种方法是不可互换的。

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

答案 1 :(得分:1)

你可以:

  1. 在Ruby中编写一个C解释器(非常难)。
  2. 使用类似SWIG的东西包装已编译的C代码(更容易)。

答案 2 :(得分:1)

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

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

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

这是翻译器的输出:

def add(a,b) 
    return a+b
end

答案 3 :(得分:0)

用C语言编程和用Ruby编程承载完全不同的编程范例。因此,虽然你可以用任何语言编写Fortran(或者在这种情况下是C)代码的古老说法都是正确的,但是你最终通过机器翻译获得的Ruby代码根本就不是Ruby,除了语法上。

所以,恕我直言,除了手工之外的任何其他方式(由熟练的Rubyists完成,我可能会添加)将是不可能的,或者至少根本没用。

答案 4 :(得分:0)

也许您可以尝试这个https://github.com/jackieju/CPP2Ruby/ 对于cpp来说是新鲜的,但是对于c到红宝石来说存在时间更长

答案 5 :(得分:0)

您可以尝试Abap2Ruby。它还可以将cpp转换为ruby。