Нетипизированные программы часто подвержены ошибкам, исключениям времени выполнения и могут затруднить процесс отладки. Именно поэтому многие языки программирования в производственной среде реализуют статический типизатор - дополнительный модуль, цель которого - повысить безопасность программ и упростить разработку.
Проверка типов или вывод типов? Что такое теория типов и типовые суждения? Слабо или сильно типизированный мой язык? И как мне на самом деле реализовать типизатор?
Возникает множество вопросов, когда речь идет о реализации этого модуля. Если вы задавали эти вопросы при реализации вашего собственного языка программирования или просто хотите понять, как работают типизаторы внутри, на практике, с практической реализацией, то этот курс для вас.
Часто связанные книги по теории типов и типовым суждениям занимаются теоретическими аспектами, рассматривая типы как математические множества, не объясняя, как на самом деле строить практический типизатор. Я считаю, что мы должны иметь возможность создавать и понимать типизатор для полноценного языка программирования, от начала до конца, за 2-4 часа - с материалом, идущим прямо к делу, показанным в живых сессиях программирования в паре и описанным понятным способом.
В курсе "Построение типизатора с нуля" мы фокусируемся, в частности, на статическом типизаторе и создаем типизатор, аналогичный TypeScript, Java и т. д. Мы касаемся теории типов и уже с первой лекции переходим к практической реализации.
Реализация типизатора также повысит ваш уровень в инженерии, так как она затрагивает несколько аспектов структур данных и алгоритмов.
Предварительные условия
Необязательным условием для этого класса является курс "Построение интерпретатора с нуля (также известный как "Основы интерпретации"), в рамках которого мы создаем интерпретатор AST для полноценного языка программирования. Если у вас уже есть понимание того, как работают языки программирования на этом уровне, то есть что такое eval, замыкание, цепочка областей видимости, окружения и другие конструкции - рекомендуется взять курс по интерпретаторам в качестве предварительного условия.
Для кого этот курс?
Этот курс подходит для любого любознательного инженера, который хотел бы приобрести навыки создания сложных систем (а создание типизатора для языка программирования - это сложная инженерная задача!) и получить переносимые знания для создания таких систем.
Если вас интересуют компиляторы, языки программирования и теория типов, и вы хотите создать модуль типизатора для своего языка программирования, то этот курс также для вас.
Что используется для реализации?
Иногда люди думают, что для создания типизатора обязательно нужно использовать какой-то язык программирования, который сам "очень связан с типами и теорией типов" (например, OCaml или другие функциональные языки программирования). На самом деле это не так! Вы можете создать полностью работающий типизатор на чистом JavaScript и рассмотреть все аспекты систем типов. Именно это мы используем для реализации.
JavaScript, будучи самым популярным языком программирования, должен быть доступен для многих инженеров, и нашей целью является предоставление простой и краткой реализации, не фокусируясь на спецификах языка-хоста. Поэтому код можно перенести на любой язык по вашему вкусу и выбору: TypeScript, Rust, OCaml, C++, Python и т. д.
Примечание: мы хотим, чтобы наши студенты действительно следили, понимали и сами реализовывали каждую деталь типизатора, а не просто копировали и вставляли из конечного решения. Несмотря на то, что полный исходный код типизатора представлен в видео-лекциях, репозиторий кода для проекта содержит задания <em>/* Реализовать здесь */</em>, которые студенты должны решать."