Ruby 内部术语表
只是我在这里遇到的 Ruby 源代码中的首字母缩略词及其含义的列表。
| 术语 | 定义 |
|---|---|
bmethod |
由 define_method() {} 定义的方法(作为方法运行的块)。 |
BIN |
基本指令名称。用作引用 YARV 指令的宏。将 pop 转换为 YARVINSN_pop。 |
bop |
基本运算符。与 Integer 的加减等方法相关,只要它们未被重新定义,就可以进行优化。 |
cc |
调用缓存。调用站点的内联缓存结构。存储在 cd 中 |
cd |
调用 Data。指向 ci 和 cc 的数据结构。iseq 对象指向 cd,并通过此结构访问调用信息和调用缓存 |
| CFG | 控制流图。程序的表示,其中所有控制流和数据依赖项都已通过展开堆栈和局部变量显式化。 |
cfp |
控制帧指针。表示 Ruby 堆栈帧。调用方法会推送一个新帧 (cfp),返回会弹出帧。指向 pc、sp、ep 和相应的 iseq |
ci |
调用信息。指的是 rb_callinfo 结构。包含有关调用站点的调用信息,包括要传递的参数数量、它们是否为关键字参数等。与 cc 和 cd 结合使用。 |
cme |
可调用方法条目。指的是 rb_callable_method_entry_t 结构,这是 Ruby 方法的内部表示,具有已设置的 defined_class 和 owner,并已准备好进行分派。 |
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 枚举。 |
IVC |
实例变量缓存。专门用于实例变量访问的缓存 |
| JIT | 即时编译器 |
lep |
局部环境指针。一个标记为 VM_ENV_FLAG_LOCAL 的 ep。通常这是方法的 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 | 僵尸对象。一个具有尚未执行的最终化器的对象。该对象已被收集,因此是“死的”,但最终化器尚未运行,因此仍然有些活着。 |