Курс на уровне доктора философии, первоначально предоставлявшийся студентам Корнельского университета компьютерных наук дистанционно, теперь стал доступен всем бесплатно в самостоятельной версии.
Полное название этого курса — Осень 2020: CS 6120, «Продвинутые компиляторы». Это новый экспериментальный курс PhD по реализации языков программирования с использованием широкого определения термина «компиляторы». Его ведет Адриан Симпсон, доцент кафедры информатики Корнельского университета, специализирующийся на языках программирования и компьютерной архитектуре. .
Курс охватывает:
Темы универсальных компиляторов, такие как промежуточные представления, поток данных и «классическая» оптимизация, а также более исследовательские темы, такие как распараллеливание, своевременная компиляция и сборка мусора. Использование LLVM и образовательного IR (промежуточное представление, называемое Брил) придумали именно для этого класса:
Bril — это язык, ориентированный на инструкции, как и большинство хороших IR. Ядро минимальное и безжалостно регулярное. Расширения делают его интересным. Инструменты не зависят от языка. Программы Bril — это просто JSON. Bril набирается.
Есть 13 уроков, состоящих из видео, заметок и заданий по написанию кода. В конце есть также финальное задание. Основное отличие от «настоящего» CS 6120 состоит в том, что вы можете игнорировать крайние сроки выполнения задач и не можете участвовать в обсуждениях в классе.
Вот эти уроки:
Урок 1: приветствие и обзор
Урок 2: Представление программ
Урок 3: Локальный анализ и оптимизация
Урок 4: Поток данных
Урок 5: Глобальный анализ и SSA
Урок 6: LLVM
Урок 7: Оптимизация цикла
Урок 8: Межпроцедурный анализ
Урок 9: Анализ псевдонимов
Урок 10: Управление памятью
Урок 11: Динамические компиляторы
Урок 12: Синтез программы
Урок 13: Параллелизм и параллелизм
У каждого урока есть связанная задача. Например, Урок 2 требует от учащегося познакомиться с Bril, написать новый тест производительности и программу для небольшого анализа или преобразования программ Bril. Поскольку вы будете выполнять задания для самостоятельного обучения, вам не нужно отправлять задания, хотя рекомендуется попробовать их, чтобы закрепить теорию. Проблема в том, что если у вас возникнут проблемы, реальной помощи нет, так как вы не можете никого попросить.
Ожидается, что в перерывах между уроками студенты прочитают исследовательские работы с внешними ссылками, такие как «Эффективная реализация SELF, объектно-ориентированного языка с динамической типизацией на основе прототипов», «Хлорофилл: компилятор на основе синтеза для маломощных пространственных архитектур». или «Своевременная специализация типов на основе трассировки для динамических языков».
Этот курс не о парсинге, а о более глубоких темах семантики программ и оптимизации компилятора. Он требует большого количества исследований и носит теоретический характер, так как он соответствует своему бренду как «докторский уровень». Если вы более практичны, то вам лучше выбрать более практичные альтернативы из следующих замечательных книг:
Как создавать прагматичные, легкие языки
Парсинг с помощью регулярных выражений и грамматик Perl 6
С другой стороны, если вы действительно хотите погрузиться в волшебство компилятора, то это шанс, которого вы так долго ждали …