Ruby 内部术语表

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

术语 定义
‘BIN` 基本指令名称。用作引用 YARV 指令的宏。将 pop 转换为 YARVINSN_pop。
‘bop` 基本运算符。与方法相关,例如 `Integer` 加号和减号,只要它们尚未重新定义,就可以对其进行优化。
‘cc` 调用缓存。调用站点的内联缓存结构。存储在 `cd` 中
‘cd` 调用 Data。一个指向“ci”和“cc”的数据结构。`iseq` 对象指向 `cd`,并通过此结构访问调用信息和调用缓存
‘cfp` 控制帧指针。表示 Ruby 堆栈帧。调用方法会推送一个新帧 (cfp),返回会弹出帧。指向 `pc`、`sp`、`ep` 和对应的 `iseq`
‘ci` 调用信息。指一个 `rb_callinfo` 结构。包含调用站点相关的调用信息,包括要传递的参数数量、它们是否是关键字参数等。与 `cc` 和 `cd` 结合使用。
‘cref` Class 引用。一个指向类引用的结构,其中存储了 `klass_or_self`、可见性范围和优化。它还存储了一个指向层次结构中下一个类的指针,由 `rb_cref_struct * next` 引用。 Class 引用是词法作用域的。
CRuby 用 C 编写的 Ruby 实现
‘cvar` Class 变量。指一个 Ruby 类变量,如 `@@foo`
‘dvar` 动态变量。解析器用来指代在当前词法作用域之外定义的局部变量。例如 `def foo; bar = 1; -> { p bar }; end`,块中的“bar”是一个 `dvar`
‘ec` 执行上下文。顶级 VM 上下文,指向当前 `cfp`
‘ep` 环境指针。局部变量(包括方法参数)存储在 `ep` 数组中。`cfp` 指向 `ep`
GC 垃圾回收器
‘gvar` 全局变量。指一个 Ruby 全局变量,如 `$$` 等
‘ICLASS` 内部 Class。当包含一个模块时,目标类会获得一个新的超类,它是 `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 即时 Time 编译器
“lep” 局部环境指针。标记为 `VM_ENV_FLAG_LOCAL` 的 “ep”。通常这是方法的 `ep`(而不是块的 `ep`,后者的 `ep` 不是“局部”的)
“local” 局部变量。指局部变量。
“me” Method 条目。指 “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 Yet Another Ruby VM。CRuby 使用的虚拟机
ZOMBIE 僵尸对象。具有尚未执行的终结器的对象。该对象已收集,因此“已死亡”,但终结器尚未运行,因此仍处于某种活动状态。