У чому перевага вивчення та розуміння конструкції компілятора?


10

Я магістр на третьому курсі ступеня інженерії програмного забезпечення. З цього року мій університет запровадив новий курс під назвою "Конструкції компілятора", який викладає основи теорії побудови компілятора.

Яка б була реальна світова перевага інженеру програмного забезпечення дізнатися про побудову компілятора?


2
Хоча я абсолютно не шкодую про те, що пройшов курс компіляторів, це було найскладніше, що я коли-небудь мав. Більшість курсів CSci або мали значну теорію, яку потрібно було вивчити, або багато програмування, не обидва. У укладачів було і те, і інше.
Девід Торнлі

Це здається занадто теоретичним: ocw.mit.edu/courses/electrical-engineering-and-computer-science/…
робота

1
Я робив це в університеті і на своєму 3-му курсі. - Був другим найкращим модулем, який я взяв за весь курс (Після AI).
TWith2Sugars

@ TWith2Sugars: Чому ви б сказали, що CC є одним з найкращих?
Ніпуна

1
копія падала кілька разів для мене на уроці - плюс привабливий викладач та порядні однокурсники зробили це щось мені дуже сподобалось. Один із моментів, які я пам’ятаю, це те, що ми почали робити граматичні вирази на початку, і лектор сказав: «Це не матиме сенсу до другого терміна». Другий термін - це коли ми почали створювати решту компілятора (1-й термін ми побудували парсер / маркер). Це для мене зробив чудовий модуль.
TWith2Sugars

Відповіді:


12

Існує практична сторона до вивчення побудови компілятора. Було декілька випадків, коли мені потрібно було створити парсери, щоб реалізувати певну специфічну для команди команду. Це дозволило мені створити гнучкі інтерфейси для програми.

Це також дає вам більше розуміння того, чому деякі мови створені таким, яким вони є, і чому жодна мова не є досконалою.

Це важкий курс, один із жорстких у навчальній програмі. Я допустив помилку, приймаючи його під час літньої сесії; ніколи не проходьте курс компіляторів на літній сесії, ваш мозок вибухне.


5
+1 за вибух мозку. Крім того, ніколи не відкладайте написання свого компілятора до кінця семестру! Я знаю з досвіду ...
Джеремі Хайлер

20

О, це добре. Візьміть, ви не пошкодуєте.

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

Розумно витрачати час в університеті на вивчення фундаментальних речей КС. Конкретні мови програмування, інструменти та бібліотеки всі вони приходять і йдуть, але фундамент залишається.

Крім того, якщо ви пережили курс (за умови, що це буде серйозно), то можете поздоровити себе з правильним мозком для програмування. Зробіть якийсь практичний проект, виконаний з цією теорією, згадайте про це у своєму резюме, і ви дуже сильно викличете інтерес у добрих роботодавців.


2
Плюс це дає вам уявлення про те, що є доброю / поганою мовою, що тут є регулярною темою.
JBRWilkinson

8

Безумовно!

Це може бути не тема, яку ви б використовували щодня, як, наприклад, клас баз даних, розуміння компіляторів дасть вам чудову основу.

Аналогічним прикладом може бути клас операційних систем. Ви можете бути програмістом і не замислюватися про те, як працює ОС щодня, але заземлення в ній допоможе вам у довгостроковій перспективі.


2
Мій курс з нижчою базовою базою ОС був першим місцем, якому я повинен був зрозуміти паралельність. Це було надзвичайно практично. Мій курс мов програмування з нижчою мірою був найкращим, коли ми писали парсери.
justkt

Чомусь на моєму третьому курсі видалений модуль ОС :( Дійсно хотів це зробити і так.
TWith2Sugars

6

Так! Курс дасть вам набагато глибше розуміння мови програмування, типів даних та функцій та того, як перевести його в машинний код для конкретного процесора: s.

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


4

Зараз дуже багато шумів щодо мов, що належать до домену . І вони справді варті всього гулу, їх справжній потенціал ще належить вивчити . Отже, майстерність побудови компіляторів стане не просто важливою, а важливою у майбутньому. Я витрачаю близько 60% свого часу на розробку компіляторів eDSL, навіть якщо поточна проблема взагалі не пов'язана безпосередньо з компіляторами.


що ви маєте на увазі під компіляторами eDSL?
Ніпуна

1
Оскільки я використовую мови, що підтримують метапрограмування, кожна з вбудованих доменних мов, які я реалізую, - це практично макрос компілятора. Деякі досить складні, мають власну систему типів та численні переклади перекладу, деякі - тривіальні, але всі - компілятори. Немає сенсу в перекладачах, якщо вони справді не потрібні.
SK-логіка

1

Варто пройти курс, щоб зрозуміти, як побудовані інструменти, які ви використовуєте для всієї кар’єри програмування (наприклад, компілятори, інтерпретатори, аналізатори) та які існують обмеження.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.