Skip to content

Latest commit

 

History

History
62 lines (35 loc) · 9.46 KB

courses.md

File metadata and controls

62 lines (35 loc) · 9.46 KB

Учебные курсы по конструированию компиляторов

Language Translation And Implementation

Курс, разработанный Ray Toal (Loyola Marymount University).

Конспект лекций: https://cs.lmu.edu/~ray/classes/cc/

Автор курса -- исследователь в области ЯП и компиляторов. Кроме того, он написал небезынтересную книгу Programming Language Explorations. Рассматриваемый курс предназначен для самых начинающих студентов. И как же просто и детально там преподносится материал! И весьма свежий, надо сказать, материал. Кажется, не существует более практико-ориентированного курса, чем этот. Вместе с тем, автор не забывает и о формальной стороне вопроса -- достаточно много усилий потрачено, в том числе, на строгую статическую и динамическую семантику. Удачным считаю выбор современного инструмента Ohm (на основе формализма PEG) для работы с синтаксисом. В качестве основного языка реализации используется JavaScript. Однако в разделе, посвященном генерации кода, автор переходит на SML, демонстрируя положительные стороны использования сопоставления с образцом для соответствующих задач.

Post-Modern Compiler Design

Курс, разработанный Tiark Rompf (Purdue University).

Конспект лекций: https://www.cs.purdue.edu/homes/rompf/pmca/vol1/

Tiark Rompf -- известный специалист в области разработки высокопроизводительных DSL, разработчик системы LMS. Конспект лекций представляет собой краткое введение в построение простого компилятора для начинающих, речь идет о пошаговой реализации подмножества Scala. Язык Scala используется и для написания компилятора, что является очень уместным выбором -- приведенный код частей MiniScala весьма выразительный и читаемый. Автор для разбора синтаксиса использует рекурсивный спуск и разбор по приоритетам для выражений (precedence climbing). AST представлено в виде термов, вместо неуклюжих "посетителей" используется сопоставление с образцом... -- словом, это действительно современный подход к построению компилятора с нуля. Жаль только, что текст лекций обрывочный, не имеет завершенного вида.

Compiler Construction for Undergraduates и Advanced Compiler Construction

Курсы, разработанные Keith Cooper (Rice University).

Слайды: https://www.clear.rice.edu/comp412/Lectures/ (ссылка протухла)

Слайды: https://www.clear.rice.edu/comp512/Lectures/

K. Cooper является одним из крупнейших специалистов в области теории компиляции. Он также и соавтор одного из лучших учебников по вопросам компиляции Engineering a Compiler. В этом смысле и от рассматриваемых учебных курсов стоит ожидать многого.

Проблема чрезмерной специализации, узкого профессионального кругозора, типична как среди практиков -- разработчиков компиляторов, так и среди соответствующих преподавателей. В этом отношении курсы Кейта Купера, на мой взгляд, отличаются в самую лучшую сторону по систематичности и глубине излагаемого материала. Для обоих курсов доступны только слайды, но они весьма подробные и наглядные.

Материал курса COMP 412 является расширенной версией учебника Engineering a Compiler. Курс по специальным вопросам компиляции COMP 512 полностью посвящен вопросам оптимизации. Здесь даже для профессионального компиляторщика найдется целый кладезь ценных знаний. Автор много рассказывает об истории компиляции, о развитии соответствующих методов, приводит ссылки на массу исторически важных материалов.

COMP 412/512 -- одни из немногих существующих университетских курсов, на основе которых у студентов формируется общая, современная, цельная картина положения дел в области компиляторов, требуемая для настоящего профессионала-компиляторщика.

Compiler Construction

Курс, разработанный Eelco Visser (Delft University of Technology).

Слайды: https://tudelft-cs4200-2019.github.io/lectures/

E. Visser известен работами в области создания инструментов для разработки ЯП общего назначения и DSL (Stratego, Spoofax). Рассматриваемый курс предназначен для начинающих, автор практически не касается вопросов оптимизации. В целом, материал достаточно традиционный. Новизна здесь в том, каким образом автор предлагает писать компиляторы, с помощью каких подходов и инструментов. B этом отношении можно считать, что это курс по компиляторам из будущего. Еще нескоро популярные компиляторы будут иметь настолько простую, ясную и декларативную структуру.

Compiler Construction

Курс, разработанный Sebastian Hack и др. (Universität des Saarlandes).

Слайды: http://compilers.cs.uni-saarland.de/teaching/cc/2017/

S. Hack хорошо известен компиляторщикам-профессионалам по своим работам в области формы SSA. Хотя курс начинается и достаточно традиционно (LL/LR-грамматики и подобное), но основной упор в нем делается на современные методы статического анализа, использования SSA и порождения кода. Имеются уникальные и важные материалы, изложенные на основе собственных разработок S. Hack и его коллег.

Compiler Design

Курс, разработанный Frank Pfenning (Carnegie Mellon University).

Конспект лекций: https://www.cs.cmu.edu/~fp/courses/15411-f14/schedule.html

F. Pfening специализируется в области математической логики и теории ЯП. Конспекты лекций написаны очень простым и ясным языком, хотя и касаются достаточно сложных вопросов (формальная семантика, потоковый анализ и др.). Раздел по SSA заслуживает особого внимания -- насколько же красиво автор разъясняет детали (причем, phi-функции появляются только в завершении лекции)!

Advanced Compilers β

Курс, разработанный Adrian Sampson (Cornell University).

Блог курса: https://www.cs.cornell.edu/courses/cs6120/2019fa/blog/

Современный курс для тех, кого интересуют специальные вопросы компиляции. Скорее даже -- курс для опытных разработчиков, которых интересуют вопросы компиляции для новых вычислительных архитектур. Материалы организованы в виде блога, который можно читать в духе: "что нового в мире оптимизирующих компиляторов".