Есть ли какой-либо DSL (Domain Specific Language), реализованный в Clojure?
Есть ли Clojure DSL?
Ответ 1
Как и любой диалект Lisp, Clojure рисует очень нечеткую линию между API и DSL, и поэтому термин не содержит ту же мистику, что и на других языках. Lisp программисты склонны писать свои программы в виде слоев DSL, каждый слой обслуживает их выше. Сказав это, вот несколько из них, которые вы могли бы сказать, отображали нетривиальные уровни DSL (без особого порядка):
- Enlive (шаблоны HTML)
- LazyTest (модульное тестирование)
- fnparse (генератор синтаксического анализатора)
- Midje (тестирование и издевательство)
- byte-spec (бинарные форматы)
- Vijual (график)
- Trammel (программирование ограничения)
- Cascalog (синтаксис Hadoop w/datalog)
- Incanter (R-подобная среда)
- Sandbar (HTML-сессии, формы, auth)
- ClojureQL (SQL)
- mini-kanren (встроенное логическое программирование)
- Leiningen (инструмент сборки)
- sexpbot (IRC-бот с аркой плагинов)
Ответ 2
SQL DSL в Clojure, немного старый, но может быть витриной
Ответ 3
Полезный разговор о том, как создавать DSL с помощью clojure из конференции clojure -conj 2010 года создателем Enlive, Christophe Grand: http://blip.tv/clojure/christophe-grand-not-dsl-macros-4540700 (слайды здесь).
Я бы также подсчитал дизайн Ring, как в домене DSL-дизайна. См. Разговор создателя Рика Марка Макграрана: http://clojure.blip.tv/clojure/mark-mcgranaghan-one-ring-to-bind-them-4724955 (slides)