Skip to content

Latest commit

 

History

History
79 lines (60 loc) · 4.08 KB

README.md

File metadata and controls

79 lines (60 loc) · 4.08 KB

Compilers course: building compilers is fun and easy

Introduction Slides

This is the repo containing tasks for the compilers course at MIPT.

Compilers are perceived to be magical artifacts, carefully crafted by the wizards, and unfathomable by the mere mortals. Books on compilers are better described as wizard-talk: written by and for a clique of all-knowing practitioners. Real-life compilers are too complex to serve as an educational tool. And the gap between real-life compilers and the educational toy compilers is too wide. The novice compiler writer stands puzzled facing an impenetrable barrier, “better write an interpreter instead.”

В течение курса студенты будут иметь возможность своими руками потрогать, продумать и реализовать все аспекты современного компилятора. Начиная с грамматики и парсинга, продолжая системой типов, семантикой языка, модулями, преобразованием в промежуточное представление и поддержкой рантайма языка.

Compilers

Курс создавался с опорой на реализациию компилятора языка Etude, а также многих других:

Стоит отметить компиляторы Hare, Cproc, Chibicc, которые имеют очень доступную кодовую базу (пометка approachable).

Rust и GHC имеют очень хорошие и понятные wiki и статьи:

Books

Основной книгой в начале курса является Crafting Interpreters by Robert Nystrom.

Я также рекомендую слудующие книги:

  • Compilers: Principles, Techniques, and Tools — dragonbook
  • A Retargetable C Compiler Design and Implementation — lcc book
  • The Implementation of Functional Programming Languages — miranda book
  • Basics of Compiler Design (Torben Ægidius Mogensen)
  • Introduction to Compilers and Language Design (Prof. Douglas Thain) University of Notre Dame
  • Modern Compiler Implementation in ML

Approaches

В своей идее курс содержит два подхода

Во-первых: дать человеку возможность продумать всё самому и погрузиться в грубокие дебри. Это может быть супер весело, но также очень трудозатратно.

Во-вторых: дописывать смысловые части уже готовой реализации. Если сделать всё правильно, то это тоже может быть достаточно интересно и информативно, и гораздо быстрее.

Tasks: