17

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

无论如何,我的问题是:

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

一些“奖励”问题:

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

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

4

2 回答 2

21

鲁比尼乌斯真的更快吗?

在大多数基准测试中,是的。 带有错误的 RBS 基准

RBS 基准测试无错误

但是基准是……愚蠢的。应用程序是我们真正关心的。因此,最好的办法是对您的应用程序进行基准测试并查看它的性能如何。Rubinius 真正在 MRI 上大放异彩的两个领域是并行性和内存使用。Rubinius 没有 GIL,因此您可以利用所有可用的线程。它还具有更复杂的 GC,因此总的来说它可以在 GC 方面表现更好。

我在 11 年 10 月为我在 RubyConf 上关于 MagLev 的演讲做了这些基准测试

EventMachine 可以与 Rubinius 一起使用吗?

是的,如果有部分不起作用,则应报告问题。话虽如此,目前EM 测试没有通过任何 Ruby 实现。

C 扩展在 Rubinius 中有效吗?

是的。我维护C-exts 的兼容性问题,所以如果你有一个在 Travis 上测试过的,Rubinius 希望看到它通过 rbx。Rubinius 历来对 C-api 和 C-exts 有很好的支持,尽管如果有一天 Rubinius 能够以如此快的速度运行 Ruby并且不需要 C-exts 或 C-api,那就太好了。

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

不,很可能不会。Jesse Storimer在 RubyConf 2012 的线程上对 Matz 的观点(或缺乏观点)进行了简洁的记录。Koichi Sasada 曾试图移除 GIL,而 MRI 性能刚刚下降。埃文·菲尼克斯也尝试过一次,在他创造鲁比尼乌斯之前,但没有得到很好的结果。

mruby 到底是什么?

一个可嵌入的 Ruby 解释器,类似于 Lua。Matt Aimonetti 有几篇文章可能会对您有所启发。

于 2013-02-03T19:00:40.613 回答
4

我不太喜欢 Ruby,但我可能能够回答第一个问题。

鲁比尼乌斯真的更快吗?

我见过不同的基准告诉不同的事情。然而,Rubinius 部分使用 Ruby 编写的事实并不一定意味着它更慢。我对 PyPy 也有同样的想法,它是 Python 中的 Python。在大学进行了一些研究和正确的课程之后,我知道为什么。

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

顺便提一句。用同一种语言为一种语言编写口译员也是一种常见的学术实践,以展示该语言的强大程度。在一节课中,我们在 Lisp 中用 Lisp 编写了 Lisp。

于 2012-11-06T10:35:05.167 回答