首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将Ruby转换为低级语言?

是否将Ruby转换为低级语言?
EN

Stack Overflow用户
提问于 2010-08-23 03:25:31
回答 7查看 14K关注 0票数 15

我有各种各样的Ruby脚本:

代码语言:javascript
复制
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一样。

有这方面的实现吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-08-23 03:52:43

这样的编译器将是一项巨大的工作。即使它起作用了,它仍然必须

允许使用metaprogramming

  • do动态dispatch

  • etc.

  1. 包括ruby
  2. 标准库(不是为了性能而是为了可用性而构建的

所有这些都会造成巨大的运行时损失,因为C编译器既不能理解也不能优化这样的抽象。Ruby和其他动态语言之所以慢,不仅是因为它们被解释(或编译成字节码,然后字节码再被解释),还因为它们是动态的。

示例

在C++中,方法调用在大多数情况下都可以内联,因为编译器知道this的确切类型。如果传递了一个子类型,该方法仍然不能更改,除非它是虚拟的,在这种情况下,将使用仍然非常有效的查找表。

在Ruby中,类和方法可以在任何时候以任何方式更改,因此每次都需要(相对昂贵的)查找。

像Ruby、Python或Perl这样的语言有许多非常昂贵的特性,而且大多数相关程序严重依赖于这些特性(当然,它们非常有用!),因此它们不能被移除或内联。

简单地说:动态语言很难优化,简单地做解释器应该做的事情,并将其编译成机器代码并不能解决问题。正如V8所证明的,从动态语言中获得令人难以置信的速度是可能的,但你必须投入大量的资金和充满聪明程序员的办公室。

票数 14
EN

Stack Overflow用户

发布于 2010-08-23 03:35:26

有一个https://github.com/seattlerb/ruby_to_c Ruby To C编译器。它实际上只接受Ruby的一个子集。我认为缺少的主要部分是元编程特性

票数 12
EN

Stack Overflow用户

发布于 2013-02-09 23:14:49

在最近的一次采访中(2012年11月16日),Yukihiro "Matz“Matsumoto ( Ruby的创建者)谈到了将Ruby编译成C

(...)在东京大学,一名研究生正在从事一个学术研究项目,该项目先将Ruby代码编译成C代码,然后再编译二进制代码。该过程涉及类型推断等技术,在最佳情况下,速度可以达到典型手写C代码的90%。到目前为止,只发表了一篇论文,还没有开放源代码,但我希望明年一切都会揭晓……(from interview)

只有一个学生并不多,但这可能是一个有趣的项目。要完全支持Ruby可能还有很长的路要走。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3542982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档