【发布时间】:2016-02-04 03:04:45
【问题描述】:
C、Java、C# 和 Python 从头开始编译。感谢 Facebook,PHP 现在也可以编译并且可以在 HHVM 上运行,从而提高程序的性能。 Ruby 不可编译并且比上述语言慢。 Ruby 是否有可能在未来被编译(比如带有 HHVM 的 PHP)?或者也许有一些原因不能?
【问题讨论】:
-
欢迎来到 Stack Overflow。您的问题鼓励意见和猜测,而不是具体的答案。请阅读“help center”了解主题信息,阅读“help center”了解不要问的问题。 Ruby 将来可能会编译,但何时以及是否是模糊的。
-
所有现有的,甚至大多数过去的 Ruby 实现都有编译器:YARV、Rubinius、JRuby、IronRuby、MagLev、Topaz、Cardinal、RubyGoLightly、XRuby、SmallRuby、BlueRuby、Alumina、Ruby.NET、the其他 IronRuby(有两个不同的同名实现)、RedSun、MacRuby、MRuby、RubyMotion,以及可能还有很多我忘记的其他实现。仅有的两个从未有编译器的实现是 IoRuby(从未发布)和 MRI(已弃用且未维护)。 JRuby 最初是一个纯解释器,但后来添加了一个编译器。更有趣的是:……
-
... IronRuby 最初是一个纯编译器,但后来为了提高性能添加了一个解释器!当然,Ruby 是可以编译的。所有语言都可以编译。编译和解释是......好吧......编译器或解释器(呃!)的特征,而不是语言。性能是快速实施所花费的金钱/资源/人员/博士论文数量的函数。 Java 一开始很慢,只有在 Java 公司开始购买 Smalltalk 和 Lisp 专有技术时才变得很快。 (Oracle HotSpot 的核心仍然只是一个稍加修改的 Smalltalk VM。)
-
此外,在性能方面,当前的 CPU 架构和操作系统对 Ruby 等语言非常不利。但是还有其他架构,它们更适合。这同样适用于 C:C 速度很快,因为当前的 CPU 和操作系统被明确设计为使 C 语言运行得更快。例如,在最初的 AS/400 上,C 非常慢,因为 AS/400 没有指针、文件、线程、进程、直接内存操作或虚拟内存,所以 C 本质上必须在解释的内部运行提供所有这些功能的模拟器。
标签: ruby performance scalability