Ruby 内部结构词汇表

只是一个我在 Ruby 源代码中遇到的缩写列表及其含义。

术语 定义
‘BIN` 基本指令名称。用作引用 YARV 指令的宏。将 pop 转换为 YARVINSN_pop。
‘bop` 基本操作符。与诸如 ‘Integer` 加和减等方法相关,只要它们没有被重新定义,就可以进行优化。
‘cc` 调用缓存。调用站点的内联缓存结构。存储在 ‘cd` 中
‘cd` 调用 数据。一个指向 ‘ci` 和 `cc` 的数据结构。`iseq` 对象指向 `cd`,并通过此结构访问调用信息和调用缓存。
‘cfp` 控制帧指针。表示 Ruby 堆栈帧。调用方法会推送一个新帧 (cfp),返回会弹出一个帧。指向 ‘pc`、`sp`、`ep` 和相应的 `iseq`。
‘ci` 调用信息。指 ‘rb_callinfo` 结构。包含有关调用站点的信息,包括要传递的参数数量,是否为关键字参数等。与 `cc` 和 `cd` 结合使用。
‘cref` 引用。一个指向存储 ‘klass_or_self`、可见性范围和精炼的类引用的结构。它还存储一个指向由 `rb_cref_struct * next` 引用的层次结构中下一个类的指针。引用是词法作用域的。
CRuby 用 C 编写的 Ruby 实现
‘cvar` 变量。指 Ruby 类变量,如 ‘@@foo`
‘dvar` 动态变量。由解析器用来引用在当前词法作用域之外定义的局部变量。例如 ‘def foo; bar = 1; -> { p bar }; end`,块内的“bar”是一个 `dvar`。
‘ec` 执行上下文。顶层 VM 上下文,指向当前的 ‘cfp`。
‘ep` 环境指针。局部变量,包括方法参数都存储在 ‘ep` 数组中。`ep` 由 `cfp` 指向。
GC 垃圾回收器
‘gvar` 全局变量。指 Ruby 全局变量,如 ‘$$` 等。
‘ICLASS` 内部 。当包含一个模块时,目标类会得到一个新的超类,它是 ‘ICLASS` 的一个实例。`ICLASS` 表示继承链中的模块。
‘ifunc` 内部函数。一个用 C 实现的块。
‘iseq` 指令序列。通常 C 代码中的“iseq”会指一个 ‘rb_iseq_t` 对象,该对象保存对实际指令序列的引用,这些指令序列由 VM 执行。该对象还保存有关代码的信息,例如与该代码关联的方法名称。
‘insn` 指令。指 YARV 指令。
‘insns` 指令。通常是 YARV 指令的数组。
‘ivar` 实例变量。指 Ruby 实例变量,如 ‘@foo`。
‘imemo` 内部备忘录。一个标签结构,其内存由 Ruby 的 GC 管理,但包含内部信息,不打算暴露给 Ruby 程序。包含各种信息,具体取决于类型。有关不同类型,请参见 ‘imemo_type` 枚举。
JIT 即时 时间 编译器
‘lep` 局部环境指针。一个标记为 `VM_ENV_FLAG_LOCAL` 的 ‘ep`。通常这是方法(而不是块,其 `ep` 不是“局部”的)的 `ep`。
‘local` 局部。指局部变量。
‘me` 方法条目。指 ‘rb_method_entry_t` 结构,它是 Ruby 方法的内部表示。
MRI Matz 的 Ruby 实现
‘pc` 程序计数器。通常是 VM 将要接下来执行的指令。由 ‘cfp` 指向,并由 VM 递增。
‘sp` 堆栈指针。堆栈的顶部。VM 在 ‘iseq` 中执行指令,指令会将值压入和弹出堆栈。VM 更新 `cfp` 上的 `sp` 以指向堆栈的顶部。
‘svar` 特殊变量。指诸如 ‘$~` 和 `$_` 之类的特殊局部变量。请参见 `insns.def` 中的 `getspecial` 指令。
‘VALUE` VALUE 是从 Ruby C 代码指向 ruby 对象的指针。
VM 虚拟机。在 MRI 的情况下是 YARV (Yet Another Ruby VM)
WB 写入屏障。与 GC 写入屏障有关
WC 通配符。如在 ‘getlocal_WC_0` 等指令中所见。这意味着此指令采用参数的“通配符”(在本例中是局部变量的索引)
YARV 又一个 Ruby VM。CRuby 使用的虚拟机
ZOMBIE 僵尸对象。一个具有尚未执行的终结器的对象。该对象已被收集,因此“已死”,但终结器尚未运行,因此它仍然在某种程度上是活着的。