据我了解,在Ruby 1.9之前,MRI和YARV是Ruby编程语言的两个独立实现。
Ruby 1.9版本究竟发生了什么变化? MRI放弃了YARV吗?或者这两个代码库是以某种方式合并的?
我见过1.9以后的Ruby版本,称为“MRI”和“YARV” - 这些名称中的哪一个是正确的(或者它们都是)?
答案 0 :(得分:3)
据我了解,在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不同。 (事实证明,Ruby的语法是如此疯狂复杂,而且可悲的是,几乎所有的 Ruby实现都以某种方式重用MRI的解析器。例如,JRuby的当前解析器最初是作为手动逐行端口Rubinius经历了很多不同的解析器,所有这些解析器都来自MRI's。IronRuby使用了一个解析器,微软从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编程语言规范的一个实现。答案 1 :(得分:1)
YARV不是Ruby的单独实现。它是Ruby的虚拟机,或者是又一个虚拟机。解释Ruby时,会将其编译为YARV instructions。
MRI是Ruby in C的Matz实现,它是规范实现。第二个最常用的可能是JRuby,它不使用YARV,因为它最终使用Java虚拟机,因此编译为Java字节码。