据我所知,在Ruby1.9之前,MRI和YARV是Ruby编程语言的两个独立的实现。
Ruby 1.9版到底有什么变化?MRI是否被抛弃,取而代之的是YARV?或者这两个代码库是以某种方式合并的?
我见过Ruby 1.9以后的版本同时被称为"MRI“和"YARV”--这两个名称中哪一个是正确的(或者两者都是)?
发布于 2017-06-17 07:33:03
据我所知,在Ruby1.9之前,
和YARV是两个独立的Ruby语言实现。
这只有一半是正确的。
的确,MRI和YARV是Ruby编程语言的两个独立的实现。
但是,在Ruby1.9之前谈论YARV是没有意义的。YARV只实现了Ruby 1.9,YARV是Ruby 1.9的第一个实现。在Ruby 1.9之前没有YARV,在YARV之前也没有Ruby 1.9。
1.9版到底有什么变化?MRI是否被抛弃,取而代之的是YARV?或者这两个代码库是以某种方式合并的?
YARV只实现了Ruby 1.9,它没有实现Ruby 1.8。MRI只在Ruby 1.8之前实现过Ruby,而没有实现Ruby 1.9。因此,当Ruby1.8消失的时候,MRI也消失了。
YARV确实重用了MRI的解析器,尽管进行了明显的删除、更改和添加,使Ruby1.9的语法不同于Ruby1.8。(事实证明,Ruby的语法是如此的复杂和少得可怜,以至于几乎所有的Ruby实现都以某种方式重用了MRI的解析器。例如,JRuby的当前解析器是从MRI的一个手动逐行移植开始的。Rubinius经历了许多不同的解析器,所有这些解析器都是从MRI的解析器派生而来的。IronRuby使用的解析器是微软从Ruby.NET创建者那里获得许可的,而这个解析器是从MRI的parse.y生成的。…等)
我见过1.9以后的Ruby1.9版本同时被称为"MRI“和"YARV”--这两个名称中哪一个是正确的(或者是两个都正确)?
都不是。
MRI和YARV都不是Ruby的版本。它们是Ruby的实现。而且MRI从未实现过ruby1.9,只有YARV、IronRuby、MacRuby、JRuby、Rubinius、Opal、Topaz、TruffleRuby、Ruby+OMR、HotRuby、unholy和MRuby实现了ruby1.9或更高版本。(我对MagLev不太确定,我认为(放弃的) 2.0版本实现了Ruby1.9。)
人们有时确实将YARV (又一个Ruby VM)称为"MRI“(Matz的{Ruby | Reference} {实现|解释器}),但这是错误的: YARV是由Koichi "ko1”Sasada编写的,而不是由Yukihiro "matz“Matsumoto编写的,所以它根本不是”Matz的Ruby实现“。Matz目前的Ruby实现是MRuby,它是ISO Ruby编程语言规范的实现。
发布于 2017-06-17 00:17:32
YARV不是Ruby的单独实现。它是Ruby的虚拟机,或者是另一个虚拟机。当解释Ruby时,它被编译成YARV instructions。
MRI是Ruby在C中的Matz实现,它是规范的实现。第二个最常用的可能是JRuby,它没有使用YARV,因为它最终使用Java Virtual Machine,因此编译成Java字节码。
https://stackoverflow.com/questions/44591386
复制相似问题