2017-06-16 39 views
0

据我所知,在Ruby 1.9之前,MRI和YARV是Ruby编程语言的两个独立实现。MRI和YARV Ruby实现 - Ruby 1.9中发生了什么?

在Ruby 1.9中究竟发生了什么变化? MRI是否放弃了YARV?还是两个代码库以某种方式合并?

我已经看到1.9以后版本的Ruby被称为“MRI”和“YARV” - 这些名称中的哪一个是正确的(或者它们都是)?

+2

Google无法帮助您的任何原因? https://en.wikipedia.org/wiki/YARV – engineersmnky

回答

1

YARV不是Ruby的单独实现。这是Ruby的虚拟机,还是另一个虚拟机。当解释Ruby时,它被编译为YARV instructions

MRI是C语言中Ruby的Matz实现,它是规范实现。使用次数最多的可能是JRuby,它不使用YARV,因为它最终使用Java虚拟机并因此编译为Java字节码。

+2

欲了解更多关于MRI正在发生的事情,我推荐:http://patshaughnessy.net/ruby-under-a-microscope –

1

据我所知,在Ruby 1.9之前,MRI和YARV是Ruby编程语言的两个独立实现。

这只是一半正确的。

确实,MRI和YARV是Ruby编程语言的两个独立实现。

但是,谈论YARV“在Ruby 1.9之前”没有任何意义。 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 did重复使用MRI的解析器,尽管明显的移除,更改和添加使Ruby 1.9的语法与Ruby 1.8不同。 (事实证明,Ruby的语法非常复杂,并且可悲地低估了几乎所有的 Ruby实现以某种方式重新使用MRI的解析器,例如JRuby当前的解析器最初是作为MRI的手动逐行端口。Rubinius去了经历了很多不同的解析器,所有这些都是从MRI的派生的。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's {Ruby | Reference} {Implementation | Interpreter}),但这是错误的:YARV是由Koichi“ko1”Sasada编写的,而不是Yukihiro“matz”Matsumoto,所以它只是而不是“Matz的Ruby实现”。 Matz's current Ruby实现是MRuby,它是ISO Ruby编程语言规范的实现。

+0

所以,参考实现Ruby 1.8及更早版本是MRI,Ruby 1.9及更高版本的参考实现是YARV?那些使用术语“MRI”来指代Ruby 2.4的参考实现的人是错误的? – user200783

相关问题