2026 年 10 月 7 日 —— rat 是一个小型编译器后端,拥有一个半工作的 C99 前端,使用 x86-64 代码生成器将虚拟寄存器(vregs)映射到物理寄存器或栈槽。原有的线性扫描分配器增长到 1392 行,促使团队用仅 584 行代码重写了优先级装箱分配器。该新分配器按重要性访问活跃范围,并将每个值放入第一个合适的寄存器中,类似于 LLVM 的贪心分配器,但更为简化。一个值从其写入到最后一次读取之间保持活跃;两个值仅在永不同时活跃时才共享寄存器。当活跃值过多时,部分值会被溢出到内存。调用约定要求保留被调用者保存的寄存器(rbx rbp r12-r15),而调用者保存的寄存器可能被覆盖。如所示,函数 h 在调用过程中保持 y 活跃,而无需显式处理被调用者保存寄存器的分配逻辑。分配器运行五个步骤:活跃范围、固定寄存器、合并、选择寄存器和溢出。每个 bundle 在其整个生命周期内保持其寄存器或栈槽,绝不驱逐或拆分范围。
来源: Hacker News · 由HeadlinesBriefing整理摘要