Языки программирования и компиляторы
Санкт-Петербург, осень 2013
Описание
Курс предназначен для тех, кто интересуется внутренним устройством языков программирования.
Видео всех лекций курса можно найти на канале CS центра на YouTube.
Преподаватели
Список лекций
Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования. Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. Абстрактный и конкретный синтаксис. Статическая и динамическая семантика.
Смешанные вычисления. Проекции Футамуры-Ершова. Техника раскрутки (bootstrapping). Принципы организации компилятора. Просмотры, промежуточное представление.
Порождающие грамматики, иерархия Хомского. Магазинные автоматы, предпросмотр, LL(k)-языки и грамматики.
Рекурсивный спуск, монадические парсер-комбинаторы.
Лексический анализ; взаимодействие лексического и синтаксического анализаторов. Проблемы контекстно-зависимой лексики. Восходящий анализ типа перенос-свертка, класс LR(k). Инструменты восходящего анализа.
Нормальная форма Хомского.
Взаимодействие аппаратной платформы, операционной системы, библиотеки поддержки времени исполнения, прикладных библиотек и скомпилированной программы. Представление объектного и исполняемого файлов; перемещаемые модули, таблицы релокаций. Принципы работы редактора связей и загрузчика.
Некоторые аномалии, возникающие при использовании универсальных поверхностных типов. Экзистенциальное представление потоков. Объектно-ориентрованные аналогии. Структурный и номинальный сабтайпинг. Объектная система языка Objective Caml.