Ruby 内部术语表

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

术语 定义
bmethod define_method() {} 定义的方法(作为方法运行的块)。
BIN 基本指令名称。用作引用 YARV 指令的宏。将 pop 转换为 YARVINSN_pop。
bop 基本运算符。与 Integer 的加减等方法相关,只要它们未被重新定义,就可以进行优化。
cc 调用缓存。调用站点的内联缓存结构。存储在 cd
cd 调用 Data。指向 cicc 的数据结构。iseq 对象指向 cd,并通过此结构访问调用信息和调用缓存
CFG 控制流图。程序的表示,其中所有控制流和数据依赖项都已通过展开堆栈和局部变量显式化。
cfp 控制帧指针。表示 Ruby 堆栈帧。调用方法会推送一个新帧 (cfp),返回会弹出帧。指向 pcspep 和相应的 iseq
ci 调用信息。指的是 rb_callinfo 结构。包含有关调用站点的调用信息,包括要传递的参数数量、它们是否为关键字参数等。与 cccd 结合使用。
cme 可调用方法条目。指的是 rb_callable_method_entry_t 结构,这是 Ruby 方法的内部表示,具有已设置的 defined_classowner,并已准备好进行分派。
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 数组中。epcfp 指向
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 枚举。
IVC 实例变量缓存。专门用于实例变量访问的缓存
JIT 即时编译器
lep 局部环境指针。一个标记为 VM_ENV_FLAG_LOCALep。通常这是方法的 ep(而不是块,块的 ep 不是“局部的”)
local 局部。指的是局部变量。
me 方法条目。指的是 rb_method_entry_t 结构,Ruby 方法的内部表示。
MRI Matz 的 Ruby 实现
pc 程序计数器。通常是 VM *接下来* 要执行的指令。由 cfp 指向,并由 VM 递增
snt 共享原生 Thread。许多 Ruby 线程可以在其上运行的操作系统线程。来自不同 Ractor 的 Ruby 线程甚至可以运行在同一个 SNT 上。Ruby 线程在上下文切换时可以切换 SNT。SNT 用于 M:N 线程模型。默认情况下,非主 Ractor 使用此模型。
dnt 专用原生 Thread。只有一个 Ruby 线程可以在其上运行的操作系统线程。Ruby 线程始终在该同一操作系统线程上运行。DNT 用于 1:1 线程模型。默认情况下,主 Ractor 使用此模型。
sp 堆栈指针。堆栈的顶部。VM 在 iseq 中执行指令,指令会将值推入和弹出堆栈。VM 更新 cfp 上的 sp 以指向堆栈顶部
ST 表 ST 表是哈希的主要 C 实现(较小的 Ruby 哈希可能由 AR 表支持)。
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 僵尸对象。一个具有尚未执行的最终化器的对象。该对象已被收集,因此是“死的”,但最终化器尚未运行,因此仍然有些活着。