Ruby の実装はたくさんある。通常は CRuby (MRI) を使うが、パフォーマンスが必要な場合は TruffleRuby, JRuby も選択肢になる。
スクリプトの側からRuby実装を調べるには, RUBY_ENGINE
変数を見る.
RUBY_ENGINE | Implementation |
---|---|
<undefined> | MRI < 1.9 |
'ruby' | MRI >= 1.9 |
'jruby' | JRuby |
'macruby' | MacRuby |
'rbx' | Rubinius |
'maglev' | MagLev |
'ironruby' | IronRuby |
'cardinal' | Cardinal |
各実装の互換性: The Ruby Spec Suite Compatibility Report · On the Edge of Ruby 2020年の記事。CRuby 100%, TruffleRuby 97%, JRuby 88% (C-API が全滅), Opal 35%
ベンチマーク; Benchmarking CRuby, MJIT, YJIT, JRuby and TruffleRuby · On the Edge of Ruby 2022 年の記事. TruffleRuby が圧勝、JRuby も速い。CRuby では yjit が効果的。
asdf-ruby は内部で rbenv/ruby-build を呼び出している。それでインストールがサポートされているか。
RUBY_ENGINE = "ruby"
Ruby 3.1 でJITコンパイラが変更。yjit を選ぶとよい。
JavaVM 上で動かす。
JRuby 9.4.x targets Ruby 3.1 compatibility. Rails 7 が動かない。 JRuby v9.4.3 までに動くようになったようだ。
開発は継続しているようだが, 2023年7月現在, まだ最初のリリースがない。
Ruby 2.0.0 のサブセット。どのような特徴があるのか、どのぐらい互換性があるのか、試していない。
mruby の別実装。for one-chip microcontrollers. キーボードのファームウェアなど。
Oracle が開発。v23 が 2023年6月リリース.
RUBY_ENGINE = 'truffleruby'
. RUBY_VERSION
is the compatible MRI version.
Compatibility [graalvm.org]
MRI version 3.1, including C extensions, との互換性を目指す. 継続 (callcc()
), fork()
はない。
Webブラウザで動かす! フロントエンドフレームワークで使われている。v1.7.3 が 2023年3月。リリースが続いている。
Ahead-of-Time (AOT) compiler. 活発に開発されている。ruby/spec への適合も上がっている。ただ, まだリリースなし。
関連プロジェクトに、手書きの再帰下降パーサ Natalie Parser がある。
v0.4.2 が 2021年11月. 開発停滞か。