Итак, будет ли теория компилятора такой же аридной (будучи здесь субъективной), какой она была до сих пор, или есть шансы, что мы получим больше прикладных, ориентированных на программиста материалов?
Я бы сказал, что теория компилятора на самом деле довольно богата, но, возможно, не сосредоточена вокруг языков стилей Си. Если вы хотите взглянуть на некоторые мощные инструменты, обычно используемые разработчиками академических языков, я предлагаю вам проверить функциональные языки программирования (ML, Scheme, LISP, Haskell, OCaml, Scala, Clojure и т. Д.). Лично я предпочитаю Haskell с Parsec, но вариантов много. Я думаю, что общее мнение состоит в том, что структура этих языков более благоприятна для разработки и реализации языка, по крайней мере, в теоретическом смысле.
Как сказал выше Кристофер, программисты не обязательно делают лучших дизайнеров языка. Я видел несколько действительно классных DSL и довольно ужасных (мое мнение, конечно, YMMV). Знание языковых концепций является обязательным условием для разработки любого языка, DSL или другого (теория типов, теория категорий, анализ различных кодов, оптимизация машин и т. Д.). Не говоря уже о том, что если вы разрабатываете DSL, вы должны иметь достаточно глубокие знания о предметной области, на которую вы нацелены.
Инструменты с полки, такие как yacc, ANTLR, flex и cup, могут упростить сборку вашего компилятора, например, проще купить древесину на лесопилке, чтобы построить дом, чем уходить в лес и рубить деревья. Оба достают вам материал для конструкции, но вы все равно должны знать, как построить дом. Мы определенно увидим больше DSL в ближайшем будущем, и эти инструменты помогут. Однако стоит ли использовать DSL или даже использовать? Инструменты не будут иметь значения здесь, по крайней мере, на мой взгляд. Языковой дизайн использует много реальной информатики и / или математики. Хороший язык дизайнеры должны, по крайней мере, быть знакомы с обоими, а хороший язык реализаторы должны быть знакомы с инструментами проектирования языка.