MRI和YARV Ruby实现 – 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,包括Ruby 1.8,它没有实现Ruby 1.9。 因此,当Ruby 1.8离开时,MRI也消失了。

YARV 确实重复使用了MRI的解析器,尽管有明显的删除,更改和添加使Ruby 1.9的语法与Ruby 1.8不同。 (事实certificate,Ruby的语法是如此疯狂复杂,而且几乎所有 Ruby实现以某种方式重用MRI的解析器。例如,JRuby的当前解析器最初是作为MRI的手动逐行端口.Rubinius经历了一个许多不同的解析器,都是从MRI中派生出来的.CronRuby使用了一个解析器,微软从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 in C的Matz实现,它是规范实现。 第二个最常用的可能是JRuby,它不使用YARV,因为它最终使用Java虚拟机,因此编译为Java字节代码。