В чем преимущество изучения и понимания конструкции компилятора?

10

Я учусь на третьем курсе по программной инженерии. С этого года мой университет ввел новый курс под названием «Конструкции компилятора», который обучает вас основам теории построения компилятора.

Какое будет реальное преимущество для программиста в изучении конструкции компилятора?

Nipuna
источник
2
Хотя я абсолютно не сожалею о прохождении курса по компиляторам, это был самый сложный курс, который я когда-либо пробовал. У большинства курсов CSci либо существенная теория, которую нужно выучить, либо много программирования, а не то и другое. Компиляторы были оба.
Дэвид Торнли
Этот кажется слишком теоретическим: ocw.mit.edu/courses/electrical-engineering-and-computer-science/…
Работа
1
Я сделал это в универе на третьем курсе. - Был ли 2-й лучший модуль, который я взял за весь курс (после AI).
TWith2Sugars
@ TWith2Sugars: Почему вы говорите, что CC является одним из лучших?
Нипуна
1
пенни для меня несколько раз упала в классе - плюс привлекательный лектор и порядочные студенты сделали это тем, что мне действительно понравилось. Один из тех моментов, которые я помню, был в начале, когда мы начали делать грамматические выражения, и лектор сказал: «Это не будет иметь смысла до второго термина». Второй термин - это когда мы начали собирать остальную часть компилятора (1-й Термин мы создали парсер / токенизатор). Это для меня сделало его отличным модулем.
TWith2Sugars

Ответы:

12

Существует практическая сторона в изучении построения компилятора. Было несколько случаев, когда мне нужно было создавать парсеры для реализации какого-то специфичного для приложения командного языка. Это позволило мне создавать гибкие скриптовые интерфейсы для приложения.

Это также дает вам более полное представление о том, почему некоторые языки разработаны так, как они есть, и почему ни один язык не является идеальным.

Это сложный курс, один из самых сложных в учебной программе. Я сделал ошибку, приняв его во время летней сессии; никогда не проходите курс по компиляции на летней сессии, ваш мозг взорвется.

Джон Боде
источник
5
+1 за взрыв мозга. Кроме того, никогда не откладывайте написание вашего компилятора до конца семестра! Я знаю из опыта ...
Джереми Хейлер
20

О, это хорошо. Возьми, ты не пожалеешь.

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

Мудро проводить время в университете, чтобы изучать фундаментальные вещи CS. Конкретные языки программирования, инструменты и библиотеки все они приходят и уходят, но основа остается.

Также, если вы переживете курс (если он будет серьезным), вы можете поздравить себя с тем, что у вас есть право на программирование. Сделайте какой-нибудь практический проект с этой теорией, упомяните об этом в своем резюме, и вы очень сильно вызовете интерес у хороших работодателей.


источник
2
Кроме того, он дает вам представление о том, что такое «хороший / плохой» язык, что является постоянной темой.
Дж.Б. Уилкинсон
8

Определенно!

Это может быть не та тема, которую вы бы использовали ежедневно, например, класс баз данных, понимание компиляторов даст вам хорошую основу.

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

Ozz
источник
2
Мой курс по ОС для студентов был первым местом, где я должен был по-настоящему понять параллелизм. Это было чрезвычайно практично. Мой курс по языкам программирования старшекурсников был лучшим, когда мы писали парсеры.
justkt
Почему-то на третьем курсе я удалил модуль ОС :( Очень хотел это сделать.
TWith2Sugars
6

Да! Курс даст вам более глубокое понимание синтаксического анализа языка программирования, типов данных и функций и того, как перевести его в машинный код для конкретных процессоров.

Это само по себе может не иметь практического ежедневного применения, но даст вам уверенность в том, что вы действительно знаете, как все работает . Это очень полезно (если говорить с опытом здесь), когда вам нужно выполнить низкоуровневую оптимизацию и найти те действительно неприятные ошибки, которые ставят всех в тупик.

Мартин Викман
источник
4

В наши дни много говорят о предметно- ориентированных языках. И они действительно того стоят, их истинный потенциал еще предстоит изучить . Таким образом, навыки построения компиляторов станут не только важными, но и необходимыми в будущем. Я трачу около 60% своего времени на разработку компиляторов eDSL, даже если текущая проблема вообще не связана напрямую с компиляторами.

SK-логика
источник
что вы подразумеваете под компиляторами eDSL?
Нипуна
1
Поскольку я использую языки, которые поддерживают метапрограммирование, каждый язык, который я внедряю в конкретный домен, практически является макросом компилятора. Некоторые из них довольно сложные, со своей собственной системой типов и многочисленными этапами перевода, некоторые тривиальны, но все являются компиляторами. Нет смысла в переводчиках, если они действительно не нужны.
SK-logic
1

Стоит пройти курс, чтобы понять, как создаются инструменты, которые вы будете использовать для всей карьеры программиста (например, компиляторы, интерпретаторы, парсеры), и каковы их ограничения.

Это также стоит сделать в академическом контексте, поскольку это раскрывает интересные основы, а не многие сложности реального мира, который запутан и запутан в работе с унаследованными языками и архитектурами, то есть с большой сложностью. Также более вероятно, что вы начнете работать над всеми аспектами компилятора при создании целого для курса, чем над одним в промышленности.

grrussel
источник