Действительно ли выгодно для программиста изучить, как создать компилятор?

21
задан Mehrdad Afshari 8 January 2009 в 15:14
поделиться

16 ответов

Программирование компилятора является интересной темой и существует некоторое большое значение к нему. В колледже я перешел к нему, была избирательная, Разработка и реализация Языка. Я лично благодарен взять его. Мы изучили различные способы реализовать лексические анализаторы, синтаксические анализаторы и эмиттеры байт-кода.

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

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

я думаю всего, это было выгодно для меня, и в настоящее время я работаю над основанными на Java веб-приложениями.

24
ответ дан ihumanable 29 November 2019 в 06:27
поделиться

Я недавно сделал независимое исследование того, что мы назвали Обработкой языка (мой заключительный проект был не так компилятором как синтаксическим анализатором/интерпретатором файла C++ с подобными компилятору функциями). Я был обязан использовать книгу "Дракона", которая была упомянута выше. Я думал, что как разработчик программного обеспечения это было одной из более важных вещей, которые я сделал в своей карьере колледжа. Я нашел его не только интересным и полезным для моего собственного персонального преимущества, но и это также позволило мне видеть глубже на язык. Вдобавок к, потому что книга Дракона не является языком, конкретным, это помогло мне понять общие черты и что еще более важно причины позади различий в различных языках. Я однако соглашаюсь с тем, что не все программисты могут найти его необходимым. Все же в области разработки программного обеспечения я думаю что, если у Вас есть интерес к расширению Вашего понимания дизайна языка, что может быть очень полезно посмотреть на компиляторы.

1
ответ дан Bill 29 November 2019 в 06:27
поделиться

До некоторой степени этот вопрос похож на много, "Я должен изучить C?"

, Поскольку другие указали, некоторые элементы компилятора — лексический анализ, анализируя — может использоваться во многих других приложениях. Вы изучите некоторые полезные методы, даже если Вы никогда не должны реализовывать компилятор.

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

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

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

1
ответ дан Bruce Alderman 29 November 2019 в 06:27
поделиться

Это похоже на выяснение, "действительно ли это выгодно для программиста для имения большего знания программирования?". Простое - то, что да, это выгодно. Насколько это принесет пользу повседневному non-compiler-building, который программирование дел трудно предположить. Но это будет определенно учить Вас тому, как внутренности того, что Вы делаете работу, как управлять строками, чтобы продиктовать логику и возможно помочь Вам отладить лучше независимо от того, что Вы используете.

1
ответ дан Eran Galperin 29 November 2019 в 06:27
поделиться

Да, это - хорошая идея. Изучение, как весь этот материал работы может только принести пользу программисту. Я имею, записал ОСНОВНОЙ компилятор в SX ASM и узнал о тонне из него.

, Поскольку кто-то еще упомянул, хотя, существует много степеней программистов и знания. Сеть dev, кто главным образом в разметку & языки сценариев, вероятно, не извлекли бы выгоду так же из него как хардкор C или программист ASM, который пишет встроенное системное программное обеспечение - но это вовсе не значит это не было бы полезное знание все же.

Перестраивающие колеса всегда полезно для образовательного значения.

1
ответ дан pezi_pink_squirrel 29 November 2019 в 06:27
поделиться

Я - веб-разработчик; я провожу большую часть своего времени в PHP и MySQL. Я не думаю, учась создавать компилятор, принес бы пользу мне очень.

Различные типы программистов получат отличающиеся количества преимущества.

Бит неответа, я знаю...

1
ответ дан Greg 29 November 2019 в 06:27
поделиться

Я проголосовал за большинство этих ответов.

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

Каждый раз, когда Вы пишете любую программу, Вы, в некотором смысле, определяете язык, и каждая программа, на некотором уровне, языковом процессоре.

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

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

2
ответ дан Mike Dunlavey 29 November 2019 в 06:27
поделиться

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

знание, как код компилирует и выполняется и в собственном компоненте и в байт-коде, является также большим инструментом в C++ по сравнению с Java/C# по сравнению с C++/C# по сравнению с потоками Java и войнами пламени;)

2
ответ дан Joao Vilaca 29 November 2019 в 06:27
поделиться

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

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

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

Изучают, как учиться.

2
ответ дан Alex 29 November 2019 в 06:27
поделиться

Я изучил много.

Audrey Tang , разработчик МОПСЫ , рекомендует Типы и Языки программирования .

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

3
ответ дан orip 29 November 2019 в 06:27
поделиться

Я думаю свой компилятор & курс теории языка в Университете действительно имел огромное влияние на мое понимание языков программирования, даже десятилетие впоследствии. Но я не действительно уверен, что должен был бы реализовать компилятор для этого.

3
ответ дан krosenvold 29 November 2019 в 06:27
поделиться

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

3
ответ дан Vinay 29 November 2019 в 06:27
поделиться

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

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

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

4
ответ дан DevelopingChris 29 November 2019 в 06:27
поделиться

В то время как немного программистов будут когда-либо заканчивать тем, что имели необходимость реализовать компилятор, более ранние стадии здания компилятора, а именно, lexing и парсинга - что-то, что может подходить намного чаще: Кто не должен был писать синтаксический анализатор для некоторого странного формата файла? Обычно, те достаточно просты справиться без опыта в здании компилятора, но не всегда.

5
ответ дан Michael Borgwardt 29 November 2019 в 06:27
поделиться

Я взял два курса компиляторов в университете и нашел их полезными потому что:

  • Запись компилятора требует знания большого количества областей информатики - регулярные выражения, контекстно-свободные грамматики, синтаксические деревья, графики, и т.д. Это может помочь Вам видеть, как применить теорию информатики к реальным проблемам.
  • Путем понимания, как компилятор генерирует и оптимизирует код, Вы потратите впустую меньше времени, делая глупую "оптимизацию" сами.
  • процесс scanning/lexing файл и создание синтаксического дерева из него применимы к намного большему набору проблем тогда просто создание компилятора.
  • Помогает "обобщить" языки программирования - как только Вы видите, что каждый язык программирования заканчивается как машинный код в конце, это облегчает учить новые языки, потому что Вы видите, что каждый язык является просто различным способом выразить те же основные идеи.

Некоторые люди противостояли бы этому существуют более полезные вещи, которые Вы могли делать со своим временем, как изучение популярного языка программирования или библиотеки, которая могла помочь получить Вас задание (этот аргумент часто используется в качестве причины не изучить ассемблер). Однако зная, как работа компиляторов, вероятно, облегчит учить новые языки программирования (см. точку № 4).

7
ответ дан sk. 29 November 2019 в 06:27
поделиться

Я нахожусь в процессе прочтения Книги Дракона (Компиляторы), и в течение начала книги Вас встречают следующим:

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

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

8
ответ дан Mike B 29 November 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: