доменные языки и компиляторы - PullRequest
4 голосов
/ 30 апреля 2010

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

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

Ответы [ 5 ]

3 голосов
/ 30 апреля 2010

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

Я бы сказал, что теория компилятора на самом деле довольно богата, но, возможно, не сосредоточена вокруг языков стилей Си. Если вы хотите взглянуть на некоторые мощные инструменты, обычно используемые разработчиками академических языков, я предлагаю вам проверить функциональные языки программирования (ML, Scheme, LISP, Haskell, OCaml, Scala, Clojure и т. Д.). Лично я предпочитаю Haskell с Parsec, но вариантов много. Я думаю, что общее мнение состоит в том, что структура этих языков более благоприятна для разработки и реализации языка, по крайней мере, в теоретическом смысле.

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

Инструменты с полки, такие как yacc, ANTLR, flex и cup, могут упростить сборку вашего компилятора, например, проще купить древесину на лесопилке, чтобы построить дом, чем уходить в лес и рубить деревья. Оба достают вам материал для конструкции, но вы все равно должны знать, как построить дом. Мы определенно увидим больше DSL в ближайшем будущем, и эти инструменты помогут. Однако стоит ли использовать DSL или даже использовать? Инструменты не будут иметь значения здесь, по крайней мере, на мой взгляд. Языковой дизайн использует много реальной информатики и / или математики. Хороший язык дизайнеры должны, по крайней мере, быть знакомы с обоими, а хороший язык реализаторы должны быть знакомы с инструментами проектирования языка.

3 голосов
/ 30 апреля 2010

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

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

Инструменты Spiffy помогают реализовать решение, но не решают проблему за вас. Процитирую моего учителя химии в средней школе: «Конечно! Приводите свои калькуляторы в класс! Калькуляторы только помогут вам быстрее получить неправильный ответ!»

2 голосов
/ 30 апреля 2010

Поскольку качественные DSL становятся легче строить, мы с большей вероятностью увидим их больше. Есть несколько препятствий:

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

  • Реализация скважины DSL. Многие люди, кажется, думают, что если у них есть парсер, он готов. На самом деле, вам нужно много технологий: разбор, анализ, генерация кода, ... (см. Инструментарий реинжиниринга программного обеспечения DMS для движка, который содержит то, что, по моему мнению, необходимо для эффективного создания DSL)

  • Принятие DSL сообществом. Удивительно, сколько людей настаивают на кодировании на просто языке программирования, который они знают, и ничего больше.

1 голос
/ 30 апреля 2010

В 70-х и 80-х годах произошел взрыв языков программирования. Затем появилась Java и все убила. Сейчас мы находимся в другой фазе людей, изобретающих много языков. Так что я бы сказал, что это циклично, и в действительности нет ничего «нового».

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

0 голосов
/ 30 апреля 2010

Уже есть несколько полезных инструментов, ищите Xtext, EMFText, Jetbrains MPS, Intentional Domain Workbench и Microsoft бывшего OSLO-проекта с языком М. Все эти инструменты упрощают определение языков, хотя и имеют свою стоимость, однако для DSL у вас могут быть немного другие требования, чем для обычных языков программирования общего назначения.

...