1

我从用户级别使用 Ruby,实际上不处理内部问题。我知道 Rubinius 是“Ruby in Ruby”,我认为这是一种概括。最近,我在 RubySL 中遇到了 Rubinius 的错误(不,我没有错误消息)。

我开始研究 RubySL,并有点惊讶地看到 Rubinius 无处不在。我真的很喜欢 Ruby,只是好奇为什么 Rubinius 出现在大多数 RubySL 中?它似乎与锁/解锁之类的东西一起使用(例如https://github.com/rubysl/rubysl-thread/blob/2.0/lib/rubysl/thread/thread.rb)。绝对不是质疑,只是好奇。

4

1 回答 1

3

RubySL 是 Ruby 标准库的缩写。它是已发布的代码包的基本部分,形成了通常所说的 Ruby。标准库提供了您经常需要但不需要成为核心语言的一部分的相当基本的东西。

例如,Hash 或 Array 的实现、语言关键字、赋值的工作方式……都是核心语言的一部分。这些通常是用 Ruby 以外的语言实现的。MRI(常见的 C-Ruby)主要在 C 中实现这一点,JRuby 在 Java 中实现这一点。Rubinius 在 C++ 中实现了这一点,但主要是在 Ruby 本身中。它可以通过从一个非常简单的基础 VM 引导自身并逐渐使用 Ruby 添加更多内容来做到这一点。

然而,标准库在所有实现中大部分都在 Ruby 中实现(有一些例外,主要是出于性能原因)。现在,所有 Ruby 实现现在都有自己的 Ruby 标准库实现,因此在细节上可能有所不同。

Rubinius 实现标准库的方法是将其实现为单独的 gem。这个想法是有一天提供一个通用的标准库,可以被其他实现(包括 MRI)使用。这与 esp 的努力是一致的。Rubinius 社区推动RubySpec项目,以便为所有 Ruby 实现提供通用语言规范和测试套件。

RubySpec 项目最终被放弃了,现在看来,其他 Ruby 实现似乎并没有转向 RubySL gems 来实现它们的标准库。

因此,(这是TL;DR),RubySL gem 为 Rubinius 项目实现了 Ruby 标准库。因此,预计到处都会看到 Rubinius 项目:这是他们的代码,通常不会被其他 Ruby 实现使用。

于 2015-03-08T19:36:04.170 回答