Ruby会不会*快*?

时间:2009-09-17 14:58:33

标签: ruby performance

Ruby会不会看到Javascript最近看到的性能提升?一个新的虚拟机能否真正实现真的,快速?或者我们是否必须假设Ruby的所有好处都有不可避免的性能损失?

与其他更快的语言相比,可以采取哪些方法来改善其性能?

8 个答案:

答案 0 :(得分:5)

Jörg W Mittag找到其他脚本语言时,

Rubinius向我指出asked about Trace Trees的方向。检查它们是否有更快的Ruby。

有趣的是,unladen-swallow正在尝试使用LLVM来加速Python。

有趣的东西。有很多未经探索的技巧可以加速脚本编写,但我想知道语言开发人员是否认为它优先于语言功能和库。

答案 1 :(得分:4)

  

我认为每个人都可以放心地认为它比其他脚本语言慢一些

Ruby 1.9实际上应该与CPython的速度有关。

答案 2 :(得分:4)

Maglev是一个基于现有Smalltalk引擎的ruby实现,该引擎一直瞄准扩展和使用的上游。

它被设计为比现有的ruby实现“明显更快”,如果您感兴趣,可以通过Maglev Architects之一观看演讲。

就像不同的Javascript实现在不同的浏览器上运行得更快或更慢一样,值得注意的是ruby本身在Linux和Windows上运行nearly twice as fast

答案 3 :(得分:2)

JRuby有一个jrubyc编译器,可以从ruby文件创建jvm .class文件。我从来没有使用它,只是快速查看它,所以我不知道有多少Ruby支持字节码编译。如果将其编译为字节码,则jvm应该像任何其他字节码一样进行优化。

答案 4 :(得分:1)

那肯定有很大的改进空间。以下是N体模拟(数学重算法)的基准时间列表:http://shootout.alioth.debian.org/u32q/benchmark.php?test=nbody&lang=all

Ruby 1.9需要34分钟,而其中一种速度更快的Web服务器语言(C#)只需37秒。因此,对于此特定任务, C#的速度提高了50倍。可以说,这不是Ruby无论如何都要使用的任务类型。但仍然存在可扩展性问题。

为了让Ruby变得更快,它确实需要以某种方式进行编译。这可以像V8 Javascript引擎一样及时。或者它可以更像ASP.NET,它在幕后维护'缓存'编译。换句话说,.NET具有动态编译的能力,但在这样做时你会注意到它需要花费很多时间。但是回报是,在代码发生变化之前不需要重新编译,正如上面的基准测试所表明的那样 - 最终编译的代码非常快。所以我认为Ruby(或其变体)在这方面复制.NET技术会更好。

答案 5 :(得分:1)

是的,Ruby会明快加快。

新的Javascript VM证明了一种动态的弱类型语言是可能的,它可以有效地编译运行时执行路径的重大更改。 LLVM提供了一个与平台无关的基础,可能会发生这种情况。这些创新最终会渗透到所有脚本语言中。

MacRubyMaglevRubinius可能会首先以这种速度推向市场,但C实现也可能会实现这一目标。

应该注意的是,JRuby是obsessed with speed并且有几个类似Ruby的prototype languages,它们允许开发人员交换某些功能以提高性能。

老实说,持有Ruby的主要原因是,对于许多目的而言,它已经足够快了。如果你想解决一个n-body problem,你应该去别处看看。但是,如果您想构建一个流畅,可维护的基于Web的应用程序,Ruby将使您更快地进入生产并具有出色的可维护性。你的风险投资会给你留下深刻的印象,他们会给你足够的资金来扩展。在这种情况下,您可以将您的阻塞点重写为内联C或Java。

答案 6 :(得分:1)

是的,Ruby可以变得更快 - 至少到不再是问题的程度。

当它与任何其他类似语言一样快时,它将不再是一个问题。即便如此,只有在类似功能上同样快速。

为什么呢?如果它比任何类似的都慢,那么有一种方法可以更快地完成它,所以它是可能的。随着Ruby的发展势头,它可能会变得更快。

答案 7 :(得分:0)

Ruby越来越快

虽然jRuby经常在简单的基准测试中被破坏,但随着可选的优化开启,它开始看起来很好。

官方的Ruby解释器现在是YARV,虽然大多数人还没有体验过它,因为它们仍处于1.8版本。