7 de outubro de 2026 — rat é um backend de compilador pequeno com um frontend C99 semifuncional, usa um gerador de código x86-64 que mapeia registradores virtuais (vregs) para registradores físicos ou slots de pilha. O antigo alocador de varredura linear cresceu para 1392 linhas, motivando uma reescrita do alocador de bin packing por prioridade em apenas 584 linhas. Este novo alocador visita intervalos de vida por importância e coloca cada um no primeiro registrador adequado, semelhante ao alocador greedy do LLVM, mas mais simples.
Um valor é vivo de sua escrita até sua última leitura; dois valores compartilham um registrador apenas quando nunca estão vivos simultaneamente. Quando muitos valores estão vivos, alguns são spillados para a memória. A convenção de chamada exige preservar registradores callee-saved (rbx rbp r12-r15) enquanto registradores caller-saved podem ser sobrescritos.
Como mostrado, a função manteém y vivo através de uma chamada sem lógica explícita do alocador para posicionamento callee-saved. O alocador executa cinco passos: intervalos de vida, registradores fixos, coalescing, escolha de registradores e spill. Cada bundle mantém seu registrador ou slot de pilha por toda a sua vida, nunca expelindo ou dividindo intervalos.
Fonte: Hacker News · Resumido por HeadlinesBriefing