RubySL 中的 Ruby

Rubinius in RubySL

我从用户级别使用 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 )之类的东西一起使用。绝对不是质疑,只是好奇。

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 gem 来实施他们的标准库。

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