我有各种各样的Ruby脚本:
rails (symfony)
ruby (php, bash)
rb-appscript (applescript)也有可能用Ruby替换低级语言吗?
我用Ruby编写代码,它会将其转换为java、c++或c。
因为人们说,当涉及到Ruby中更多的性能关键任务时,你可以用C扩展它。但是,扩展这个词意味着你要写C文件,你只需要在Ruby代码中调用这些文件。我想知道,我是否可以使用Ruby,并将其转换为C源代码,然后将其编译为机器码。然后我可以用C语言来“扩展”它,不过是用Ruby代码。
这就是这篇文章的主题。用Ruby编写所有代码,但获得C(或Java)的性能。
第二个优点是你不需要学习其他语言。
就像PHP的HipHop一样。
有这方面的实现吗?
发布于 2010-08-23 03:52:43
这样的编译器将是一项巨大的工作。即使它起作用了,它仍然必须
允许使用metaprogramming
的
所有这些都会造成巨大的运行时损失,因为C编译器既不能理解也不能优化这样的抽象。Ruby和其他动态语言之所以慢,不仅是因为它们被解释(或编译成字节码,然后字节码再被解释),还因为它们是动态的。
示例
在C++中,方法调用在大多数情况下都可以内联,因为编译器知道this的确切类型。如果传递了一个子类型,该方法仍然不能更改,除非它是虚拟的,在这种情况下,将使用仍然非常有效的查找表。
在Ruby中,类和方法可以在任何时候以任何方式更改,因此每次都需要(相对昂贵的)查找。
像Ruby、Python或Perl这样的语言有许多非常昂贵的特性,而且大多数相关程序严重依赖于这些特性(当然,它们非常有用!),因此它们不能被移除或内联。
简单地说:动态语言很难优化,简单地做解释器应该做的事情,并将其编译成机器代码并不能解决问题。正如V8所证明的,从动态语言中获得令人难以置信的速度是可能的,但你必须投入大量的资金和充满聪明程序员的办公室。
发布于 2010-08-23 03:35:26
有一个https://github.com/seattlerb/ruby_to_c Ruby To C编译器。它实际上只接受Ruby的一个子集。我认为缺少的主要部分是元编程特性
发布于 2013-02-09 23:14:49
在最近的一次采访中(2012年11月16日),Yukihiro "Matz“Matsumoto ( Ruby的创建者)谈到了将Ruby编译成C
(...)在东京大学,一名研究生正在从事一个学术研究项目,该项目先将Ruby代码编译成C代码,然后再编译二进制代码。该过程涉及类型推断等技术,在最佳情况下,速度可以达到典型手写C代码的90%。到目前为止,只发表了一篇论文,还没有开放源代码,但我希望明年一切都会揭晓……(from interview)
只有一个学生并不多,但这可能是一个有趣的项目。要完全支持Ruby可能还有很长的路要走。
https://stackoverflow.com/questions/3542982
复制相似问题