Ruby的解释器(interpreter)有多种实现。针对不同的项目约束、限制、要求,可以选择不同的Ruby解释器。下述列表并不完全,仅供参考了解之用,版本信息源自2023年1月19日获取到的最新数据。
Ruby Spec
Ruby不像Python那样有自己的语言规范(Ruby 1.8/1.9还有对应的,到了Ruby 2.x就没有对应的语言规范了)。这对于其他的Ruby解释器的开发者而言比较头疼,不过,存在一个社区版本的Ruby语言规范。其他的Ruby解释器的开发者都是通过测试满足这个社区版本的规范来知道自己的实现是符合Ruby语言的期望运行结果的。
对于Ruby语言版本与MRI强绑定的现象,社区中有人提出过更改语言的设计流程来解除这种绑定,不过,并没有奏效。
MRI
Matz版本的Ruby解释器,也算是官方的解释器,Ruby语言本身的版本发布会与MRI保持一致,也就是Ruby语言中的新特性会先在MRI中实现。又叫CRuby,因此MRI是C语言实现。
每年圣诞节,MRI/Ruby会有新的版本发布,包括新的语言特性、标准库的变更。
JRuby
基于JVM的Ruby实现。让Ruby具备了Java类似的特性,只要安装了JVM,就可以执行Ruby代码。
最新版本9.4.0.0,支持Ruby 3.1。
MRuby
轻量版本的Ruby实现,遵循部分ISO标准。方便让Ruby运行在iOS应用里,甚至是物联网、家居智能化场景下。支持Ruby 3.x版本的语法(模式匹配除外)。这个项目是受日本的经济产业部资助的,Matz本人参与开发的。
OPal
将Ruby翻译成Javascript的翻译器。OPal的运行时是Javascript的运行时,因此,OPal对Ruby的实现与其他的Ruby实现并没有完全一致,比如:OPal中字符串和Symbol是一种东西,OPal中不提供线程和shell执行的机制。
最新版本是1.7.1(2023年1月发布),对Ruby 3.2提供了支持。
TruffleRuby
基于GraalVM的Ruby实现,旨在提供:
- 更快的执行Ruby代码(就重计算的任务而言,TruffleRuby是最快的,参照benchmark)
- 支持并行运行Ruby代码(TruffleRuby没有GIL)
- 支持C扩展(很多C扩展开箱即用,包括数据库驱动)
- 支持与其他语言(Java,Javascript,Python,R)的快速、低开销的互操作
最新版本23.0.0,支持Ruby3.1.3。
不再更新的Ruby解释器
RubyMotion
使用Ruby开发跨平台(iOS、watchOS、Android、OS X)的工具链,商业化产品,按年订阅付费,半开源。不过,通常的Ruby gem不能直接使用在RubyMotion里,需要定制化。
Rubinius
为动态语言开发的通用解释器,基于LLVM。结合LLVM以及JIT编译器技术,Rubinus的内存管理比MRI要好。
与JRuby类似,Rubinus也有JIT编译器,相比MRI更好的内存管理,比MRI更出书的虚拟机(LLVM);与JRuby不同的是,Rubnius支持Ruby的C代码库,它的底层是由C++编写,而不是Java。
将Rubinius归为此类是因为从2020年的5.0版本后,再没有新的版本发布。支持的Ruby版本为2.3。
Ruby Enterprise Edition
是MRI 1.8版本的一个分支。面向WEB应用,针对内存管理和GC做了优化。不过,后续并没有对1.9及之后的版本跟进。曾一度是商用Rail应用的默认选择。
IronRuby
基于Microsoft的.NET开发的Ruby实现,采用C#语言。2011废弃,最高支持到Ruby 1.8.6。
References
The many interpreters and runtimes of Ruby programming language