Этот курс раскрывает, как устроены современные виртуальные машины, интерпретаторы и низкоуровневая семантика языков программирования. Материал подается практично, без лишней теории: вы создадите свою стековую виртуальную машину и разберете, как действительно работает исполнение байт-кода.
О чем этот курс
Курс помогает пройти путь от базового понимания интерпретации до реализации собственной VM, максимально приближенной к промышленным решениям. Без долгих экскурсov в теорию грамматик — только практическая семантика и живое кодирование.
Почему важно изучать виртуальные машины
Виртуальные машины лежат в основе таких языков, как JavaScript, Python, Java и многих других. Понимание их принципов:
- повышает уровень владения любым языком программирования;
- дает представление о реальных механизмах исполнения кода;
- помогает создавать оптимизированные и масштабируемые системы;
- развивает инженерное мышление на уровне архитектуры.
Какие проблемы решает курс
Традиционные курсы по компиляторам начинают с лексеров, грамматик и БНФ — но не дают сфокусироваться на главном: как программа на самом деле выполняется. В итоге студенты месяцами пишут токенизаторы, так и не добравшись до сути.
В чем отличие этого подхода
- Сразу переход к семантике и архитектуре исполнения.
- Постепенная сборка виртуальной машины шаг за шагом.
- Реализация языка, похожего на JavaScript и Python.
- Фокус на runtime, стековых фреймах, инструкции и байт-код.
Структура и формат обучения
Живое кодирование
Каждый модуль включает сессии реального программирования, в которых демонстрируется полный цикл разработки виртуальной машины — от фреймов стека до интерпретатора байт-кода и диспетчеризации инструкций.
Практические задания
В репозитории проекта вы найдете места с пометкой /* Реализовать здесь */. Они помогут не просто повторить увиденное, а сформировать реальное инженерное понимание происходящего.
Анимированные объяснения
Материал подкреплен визуальными схемами исполнения кода и устройством объектов, что делает даже сложные концепции наглядными.
Предварительные условия
1. Понимание основ интерпретации
Этот курс является продолжением курса «Создание интерпретатора с нуля». Вам необходимо понимать:
- замыкания;
- цепочку областей видимости;
- работу eval;
- концепцию окружений и времени жизни объектов.
2. Базовые навыки C++
VM разрабатывается на C++ из-за производительности. Но используются только переносимые и простые конструкции. Полученный код легко адаптируется под Rust, C, JavaScript (через типизированные массивы) или любой другой язык.
Для кого этот курс
Курс подойдет:
- инженерам, которые хотят понять, как устроены сложные системы;
- разработчикам, интересующимся компиляторами, байт-кодом и интерпретацией;
- тем, кто хочет углубиться в архитектуру языков программирования;
- тем, кто стремится улучшить понимание современных VM и систем исполнения.
Что вы создадите и изучите
Ключевые результаты
- собственная стековая виртуальная машина;
- байт-кодный язык, похожий на JavaScript и Python;
- механизмы инструкций, диспетчеризации, фреймов стека;
- понимание, как работают современные JIT-компиляторы;
- глубокое понимание семантики времени выполнения.
Практическая ценность
После курса вы будете не просто писать на языках программирования — вы будете понимать, как они работают внутри, и сможете уверенно проектировать сложные архитектуры.
Automata Theory: inside a RegExp machine?
The is the only missing course.