Книга "Написание компилятора на Go" — это практическое руководство для разработчиков, которые хотят углубиться в устройство языков программирования и построить собственный компилятор и виртуальную машину. Пошаговый подход, акцент на работающем коде и ясное объяснение архитектуры делают изучение понятным и увлекательным.
О чём эта книга
Данное издание продолжает "Написание интерпретатора на Go" и использует его кодовую базу как фундамент. Вместо интерпретации кода Monkey через AST вы перейдёте на новый уровень — к компиляции в байт-код и выполнению на собственной стековой виртуальной машине.
Основная идея
Вы шаг за шагом создадите новый механизм выполнения Monkey, который:
- быстрее интерпретатора примерно в 3 раза,
- архитектурно ближе к реальным языкам и их рантаймам,
- даёт глубокое понимание работы компиляторов и VM.
Продолжение первой книги
Хотя можно работать с кодом первой части как с «чёрным ящиком», максимальную пользу принесёт знакомство с тем, как он устроен внутри. В этой книге вы расширите:
- лексер,
- парсер,
- AST,
- систему объектов,
- REPL.
Все новые компоненты создаются параллельно — у вас всегда будет работоспособная система, которую можно улучшать и дополнять.
Что вы создадите
В ходе работы вы спроектируете и реализуете полный цикл выполнения программ Monkey: от определения инструкций до виртуальной машины.
Система байт-кода
- Описание и кодировка инструкций,
- определение операндов,
- создание мини-дизассемблера.
Компилятор Monkey
- Преобразование AST в набор инструкций,
- генерация корректного байт-кода,
- ведение таблицы символов и пула констант.
Стековая виртуальная машина
- Реализация основного цикла исполнения,
- управление стеком и указателями стека,
- выполнение арифметических и логических операций,
- введение фреймов для функций.
Продвинутые возможности
Помимо базовой архитектуры вы реализуете функциональность, которая делает язык полноценным и мощным.
Поддержка функций
- работа с локальными привязками,
- обработка аргументов,
- вызовы функций через фреймы.
Встроенные функции и расширение языка
- добавление встроенных функций,
- оптимизация выполнения примитивных операций.
Реализация замыканий
Вы разработаете корректную и эффективную систему замыканий, разберётесь, почему их компиляция является сложной задачей, и научитесь управлять их областями видимости в VM.
Чему вы научитесь
Книга сочетает теорию и практику, помогая глубже понять:
- как устроен машинный код и операционные коды,
- что такое стек, стековые указатели и базовые указатели,
- как определяются соглашения о вызовах,
- как проектируются компактные и эффективные виртуальные машины.
Итог
После прохождения книги у вас будет собственный компилятор и виртуальная машина, полностью построенные на Go. Вы увидите весь процесс создания рабочей архитектуры — от первых инструкций до полноценного выполнения программ на Monkey — и получите понимание того, как устроены языки программирования, которыми вы пользуетесь каждый день.