Нетипізовані програми часто схильні до помилок, винятків часу виконання і можуть ускладнити процес налагодження. Саме тому багато мов програмування у виробничому середовищі реалізують статичний типизатор – додатковий модуль, мета якого – підвищити безпеку програм та спростити розробку.
Перевірка типів чи виведення типів? Що таке теорія типів та типові судження? Слабо чи сильно типізована моя мова? І як насправді мені реалізувати типизатор?
Виникає безліч питань, коли йдеться про реалізацію цього модуля. Якщо ви ставили ці питання при реалізації вашої власної мови програмування або просто хочете зрозуміти, як працюють типизатори всередині, на практиці, з практичною реалізацією, цей курс для вас.
Часто пов’язані книги з теорії типів і типових міркувань займаються теоретичними аспектами, розглядаючи типи як математичні множини, не пояснюючи, як насправді будувати практичний типизатор. Я вважаю, що ми повинні мати можливість створювати та розуміти типизатор для повноцінної мови програмування, від початку до кінця, за 2-4 години – з матеріалом, що йде прямо до справи, показаним у живих сесіях програмування у парі та описаним зрозумілим способом.
У курсі “Побудова типизатора з нуля” ми фокусуємося, зокрема, на статичному типизаторі та створюємо типизатор, аналогічний TypeScript, Java тощо. буд. Ми торкаємося теорії типів і з першої лекції переходимо до практичної реалізації.
Реалізація типизатора також підвищить ваш рівень в інженерії, оскільки вона торкається кількох аспектів структур даних та алгоритмів.
Попередні умови
Необов’язковою умовою для цього класу є курс “Побудова інтерпретатора з нуля (також відомий як “Основи інтерпретації”), в рамках якого ми створюємо інтерпретатор AST для повноцінної мови програмування. Якщо у вас є розуміння того, як працюють мови програмування на цьому рівні, тобто що таке eval, замикання, ланцюжок областей видимості, оточення та інші конструкції – рекомендується взяти курс по інтерпретаторам як попередню умову.
Для кого цей курс?
Цей курс підходить для будь-якого допитливого інженера, який хотів би набути навичок створення складних систем (а створення типизатора для мови програмування – це складне інженерне завдання!) і отримати знання для створення таких систем.
Якщо вас цікавлять компілятори, мови програмування та теорія типів, і ви хочете створити модуль типизатора для своєї мови програмування, цей курс також для вас.
Що використовується для реалізації?
Іноді люди думають, що для створення типизатора обов’язково потрібно використовувати якусь мову програмування, яка сама “дуже пов’язана з типами та теорією типів” (наприклад, OCaml або інші функціональні мови програмування). Насправді, це не так! Ви можете створити повністю працюючий типизатор на чистому JavaScript і розглянути всі аспекти типових систем. Саме це ми використовуємо для реалізації.
JavaScript, будучи найпопулярнішою мовою програмування, має бути доступним для багатьох інженерів, і нашою метою є надання простої та короткої реалізації, не фокусуючись на специфіках мови-хоста. Тому код можна перенести будь-якою мовою на ваш смак і вибір: TypeScript, Rust, OCaml, C++, Python і т.д. буд.
Примітка: ми хочемо, щоб наші студенти справді стежили, розуміли та самі реалізовували кожну деталь типизатора, а не просто копіювали та вставляли з кінцевого рішення. Незважаючи на те, що повний вихідний код типизатора представлений у відеолекціях, репозиторій коду для проекту містить завдання <em>/* Реалізувати тут */</em>, які студенти повинні вирішувати.”