Семантика языков программирования. Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А как насчет разницы между функциональным и императивным программированием?
Когда дело доходит до реализации языка программирования, возникает так много вопросов!
Проблема с «классами компиляторов» в школе состоит в том, что они обычно представлены как «жесткое ракетостроение», предназначенное только для продвинутых инженеров.
Более того, классические книги по компиляторам начинаются с наименее значимой темы, такой как лексический анализ, и уходят глубоко вглубь теоретических аспектов формальных грамматик. А к моменту внедрения первого модуля Tokenizer учащиеся просто теряют интерес к этой теме, не имея возможности фактически приступить к реализации самого языка программирования. И все это распространяется на целый семестр работы с токенизаторами и грамматиками BNF, без понимания реальной семантики языков программирования.
Я считаю, что мы должны быть в состоянии построить и понять полную семантику языка программирования, сквозную, за 4-6 часов - с содержанием, идущим прямо к сути, показанным в сеансе программирования в реальном времени как парное программирование и описанным в приемлемый способ.
В курсе Essentials of Interpretations мы концентрируемся конкретно на семантике времени выполнения и создаем интерпретатор для языка программирования, очень похожего на JavaScript или Python.
Реализация языка программирования также сделает ваш уровень практического использования других языков программирования более профессиональным.
Для кого этот курс?
Этот урок предназначен для любого любопытного инженера, который хотел бы получить навыки построения сложных систем (а создание языка программирования - действительно довольно сложная инженерная задача!) И получить передаваемые знания для построения таких систем.
Если вас особенно интересуют компиляторы, интерпретаторы и инструменты преобразования исходного кода, то этот курс также для вас.
Единственным предварительным условием для этого класса являются базовые структуры данных и алгоритмы: деревья, списки, обход.
Что используется для реализации?
Поскольку мы создаем язык, очень похожий по семантике на JavaScript или Python (два самых популярных на сегодняшний день языка программирования), мы специально используем JavaScript - его элегантную многопарадигматическую структуру, сочетающую функциональное программирование, основанное на классах и основанное на прототипах ООП.
Многие инженеры знакомы с JavaScript, поэтому начинать писать должно быть проще. Однако при реализации мы не полагаемся на слишком специфичные для конструкций JS, и код курса легко переносится на TypeScript, Python, Java, C ++, Rust и любой другой язык на ваш вкус.
Что конкретно в этом курсе?
Основными особенностями этих лекций являются:
- Лаконично и прямо к делу. Каждая лекция самодостаточна, лаконична и описывает информацию, непосредственно связанную с темой, не отвлекаясь на несвязанные материалы или разговоры.
- Анимированная презентация в сочетании с редактированием в реальном времени. Это облегчает понимание тем и показывает, как (и когда это происходит) структуры объектов связаны между собой. Статические слайды просто не работают для сложного контента.
- Полный исходный код, начиная с нуля и до самого конца, представлен в курсе.
Что в курсе?
Курс разделен на четыре части, всего 18 лекций и множество подтем в каждой лекции. Пожалуйста, обратитесь к учебной программе для подробного описания лекций.