use*_*783 1 ruby terminology yarv mri
据我了解,在 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 1.8 及之前的 Ruby,它没有实现 Ruby 1.9。因此,当 Ruby 1.8 消失时,MRI 也消失了。
YARV确实重新使用了 MRI 的解析器,尽管明显的删除、更改和添加使 Ruby 1.9 的语法与 Ruby 1.8 不同。(事实证明,Ruby 的语法非常复杂,而且没有详细说明,以至于几乎所有Ruby 实现都以某种方式重用了 MRI 的解析器。例如,JRuby 当前的解析器最初是作为 MRI 的手动逐行端口。Rubinius 经历了许多不同的解析器,所有这些解析器都源自 MRI。IronRuby 使用 Microsoft 从 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 实现了(ed)Ruby 1.9 或更高版本。(我不确定 MagLev,我认为(废弃的)2.0 版本实现了 Ruby 1.9。)
人们也有时是指YARV(然而,另一个红宝石VM)为“MRI”(马茨的{红宝石|引用} {执行|口译}),但这是错误的:YARV写由Koichi“KO1”笹田,不幸“马茨”松本,所以它根本不是“Matz 的 Ruby 实现”。Matz当前的Ruby 实现是 MRuby,它是 ISO Ruby 编程语言规范的实现。