私の理解では、Ruby 1.9 より前は、MRI と YARV は Ruby プログラミング言語の 2 つの別個の実装でした。
Ruby バージョン 1.9 で正確に何が変更されましたか? YARV を支持して MRI は放棄されましたか? それとも、2 つのコードベースが何らかの方法でマージされたのでしょうか?
「MRI」と「YARV」の両方と呼ばれる 1.9 以降のバージョンの Ruby を見たことがあります。どちらの名前が正しいですか (または両方ですか)?
私の理解では、Ruby 1.9 より前は、MRI と YARV は Ruby プログラミング言語の 2 つの別個の実装でした。
Ruby バージョン 1.9 で正確に何が変更されましたか? YARV を支持して MRI は放棄されましたか? それとも、2 つのコードベースが何らかの方法でマージされたのでしょうか?
「MRI」と「YARV」の両方と呼ばれる 1.9 以降のバージョンの Ruby を見たことがあります。どちらの名前が正しいですか (または両方ですか)?
私の理解では、Ruby 1.9 より前は、MRI と YARV は Ruby プログラミング言語の 2 つの別個の実装でした。
これは半分だけ正しいです。
確かに、MRI と YARV は Ruby プログラミング言語の 2 つの別個の実装です。
しかし、「Ruby 1.9 より前」の YARV について話すのは意味がありません。YARV はこれまで Ruby 1.9 のみを実装しており、YARV は Ruby 1.9 の最初の実装でした。Ruby 1.9 より前に YARV はなく、YARV より前に Ruby 1.9 もありませんでした。
Ruby バージョン 1.9 で正確に何が変更されましたか? YARV を支持して MRI は放棄されましたか? それとも、2 つのコードベースが何らかの方法でマージされたのでしょうか?
YARV は Ruby 1.9 のみを実装しており、Ruby 1.8 は実装していません。MRI は Ruby 1.8 までの Ruby のみを実装し、Ruby 1.9 を実装していませんでした。したがって、Ruby 1.8 がなくなると、MRI もなくなりました。
YARVはMRI のパーサーを再利用しましたが、Ruby 1.9 の構文を Ruby 1.8 とは異なるものにする明らかな削除、変更、および追加はありました。(結局のところ、Ruby の構文は非常に複雑であり、ひどく仕様が不十分であるため、ほとんどすべてのRuby 実装が何らかの方法で MRI のパーサーを再利用しています。たとえば、JRuby の現在のパーサーは、MRI の行ごとの手動ポートとして開始されました。Rubinius は、さまざまなパーサーが多数あり、それらはすべて MRI から派生したものです。IronRuby は、Microsoft が Ruby.NET 作成者からライセンス供与されたパーサーを使用し、これは MRI から生成されparse.y
ます。などなど…)
「MRI」と「YARV」の両方と呼ばれる 1.9 以降のバージョンの Ruby を見たことがあります。どちらの名前が正しいですか (または両方ですか)?
ない。
MRI も YARV も Ruby のバージョンではありません。これらはRuby の実装です。また、MRI は Ruby 1.9 を実装したことはなく、YARV、IronRuby、MacRuby、JRuby、Rubinius、Opal、Topaz、TruffleRuby、Ruby+OMR、HotRuby、unholy、および MRuby のみが Ruby 1.9 以降を実装しました。(MagLev についてはよくわかりませんが、(放棄された) 2.0 リリースでは Ruby 1.9 が実装されていたと思います。)
YARV (Yet Another Ruby VM) を「MRI」(Matz の {Ruby | Reference} {Implementation | Interpreter}) と呼ぶことがありますが、それは誤りです。ですので、単純に「マッツのRuby実装」ではありません。Matz の現在のRuby 実装は、ISO Ruby プログラミング言語仕様の実装である MRuby です。
YARV は Ruby の個別の実装ではありません。Ruby の仮想マシン、または Yet Another Virtual Machine です。Ruby が解釈されると、YARV 命令にコンパイルされます。
MRI は Ruby の C での Matz 実装であり、正規の実装です。2 番目に多く使用されているのはおそらく JRuby です。JRuby は、最終的に Java 仮想マシンを使用して Java バイト コードにコンパイルするため、YARV を使用しません。