Existe-t-il un DSL (Domain Specific Language) implémenté dans Clojure ?
Réponses
Trop de publicités?Comme n'importe quel dialecte Lisp, Clojure trace une ligne très floue entre API et DSL et, par conséquent, le terme n'est pas aussi mystique qu'il ne l'est dans d'autres langues. Les programmeurs Lisp ont tendance à écrire leurs programmes sous forme de couches de DSL, chaque couche servant celles qui la précèdent. Ceci étant dit, en voici quelques-uns dont on pourrait dire qu'ils présentent des niveaux non triviaux de DSL (sans ordre particulier) :
- Enlive (modèle HTML)
- LazyTest (Test unitaire)
- fnparse (générateur d'analyseur)
- Midje (tests et simulacres)
- octet-spec (formats binaires)
- Vijual (mise en page du graphique)
- Trammel (programmation par contraintes)
- Cascalog (Hadoop avec syntaxe datalog)
- Incantateur (environnement de type R)
- Sandbar (sessions HTML, formulaires, authentification)
- ClojureQL (SQL)
- mini-kanren (programmation logique embarquée)
- Leiningen (outil de construction)
- sexpbot (IRC bot avec plugin arch)
SQL DSL dans Clojure
Un exposé utile sur la manière de construire des DSL à l'aide de clojure, présenté lors de la conférence clojure-conj 2010 par le créateur de Enlive Christophe Grand : http://blip.tv/clojure/christophe-grand-not-dsl-macros-4540700 (les diapositives sont ici ).
Je compterais également la conception de Bague comme dans le domaine de la conception des DSL. Voir l'exposé du créateur de Ring, Mark McGranaghan : http://clojure.blip.tv/clojure/mark-mcgranaghan-one-ring-to-bind-them-4724955 ( diapositives )