Полезно ли программисту учиться создавать компилятор? - PullRequest
21 голосов
/ 08 января 2009

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

Ответы [ 17 ]

2 голосов
/ 08 января 2009

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

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

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

Узнайте, как учиться.

1 голос
/ 08 января 2009

В некотором смысле этот вопрос очень похож на «Должен ли я изучать C?»

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

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

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

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

1 голос
/ 08 января 2009

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

1 голос
/ 08 января 2009

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

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

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

1 голос
/ 08 января 2009

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

1 голос
/ 08 января 2009

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

Различные типы программистов получат различные выгоды.

Немного без ответа, я знаю ...

0 голосов
/ 17 ноября 2013

В сегодняшней индустрии, если вы можете сделать компилятор, то вы, как 3-летний ребенок, который учится считать (то есть верхний предел моего интеллекта дает мне IQ около 18, поскольку поле касается); и это так же важно: как указано в книге о драконах, каждое приложение с пользовательским интерфейсом определяет язык программирования.

Кроме того, новые языки программирования, такие как zonnon и composita , используют синтаксически ориентированные протоколы для связи между живыми объектами. Они определяют типы протоколов, которые определяют интерфейс с серверным потоком в виде грамматики EBNF. Это делает невозможным кодирование обработчиков сообщений, если вы не написали компилятор!

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

В то время как текущая реализация zonnon все еще немного не в порядке; и определение языка, похоже, еще не завершено; тем не менее, я буду настолько смелым, что рискну, что zonnon (или что-то подобное) поместит C # в мусорное ведро, где он находится, если они смогут решить эти проблемы.

Composita - интригующий язык; но в реальном мире крайне нежелательно требовать, чтобы каждый объект был живым потоком, а каждый вызов функции представлял собой сообщение, так как разработчики composita должны были переопределить ОС, чтобы она работала достаточно быстро.

Сказанное, в заключение повторюсь: если программирование серверных приложений идет по типу протоколов EBNF, то вам лучше всего научиться писать компилятор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...