Учебный курс «Проектирование компиляторов» - 2024

Закончил большую часть курса этого года. Большую - потому что остались должники, которые планируют всё-таки досдать материал. Двое даже с прошлого года (уходили в академ). По сравнению с прошлым годом внёс некоторые усовершенствования, и готов дорабатывать курс дальше. Итак, что же получилось в этом году, и куда двигаться.

Фактические заметки

Организационные заметки

Заметки по теории

Заметки по практике:

Выводы по семестру

Организационные

  1. Нужна дальнейшая корректировка системы бонусов - 5 попыток, дальше минус балл (изначально так и хотел, но на лекции и в слайдах случайно указал 10). Более того, следует ввести отрицательные баллы - когда оценка за работу уходит в минус, следует снимать баллы на зачёте. Ситуации, когда оценка уходит в минус характерна для студентов, которые пытаются сдавать всё в последний момент и получают минусы за несоблюдение сроков.
  2. В целом на факультете крайне не хватает курсов системщины. Основная проблема - как всегда кадры, точнее их отсутствие. К сожалению, я не могу бросить всё и заниматься только преподаванием. Пока что выхода из этой ситуации нет.

Теоретическая часть

  1. Общего проекта, который хотел давать студентам пока нет, и пока что не будет, но очертания курса незначительно меняются (допиливаются напильником). Сейчас основная проблема - отсутствие источников материала. Я уже много лет хочу написать свой учебник, но каждый раз не получается собраться и сделать его хорошо.
  2. Частично сделал, но надо продолжать улучшать: в лекциях нужно прямо приводить примеры кода, реализующие те или иные структуры. Например, приводить реальный код реализации узла ast.
  3. Сохраняется с прошлого года: в качестве примеров в лекциях нужно своё собственное промежуточное представление, и свой собственный виртуальный ассемблер. Это ещё раз к вопросу о большом проекте.
  4. Сохраняется с прошлого года: заметил, что много ссылок на учебные курсы из вражеских стран уже не актуальны - все попрятали материалы. Нужно пройтись и актуализировать список.
  5. Курсовой проект с небольшим докладом был удачной идеей, но требует корректировки. Ошибкой было давать возможность выбирать общие темы. Курсовой проект следует ограничить разбором одной академической публикации.

Практическая часть

  1. Можно добавить пятую работу по кодогенерации.
  2. Усовершенствовать тестирование: добавить разных sanitaizer'ов, valgring, поглядеть в сторону fuzzing-тестирования.
  3. Всё ещё не придумал разных задач для повышения вариативности, но есть некоторые идеи. Во-первых нужно отказаться от калькулятора двоичных выражений (он значительно проще двух других вариантов). Во-вторых можно попробовать варьировать инфиксную и постфиксную грамматику. В-третьих, при добавлении работы на кодогенератор, можно варьировать целевой язык. Так получится достаточное количество комбинаций и защита от списывания.

Материалы курса

Материалы с прошлого года почти не изменились, приводить здесь не буду.