Компиляторы, интерпретаторы и формальные языки
Этот курс представляет собой дружелюбное для новичков введение в компиляторы. Мы будем постепенно разрабатывать интерпретатор для простого скриптового языка.
В современных реализациях компиляторов стало популярным преобразовывать один высокоуровневый язык в другой. Примеры включают транспиляцию новых версий JavaScript в более старые или преобразование TypeScript в JavaScript. Такие компиляторы называются транспайлерами, и именно им посвящён этот курс.
Почему транспайлеры важны?
Транспайлеры позволяют использовать существующие среды выполнения (например, JavaScript-движки), избегая работы с низкоуровневыми деталями, такими как управление памятью или байт-код. Это практический и эффективный подход к изучению компиляторов, особенно если вы хотите создать собственный язык программирования.
В отличие от традиционных книг по компиляторам, сосредоточенных на теоретических аспектах (грамматики, парсинг и т. д.), этот курс предлагает практическое руководство по созданию полноценного транспайлера за 2-4 часа. Мы будем разрабатывать его в формате живого кодинга, шаг за шагом, с четкими объяснениями.
Что вы узнаете?
Мы сосредоточимся на транспиляции высокоуровневого конкурентного языка программирования с процессами обмена сообщениями в JavaScript. Помимо транспайлинга, вы разберётесь, как работают конкурентные функциональные языки (например, Erlang) и даже операционные системы с процессами и потоками.
Разработка транспайлера улучшит ваши навыки программирования, поскольку включает структуры данных, алгоритмы и архитектурные решения.
Требования к курсу
Опционально рекомендуется пройти курс "Building an Interpreter from Scratch", где мы создаём AST-интерпретатор. Если у вас уже есть понимание таких концепций, как eval, замыкания, области видимости, окружения, вы можете сразу приступить к этому курсу.
Для кого этот курс?
Какие технологии используются?
Мы будем писать транспайлер на JavaScript и компилировать код в JavaScript. Такой выбор делает курс доступным широкому кругу разработчиков, а также позволяет адаптировать код на другие языки (TypeScript, Rust, OCaml, C++, Python и др.).
Важно! Этот курс ориентирован на активное обучение. Мы не просто предоставляем финальный код - вам предстоит самостоятельно реализовать ключевые части транспайлера в специально подготовленных заданиях.
Формат курса
Этот курс представляет собой дружелюбное для новичков введение в компиляторы. Мы будем постепенно разрабатывать интерпретатор для простого скриптового языка.
Семантика языков программирования. Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А как насчет разницы между функциональным и императивным программированием?