Интересные примеры доменных языков - PullRequest
3 голосов
/ 18 марта 2011

Я подумываю сделать что-нибудь с предметно-ориентированными языками для моего студенческого проекта. Моя единственная проблема в том, что я не могу найти каких-либо интересных примеров, в которых я могу получить root. Есть ли у кого-нибудь хорошие примеры DSEL (желательно с открытым исходным кодом)?

Кроме того, одна область, на которую я хотел бы обратить внимание, это решение / решение проблем параллелизма (сопрограмм и т. Д.) С DSEL. Есть ли хорошие примеры, когда кто-нибудь использует это в DSEL? Если это глупое применение DSEL, объясните, почему ...

Еще одна потенциальная область для изучения - программирование баз данных. Опять же, это глупая область для изучения с DSEL. Например, можно ли добавить в C # какой-нибудь сумасшедший синтаксис манипулирования базой данных, скажем, хорошим проектом?

РЕДАКТИРОВАТЬ: Общие языки, на которых я хотел бы реализовать, были бы Java, Python, Scala, C # и т. Д. Вероятно, не C ++ или C.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Линда реализации могут рассматриваться как eDSL.Реализации STM, такие как CL-STM , безусловно, являются eDSL.

Не связаны с параллелизмом, но чрезвычайно полезны встроенные реализации Prolog, их достаточно для Scheme, Lisp и Clojure.Парсинг eDSL уже упоминался - и их патриарх Парсек определенно заслуживает изучения.

РЕДАКТИРОВАТЬ : с вашим списком языков реализации вы упускаете самые интересные возможности eDSL.Самые мощные и гибкие eDSL создаются с помощью метапрограммирования.EDSL в стиле Scala (или даже в стиле Haskell) основаны на функциях высокого порядка, то есть на мини-интерпретаторах.Они более сложны по дизайну, намного менее гибки и ограничены синтаксисом вашего основного языка.

0 голосов
/ 18 марта 2011

boost :: spirit , если вы после C ++ - интересный пример.Цитата:

Spirit - это набор библиотек C ++ для синтаксического анализа и генерации выходных данных, реализованных в виде специфичных для домена встроенных языков (DSEL) ...

(Понятия не имею, чтовы имеете в виду «решение параллелизма», хотя я не понимаю, как вы можете решить «проблемы параллелизма» в целом или как DSEL может помочь.)

...