我正在使用大量遗留的C代码,需要将其转换为项目的Ruby。
我在线看过Ruby to C的翻译,但不是相反。是否有一种简单的方法可以解决这个特定问题?
答案 0 :(得分:6)
你要么必须编写一个C到Ruby的翻译器,这是可能的,但这种努力可能是不合理的,或者你可以将C代码拆分成更小的模块,你可以创建Ruby包装器作为第一步。一旦它们全部用Ruby包装并且主控制流程在Ruby中完成,您就可以编写一个测试工具(用于验证替换代码的正确性并辅助逆向工程)并开始用Ruby模块替换C模块。 / p>
分界&如果您将模块用作本机扩展,那么征服方法应该适用于常规Ruby,但是如果您将JRuby作为运行时环境的目标,这显然会导致进一步的问题。如果你想根据你的评论在JRuby中做类似的事情,那么你正在考虑将这些C模块包装在JNI中并通过这种方式从JVM中调用。无论哪种方式都允许您的C代码与Ruby代码进行交互,但这两种方法是不可互换的。
这两种方法都不会很快,而且两者都是很多的工作。
答案 1 :(得分:1)
你可以:
答案 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。