Описание курса. Вкратце: вам предлагается бросить себе вызов, реализовав интерпретатор незнакомого вам языка программирования (Lox) на языке, с которым вы, возможно, тоже не работали (Rust), опираясь на книгу, написанную на языке, который многие когда-то знали (Java).
Общее представление
Иногда в университете встречались такие курсы, где преподаватель в первый же день выдавал скромное задание уровня «спроектируйте архитектуру набора команд процессора», «реализуйте с нуля Unix-shell» или «решите уравнение Дирака». Кто-то при этом стремился сбежать, а кто-то улыбался с выражением «ну же, попробуйте». Этот курс — из той же категории.
Начав с нуля, вы погружаетесь в книгу Роберта Найстрома «Crafting Interpreters» и получаете задание реализовать лексер и рекурсивный спускающийся парсер — и это ваша первая проба Rust. Дальше сложность только растет.
Целевая аудитория
Курс рассчитан на опытных разработчиков, которые хотят прокачать навыки, выполняя содержательный и насыщенный проект на современном языке программирования. Возможно, вы узнаете себя в одном из описаний:
- Вы уже писали немного на Rust и хотите выйти за рамки простых примеров, взявшись за проект с множеством компонентов.
- Вы никогда не работали с Rust, но вам любопытно. У вас есть опыт создания интерпретаторов или компиляторов, и вы уверены, что сможете погрузиться в глубокую воду.
- Вы не писали ни на Rust, ни интерпретаторы вообще, но у вас есть целая неделя, полное отсутствие сторонних дел и желание принять серьезный вызов.
Курс действительно сложный, как марафон: во время работы вы не раз подумаете «во что я ввязался?», но финиш принесет настоящее удовлетворение.
Формат обучения
Это недельный проектный интенсив. Каждое утро начинается с обсуждения тем, связанных с проектированием языков программирования и их реализации на Rust. Основная часть времени посвящена самостоятельной работе над кодом. В течение дня будут проводиться короткие сессии для разборов возникающих проблем и обмена опытом.
Предварительные требования
Требуется уверенное владение базовыми концепциями языков программирования: выражения, операторы, переменные, управление потоком, функции и классы. Опыт реализации интерпретатора на любом языке полезен, но не обязателен. Знание Rust не предполагается, но нужно быть готовым к очень быстрому погружению. Rust — непростой язык, поэтому вначале будет много проб и ошибок.
Учебный план
Основная цель — пройти первые десять глав книги «Crafting Interpreters», создавая обходящий абстрактное синтаксическое дерево интерпретатор языка Lox. В процессе изучаются ключевые аспекты реализации языков программирования:
- Сканирование и лексический анализ.
- Парсинг методом рекурсивного спуска.
- Представление программ и построение AST.
- Исполнение программ.
- Переменные, области видимости и окружения.
- Управляющие конструкции (if, while, for).
- Функции, включая функции высшего порядка и замыкания.
Одновременно вы познакомитесь с важными аспектами разработки на Rust:
- Организация проекта из нескольких модулей.
- Работа со строками.
- Обработка ошибок и использование Option/Result.
- Тестирование.
- Алгебраические типы данных (struct, enum).
- Рекурсивные структуры (деревья, списки).
- Сопоставление с образцом.
- Правила владения и заимствования.
- Внутренняя изменяемость.
В книге представлены все необходимые фрагменты кода, но они написаны на Java и часто используют идиомы, не имеющие прямых аналогов в Rust. Значительная часть вызова заключается в том, чтобы понять концепцию и реализовать её корректно. Это, впрочем, делает обсуждения на курсе особенно продуктивными.