Existe-t-il un langage DSL (Domain Specific Language) implémenté dans Clojure?Y a-t-il des DSL Clojure?
Répondre
Comme tout dialecte Lisp, Clojure dessine une ligne très floue entre API et DSL et donc le terme ne tient pas la même mystique qu'il fait dans autres langues. Les programmeurs Lisp ont tendance à écrire leurs programmes sous forme de couches de DSL, chaque couche servant les couches supérieures. Cela dit, voici quelques-unes que vous pourriez dire que l'affichage des niveaux non négligeables de-ness DSL (sans ordre particulier):
- Enlive (HTML templating)
- LazyTest (test unitaire)
- fnparse (générateur d'analyseur syntaxique)
- Midje (test & moqueur)
- byte-spec (binaires-formats)
- Vijual (graphique mise en page)
- Trammel (programmation par contraintes)
- Cascalog (Hadoop w/syntaxe datalog)
- Incanter (environnement R-like)
- Sandbar (sessions HTML, formulaires, auth)
- ClojureQL (SQL)
- mini-kanren (programmation logique intégrée)
- Leiningen (construction d'outils)
- sexpbot (bot IRC avec arc plugin)
Un exposé utile sur la réflexion sur la façon de construire DSLs en utilisant clojure de la conférence 2010 clojure-conj par le créateur de Enlive, Christophe Grand: http://blip.tv/clojure/christophe-grand-not-dsl-macros-4540700 (diapositives sont here) .
Je voudrais également compter le design de Ring comme dans le domaine de la conception DSL. Voir la discussion par le créateur de Ring, Mark McGranaghan: http://clojure.blip.tv/clojure/mark-mcgranaghan-one-ring-to-bind-them-4724955 (slides)
Oh wow! Merci David. – fogus
Grande liste! On pourrait aussi considérer le leiningen comme un DSL – Jonas
Bien que ce ne soit certainement pas un «bon» exemple de DSL, la macro defplugin de mon robot IRC est un DSL pour créer des plugins sexpbot. Vous pouvez en trouver des exemples dans src/sexpbot/plugins et l'implémentation réelle dans src/sexpbot/respond.clj. Vous pouvez l'ajouter à la liste si vous le souhaitez. Je préfère ne pas créer une toute nouvelle réponse juste pour l'ajouter, puisque le vôtre est si excellent. – Rayne