首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MRI和YARV Ruby实现- Ruby 1.9中发生了什么?

MRI和YARV Ruby实现- Ruby 1.9中发生了什么?
EN

Stack Overflow用户
提问于 2017-06-16 22:09:03
回答 2查看 1.5K关注 0票数 1

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

Ruby 1.9版到底有什么变化?MRI是否被抛弃,取而代之的是YARV?或者这两个代码库是以某种方式合并的?

我见过Ruby 1.9以后的版本同时被称为"MRI“和"YARV”--这两个名称中哪一个是正确的(或者两者都是)?

EN

回答 2

Stack Overflow用户

发布于 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编程语言规范的实现。

票数 5
EN

Stack Overflow用户

发布于 2017-06-17 00:17:32

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

MRI是Ruby在C中的Matz实现,它是规范的实现。第二个最常用的可能是JRuby,它没有使用YARV,因为它最终使用Java Virtual Machine,因此编译成Java字节码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44591386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档