7. Oktober 2026 — rat ist ein kleiner Compiler-Backend mit einem halbfunktionierenden C99-Frontend, verwendet einen x86-64-Codegenerator, der virtuelle Register (vregs) auf physische Register oder Stack-Slots abbildet. Der alte Linear-Scan-Allokator wuchs auf 1392 Zeilen, was eine Neuschreibung des Prioritäts-Bin-Packing-Allokators in nur 584 Zeilen nach sich zog.
Dieser neue Allokator besucht Lebensbereiche nach Wichtigkeit und platziert jeden im ersten passenden Register, ähnlich wie LLVMs greedy-Allokator, aber einfacher. Ein Wert ist von seiner Schreiboperation bis zur letzten Leseoperation lebendig; zwei Werte teilen ein Register nur, wenn sie niemals gleichzeitig lebendig sind. Wenn zu viele Werte lebendig sind, werden einige auf den Speicher ausgelagert.
Die Aufrufkonvention erfordert die Erhaltung von callee-saved-Registern (rbx rbp r12-r15), während caller-saved-Register überschrieben werden können. Wie gezeigt, bleibt die Funktion h y über einen Aufruf hinweg lebendig, ohne explizite Allokator-Logik für callee-saved-Platzierung. Der Allokator führt fünf Schritte aus: Lebensbereiche, feste Register, Coalescing, Registerauswahl und Spill.
Jedes Bundle behält sein Register oder Stack-Slot für seine gesamte Lebensdauer, niemals auswechselnd oder aufteilend.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing