Build a Compiler in Five Projects
Курс предлагает построить компилятор за пять проектов в Racket (с видеоуроками для новичков), компилируя в x86-64 ассемблер. Требует базовых знаний C и ассемблера. Основан на книге "Essentials of Compilation" (есть бесплатная версия), с слайдами и видео на сайте. Проекты наращивают сложность: p1 — стековый интерпретатор (пропустить, если знаете Racket); p2 — прямолинейная арифметика и переменные; p3 — булевы значения, ветвления (if, and/or); p4 — векторы на куче, мутация (set!), циклы while; p5 — функции, лямбды, замыкания.
Итоговый язык поддерживает let, арифметику (+/-), ввод/вывод, сравнения, if, векторы (malloc без GC), мутацию, циклы, функции с замыканиями — комбинация императивного и функционального стиля. Упрощения: без типобезопасности/регистрового аллокатора/GC, ограниченные встроенные функции. Пример — решатель судоку с cons-списками как векторами из двух элементов. Для "реального" компилятора добавить безопасность, больше builtins и регистры.