Андерс Хейлсберг – Построение компилятора Современным способом


То, чему вас учат как теории построения компиляторов в информатике, просто устарело. Посмотрите, что скажет Андерс Хейлсберг о теории и практике. 

Если вы прошли курс по построению компиляторов или просто заинтересовались тем, как это делается, вы, вероятно, прочитали одну или две классические книги. Андерс Хейлсберг тоже прошел классическое обучение, но он продолжал писать компиляторы и теперь считает, что то, чему вас учат в школе, в лучшем случае не соответствует современной практике.  Он утверждает, что:

“существует огромный разрыв между тем, как компиляторы преподаются в школе, и тем, как компиляторы внедряются в настоящее время.”

То, как сегодня преподают компиляторам, не сильно изменилось за 30 лет, в основном из – за доминирования конкретной книги-Компиляторов: принципы, методы и инструменты Ахо, Лама, Сетхи и Уллмана. Для большинства студентов и преподавателей она просто известна как Книга Дракона. (Тот, что в видео, является первым изданием и обычно упоминается как Книга Красного дракона.)

Андерс объясняет, что монолитная конструкция компилятора должна была уступить место более гибкому подходу, который позволяет пользователю взаимодействовать с кодом, даже если он неверен. Вместо того, чтобы компилятор выполнял работу по преобразованию кода в абстрактные синтаксические деревья, а затем в двоичный код и умирал при первой ошибке, компилятор разбивается на компоненты, которые могут использоваться для предоставления информации в среде IDE об ошибках, завершении операторов и так далее.  Хитрость, по-видимому, заключается в том, чтобы сохранить все “живым” и построить только синтаксическое дерево для кода в файле, над которым работает пользователь.

В чем суть этого подхода – одним словом “функциональное программирование”. Для создания ленивых систем и повторного использования результатов вам, по-видимому, нужен функциональный подход. 

Большой пример-это, конечно, компилятор Rosyln для C#, но также упоминается компилятор TypeScript.  И если вы помните Turbo Pascal, другой компилятор Андерса, то вам понравится ссылка на весь компилятор (включая редактор), помещенный в 32K. 

Один звуковой укус на выбор:

“Компиляторы для инструментов, а не компиляторы для генерации кода”

Если вы посмотрите до конца, вы вполне можете подумать, что все это звучит гораздо более беспорядочно, чем традиционный подход. Стандартный подход к компиляторам гораздо более “академичен” и чист, чем стиль, описанный Андерсом. 

Так не пора ли выбросить книгу о драконах?

Только если Андерс или кто-то с таким же опытом напишет замену, которую можно будет преподавать в академической среде без того, чтобы учителям пришлось всю жизнь писать компиляторы реального мира. А пока почитай “дракона” и изучи Рослин.


Добавить комментарий