Rubinius 综述

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_swapbm_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实现之一。

阅读 21
0 条评论