7 октября 2026 года — rat — небольшой бэкенд компилятора с полупод_working C99-фронтендом, использует x86-64 генератор кода, который отображает виртуальные регистры (vregs) в физические регистры или слоты стека. Старый линейно-скан аллокатор вырос до 1392 строк, что привело к переписыванию аллокатора bin packing с приоритетом всего в 584 строки. Этот новый аллокатор посещает интервалы жизни по важности и помещает каждый в первый подходящий регистр, подобно жадному аллокатору LLVM, но проще. Значение живет от его записи до последнего чтения; два значения делят регистр только когда они никогда не живут одновременно. Когда слишком много значений живут, некоторые спиллятся в память. Конвенция вызовов требует сохранения callee-saved регистров (rbx rbp r12-r15), в то время как caller-saved регистры могут быть затертыми. Как показано, функция h держит y живым через вызов без явной логики аллокатора для callee-saved размещения. Аллокатор выполняет пять шагов: интервалы жизни, фиксированные регистры, коалесцинг, выбор регистров и спиллинг. Каждый bundle сохраняет свой регистр или слот стека на протяжении всей своей жизни, никогда не вытесняя или деля интервалы.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing