Ruby会不会看到Javascript最近看到的性能提升?一个新的虚拟机能否真正实现真的,快速?或者我们是否必须假设Ruby的所有好处都有不可避免的性能损失?
与其他更快的语言相比,可以采取哪些方法来改善其性能?
答案 0 :(得分:5)
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提供了一个与平台无关的基础,可能会发生这种情况。这些创新最终会渗透到所有脚本语言中。
MacRuby,Maglev或Rubinius可能会首先以这种速度推向市场,但C实现也可能会实现这一目标。
应该注意的是,JRuby是obsessed with speed并且有几个类似Ruby的prototype languages,它们允许开发人员交换某些功能以提高性能。老实说,持有Ruby的主要原因是,对于许多目的而言,它已经足够快了。如果你想解决一个n-body problem,你应该去别处看看。但是,如果您想构建一个流畅,可维护的基于Web的应用程序,Ruby将使您更快地进入生产并具有出色的可维护性。你的风险投资会给你留下深刻的印象,他们会给你足够的资金来扩展。在这种情况下,您可以将您的阻塞点重写为内联C或Java。
答案 6 :(得分:1)
是的,Ruby可以变得更快 - 至少到不再是问题的程度。
当它与任何其他类似语言一样快时,它将不再是一个问题。即便如此,只有在类似功能上同样快速。
为什么呢?如果它比任何类似的都慢,那么有一种方法可以更快地完成它,所以它是可能的。随着Ruby的发展势头,它可能会变得更快。
答案 7 :(得分:0)
虽然jRuby经常在简单的基准测试中被破坏,但随着可选的优化开启,它开始看起来很好。
官方的Ruby解释器现在是YARV,虽然大多数人还没有体验过它,因为它们仍处于1.8版本。