Exploration des Domain-Specific Languages (DSL) en Lisp
Comme nous l'avons vu, précédemment, Lisp permet la création de macros afin d'étendre les fonctions du code, ce qui offre aux développeurs un niveau élevé de personnalisation. Les DSL représentent une autre façon que les développeurs peuvent personnaliser leur code. Dans des DSL, la syntaxe est typiquement changée, permettant de simplifier des commandes par abstraction, rendant le tout lisible puisqu'une grande partie de la complexité des fonctions se retrouve cachée.
On pourrait concevoir les DSL comme une sorte d'interface, simplifiant les actions et enforçant des règles de métier, puisqu'on peut créer notre propre syntaxe avec nos propres directives.
Un example simple de ceci serait de modifier la syntaxe des opérations arithmétiques :
(defmacro additionne (&rest operands)
(cons '+ operands))
(defmacro soustrait (&rest operands)
(cons '- operands))
(defmacro multiplie (&rest operands)
(cons '* operands))
(defmacro divise (&rest operands)
(cons '/ operands))
On se retrouve ensuite avec des commades un peu plus lisibles en français :
(additionne 2 3)
(soustrait 10 5)
(multiplie 4 5)
(divise 20 4)
Évidemment, c'est un exemple très simple de ce qui pourrait être fait mais voila l'essence de ce qui peut-être accompli avec les DSL.
Si vous voulez explorer une implémentation réelle de DSL en Lisp, il existe Pollen, écrit en Racket (un langage dans la famille Lisp) qui permet d'abstraire du code afin qu'il puisse être utilisé par des écrivains pour écrire des livres et éditer le texte. Pollen fait une abstraction de serveur web et compile du texte de sa propre façon, ce qui fait que les utilisateurs peuvent créer des programmes en limitant le code qui est nécessaire.
Nous pouvons donc faire de la déclaration de variables dans nos textes pour qu'il puisse être modifié facilement, par exemple, on pourrait déclarer le nom d'un personnage et puis son âge, ce qui nous permet de modifier toutes les instances de ceux-ci dans le texte sans avoir à le parcourir entièrement.
Puisque c'est un DSL, la syntaxe est complètement changée, ne laissant aucune trace de Lisp :
◊(
define
metal "Plutonium")
Pollen + ◊metal
---------------
+ You **wanted** ◊metal — you _got_ it.
+ [search for ◊metal](https://google.com/search?q=◊metal)
Dans cet example tiré de la documentation Pollen, on peut voir comment les variables peuvent être utilisées dans du texte. De plus, la déclaration de code se fait à l'aide d'un losange ◊
, ce qui est unique à ce DSL. Cet exemple est fait en markdown mais il est aussi applicable en texte brut.
En conclusion, nous avons exploré l'utilisation des Domain-Specific Languages (DSL) en Lisp, mettant en lumière la puissance des macros pour étendre les fonctionnalités du langage et personnaliser le code selon les besoins spécifiques d'un domaine. Les DSL offrent une façon élégante de simplifier la syntaxe et d'abstraire les concepts métier, permettant aux développeurs de créer des interfaces plus intuitives et expressives. Les DSL en Lisp ouvrent de nouvelles perspectives pour l'innovation et la résolution de problèmes dans une grande variété de domaines, offrant aux développeurs un outil puissant pour créer des langages spécifiques à leur domaine et simplifier la tâche de développement.
Sources
"Domain-specific Languages in Lisp", par Joe Marshall, Abstract Heresies Écrit le 7 Juin 2007. [url] https://funcall.blogspot.com/2007/06/domain-specific-languages-in-lisp.html
"Quick tour", Équipe de Documentation Pollen, [url] https://docs.racket-lang.org/pollen/quick-tour.html
Commentaires