簡體   English   中英

MRI和YARV Ruby實現-Ruby 1.9中發生了什么?

[英]MRI and YARV Ruby implementations - what happened in Ruby 1.9?

據我了解,在Ruby 1.9之前,MRI和YARV是Ruby編程語言的兩個獨立實現。

Ruby 1.9版到底發生了什么變化? MRI是否為了YARV而被放棄? 還是兩個代碼庫以某種方式合並了?

我已經看到1.9以后的Ruby版本,分別稱為“ MRI”和“ YARV”-這些名稱中的哪個正確(或它們都是正確的)?

據我了解,在Ruby 1.9之前,MRI和YARV是Ruby編程語言的兩個獨立實現。

這只是正確的一半。

的確,MRI和YARV是Ruby編程語言的兩個單獨的實現。

但是,談論“ Ruby 1.9之前的版本” YARV毫無意義。 YARV僅實現了Ruby 1.9,YARV是Ruby 1.9的第一個實現。 在Ruby 1.9之前沒有YARV,在YARV之前沒有Ruby 1.9。

Ruby 1.9版到底發生了什么變化? MRI是否為了YARV而被放棄? 還是兩個代碼庫以某種方式合並了?

YARV僅實現了Ruby 1.9,而沒有實現Ruby 1.8。 MRI僅實現了Ruby 1.8(包括Ruby 1.8),而沒有實現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生成的,依此類推……)

我已經看到1.9以后的Ruby版本,分別稱為“ MRI”和“ YARV”-這些名稱中的哪個正確(或它們都是正確的)?

都不是。

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(又一個Ruby VM)稱為“ MRI”(Matz的{Ruby | Reference} {Implementation | Interpreter}),但這是錯誤的:YARV是由Koichi“ ko1” Sasada編寫的,而不是Yukihiro“ matz” Matsumoto編寫的,因此它根本不是 “ Matz的Ruby實現”。 Matz 當前的 Ruby實現是MRuby,它是ISO Ruby編程語言規范的實現。

YARV不是Ruby的單獨實現。 它是Ruby的虛擬機,或另一個虛擬機。 解釋Ruby時,會將其編譯為YARV指令

MRI是Ruby在C中的Matz實現,這是規范的實現。 第二使用最多的可能是JRuby,它不使用YARV,因為它最終使用Java虛擬機,因此可以編譯為Java字節碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM