Rubinius:基于Ruby的Ruby虚拟机
Rubinius是一个主要用Ruby实现的Ruby虚拟机(VM),部分底层代码使用C语言编写,但未来计划将这些部分也改写为Ruby。该项目在过去一年中吸引了大量关注,并聚集了一批开发者,致力于完善未实现的功能和解决兼容性问题。
Rubinius的重要性
JRuby团队的Ola Bini在其文章《Rubinius is important》中强调了Rubinius的重要性,认为对于不需要Java基础设施的开发者来说,Rubinius是Ruby领域最重要的项目。他甚至预测,如果Ruby 1.9.1的计划没有重大变化,Rubinius将在6个月内成为CRuby的首选实现。他列举了支持这一观点的几个理由:
- 基于字节码:这使得性能优化更为容易。
- 可插拔的架构:例如垃圾回收/对象内存可以使用不同的算法。
- 线程安全与多VM支持:虽然目前尚未完全实现,但设计上支持多VM。
- 兼容MRI扩展:可以与现有的MRI扩展一起工作。
- 大部分代码用Ruby编写:这使得代码更易理解和维护。
- 直接访问内部机制:例如MethodContexts/BlockContexts等。
- 使用Valgrind确保C代码的健壮性:通过Valgrind工具确保C代码的质量。
性能提升
Rubinius的性能也在不断提升。Evan Phoenix最近发布了一些基准测试结果,显示Rubinius在许多测试中领先于Ruby 1.8.x(MRI)。以下是一些关键发现:
- 在未出错或未超时的测试中,Rubinius在24/31的测试中表现更快。
- 在核心方法测试(如
String#<<
)中,Rubinius表现较慢,因为这些部分尚未优化。 - 在仅测试VM架构的测试中,Rubinius表现显著更快,例如
bm_vm1_swap
和bm_vm1_simplereturn
。
尽管Rubinius目前使用字节码解释,但未来可能会引入JIT编译等优化,进一步提升性能。
项目支持与进展
Rubinius得到了多方面的支持。Evan Phoenix被EngineYard聘用,半职投入Rubinius开发。Sun公司也赞助了Rubinius开发者的旅行费用,并派遣JRuby的Charles Nutter参与Rubinius的开发冲刺。在最近的开发冲刺中,团队取得了以下进展:
- 连接了Syck(YAML解析器)并完善了Ruby C API兼容性组件。
- 完成了StringIO的规范实现。
- 添加了彩色回溯功能,便于快速定位错误。
- 完善了case语句的编译支持。
- 增加了基本的ObjectSpace支持。
- 修复了Thread支持并添加了抢占功能。
- 完善了FFI(外部函数接口)以支持从Ruby读写C整数和双精度浮点数。
- 开始支持eval的编译,并实现了File.fnmatch以准备Dir.glob的实现。
Rubinius与Gemstone的合作
Rubinius还在Gemstone的面向对象数据库(OODB)计划中扮演了重要角色,进一步扩展了其在Ruby生态系统中的应用前景。
总的来说,Rubinius作为一个主要由Ruby实现的Ruby虚拟机,凭借其可插拔架构、性能优化潜力以及对MRI扩展的兼容性,正在成为Ruby开发者关注的焦点,并有望在未来成为主流Ruby实现之一。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。