所以,我有几个问题要问,我确实浏览过互联网,但没有太多可靠的答案。大多数的博客文章会互相抵消,因为他们都称赞不同的东西,并且有“证明自己观点”的基准(我这辈子从没见过这么多自相矛盾的基准)。
总之,我的问题是:
鲁宾尼斯真的更快吗?我对这个表面上诚实的pro-Rubinius presentation印象深刻。另一件让我有点困惑的事情是,很多rubinius都是用ruby本身编写的,但不知何故它比c-ruby快?那么,这一定是一个非常好的语言实现!
eventmachine和runius一起工作吗?据我所知,eventmachine部分依赖于直到1.9才实现的光纤(如果我错了,请纠正我)。我知道Rubinius最终也会支持1.9;我不介意稍等。
c扩展在rubinius中工作吗?我已经编写了一个c扩展,它将从tcp流接收到的二进制消息“序列化”为ruby对象,反之亦然(我想细节并不重要,但如果有助于回答这个问题,我将更新post)。这可能是很多信息!我设法用ruby编写了同样的代码(虽然,一个月后没什么意义),但事实证明这是应用程序中的一个真正的瓶颈。所以,我不得不用C来解决我的问题。
编辑:我刚想起来,我用c来做另一个任务,它是数组的命中测试方法。基本上,它只是检查一个“点”是否在一个多边形内,它在克鲁比是不可能慢的。
如果前面的答案是“不”,那么rubinus中是否有c扩展的替代方案?我收集的VM是用C++编写的,这样就可以了。
一些“奖励”问题:
C-Ruby(2.0+,yarv)会摆脱Gil吗?或者至少修改一下,让cruby支持真正的并行性?
究竟什么是mruby?我看到马特兹正在做这件事,从描述上看,这件事非常棒。它与cruby(性能方面)有什么不同?
我为我给你带来的文字风暴道歉!千
最佳答案
鲁宾尼斯真的更快吗?
在大多数基准中,是的。
但基准是…哑巴。应用程序才是我们真正关心的。因此,最好的做法是对你的应用程序进行基准测试,看看它的性能如何。rubinius真正会在mri上发光的两个区域是并行性和内存使用。rubinius没有gil,因此可以利用所有可用的线程。它也有更多的sophisticated GC,因此一般来说,相对于gc它可以表现得更好。
我在10月11日做了这些基准测试
eventmachine和rubinius一起工作吗?
是的,如果有些部件不工作,则应报告问题。也就是说,my talk on MagLev at RubyConfem测试不会传递任何ruby实现。
c扩展在rubinius中工作吗?
对。我维护currently,所以如果你有一个是在travis上测试的,rubinius希望看到它通过rbx。rubinius在历史上对c-api和c-exts有很好的支持,不过如果有一天rubinius能够如此快速地运行ruby而不需要c-exts或c-api,那就太好了。
C-Ruby(2.0+,yarv)会摆脱Gil吗?或者至少修改一下,让cruby支持真正的并行性?
不,很可能不是。compatibility issue for C-exts关于2012年rubyconf的线程的matz意见(或缺乏意见)。佐田克一试图移除一次gil,而mri性能刚刚下降。埃文·菲尼克斯也试过一次,在他创造鲁宾尼乌斯之前,但没有好的结果。
鲁比先生到底是什么?
类似于lua的可嵌入ruby解释器。matt aimonetti有一个Jesse Storimer has a succinct writeup可能会给你一些启示。