1

私の理解では、Ruby 1.9 より前は、MRI と YARV は Ruby プログラミング言語の 2 つの別個の実装でした。

Ruby バージョン 1.9 で正確に何が変更されましたか? YARV を支持して MRI は放棄されましたか? それとも、2 つのコードベースが何らかの方法でマージされたのでしょうか?

「MRI」と「YARV」の両方と呼ばれる 1.9 以降のバージョンの Ruby を見たことがあります。どちらの名前が正しいですか (または両方ですか)?

4

2 に答える 2

5

私の理解では、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 もなくなりました。

YARVMRI のパーサーを再利用しましたが、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 です。

于 2017-06-16T23:33:03.233 に答える
2

YARV は Ruby の個別の実装ではありません。Ruby の仮想マシン、または Yet Another Virtual Machine です。Ruby が解釈されると、YARV 命令にコンパイルされます。

MRI は Ruby の C での Matz 実装であり、正規の実装です。2 番目に多く使用されているのはおそらく JRuby です。JRuby は、最終的に Java 仮想マシンを使用して Java バイト コードにコンパイルするため、YARV を使用しません。

于 2017-06-16T16:17:32.317 に答える