Rubinus或MRI 1.9.3(YARV)?

时间:2012-11-03 01:46:25

标签: ruby ruby-1.9 rubinius yarv

所以,我有几个问题要问我,我确实浏览了互联网,但没有太多可靠的答案。大多数博客文章会取消彼此,因为他们都赞扬了不同的东西,并有基准来“证明他们的观点”(我从来没有见过这么多矛盾生命中的基准)。

无论如何,我的问题是:

  • Rubinius 真的更快吗?我对这显然是诚实的pro-Rubinius presentation印象深刻。让我感到困惑的另一件事是,很多Rubinius都是用Ruby编写的,但不知何故它比C-Ruby更快?那么它必须是一个非常好的语言实现!
  • EventMachine是否适用于Ruinius?据我所知,EventMachine部分依赖于Fibers(如果我错了,请纠正我),直到1.9才实现。我知道Rubinius最终也会支持1.9;我不介意等一下。
  • C扩展是否适用于Rubinius?我编写了一个C扩展,它将从TCP流接收的二进制消息“序列化”为Ruby对象,反之亦然(我认为细节并不重要,但如果它有助于回答这个问题,我会更新帖子)。这可以是很多的消息!我设法在Ruby中编写相同的代码(尽管在一个月后它没有任何意义),但事实证明它在应用程序中是一个真正的瓶颈。所以,我不得不使用C作为我的问题的“解决方案”。 编辑:我记得,我用C代替另一个任务,它是Arrays的命中测试方法。基本上它只是检查一个“点”是否在一个多边形内,它在CRuby中是不可能的慢。
  • 如果之前的答案是“否”,那么在Rubinus中是否存在C扩展的替代方案?我收集的VM是用C ++编写的,那么。

一些“奖励”问题:

  • C-Ruby(2.0 +,YARV)是否会摆脱GIL?或者至少修改它以便CRuby支持真正的并行性?
  • 究竟是什么mruby我看到matz正在研究它,就描述而言,它看起来非常棒。与CRuby(性能方面)有何不同?

我为你发动的这场文字风暴道歉! ♥

2 个答案:

答案 0 :(得分:21)

  

Rubinius真的更快吗?

在大多数基准测试中,是的。 RBS benchmarks with errors

RBS benchmarks w/o errors

但基准是......愚蠢。应用程序是我们真正关心的。因此,最好的办法是对您的应用进行基准测试。看看它的表现如何。 Rubinius将在MRI上真正发光的两个领域是并行性和平行性。内存使用情况。 Rubinius没有GIL,所以你可以利用所有可用的线程。它还有更多sophisticated GC,所以一般来说它可以在GC方面表现更好。

我在2011年10月为my talk on MagLev at RubyConf

做了那些基准测试
  

EventMachine是否与Rubinius一起使用?

是的,如果有部分不起作用,则应报告该问题。话虽如此,currently EM测试不会传递任何Ruby实现。

  

C扩展是否适用于Rubinius?

是。我维持compatibility issue for C-exts,所以如果你有一个在Travis上测试过,那么Rubinius希望看到它对抗rbx。 Rubinius历来对C-api和C-exts有很好的支持,但如果有一天Rubinius能够如此快地运行Ruby 那么将会很好。不需要C-exts或C-api。< / p>

  

C-Ruby(2.0 +,YARV)是否会摆脱GIL?或者至少修改它以便CRuby支持真正的并行性?

不,很可能不是。来自RubyConf 2012的线程的Matz意见(或缺乏)的Jesse Storimer has a succinct writeup .Koichi Sasada试图移除GIL一次并且MRI性能刚刚消失。 Evan Phoenix在创造Rubinius之前也尝试了一次,但没有取得好成绩。

  

什么是mruby?

一个可嵌入的Ruby解释器,类似于Lua。 Matt Aimonetti有一个few articles,可能会为你提供一些启示。

答案 1 :(得分:4)

我对Ruby不太满意,但我可以回答第一个问题。

  

Rubinius真的更快吗?

我见过不同的基准,讲述不同的事情。然而,Rubinius部分用Ruby编写的事实并不一定意味着它更慢。我对Python中Python的PyPy也有同样的看法。经过一些研究和大学合适的课程,我知道为什么。

  • 据我所知,两者都是用他们语言的一个子集编写的,应该更加简单。对于这样的子集,可以比整个语言更容易地优化(例如C)解释器。
  • 使用自己的语言编写Ruby / Python解释器可以更灵活,更快速地进行新解释算法的原型设计。存在Ruby和Python的全部要点是算法可以比例如更快地实现算法。 C甚至是汇编程序。更快的算法在很多时候都超过了解释器的小开销。

顺便说一下。为同一语言的语言编写翻译也是一种常见的学术实践,以显示语言的强大程度。在一个类中,我们在Lisp中用Lisp编写了Lisp。