Les mensonges des DSL 6


Un DSL, ou Domaine Specific Language, est un langage qui est dédié à un usage très pointu, et pour lequel il est donc particulièrement efficace.

Par exemple, le langage de Matlab est un DSL, dédié à l’expression mathématique. SQL est un DSL, orienté requête. PHP a commencé comme un DSL, optimisé pour le Web.

En théorie, un DSL doit vous rendre plus productif. En théorie. En pratique, une fois qu’un DSL sort de son domaine de prédilection, il est extrêmement inéficace. C’est le prix de la spécialisation.

Or, dernièrement, on a fait beaucoup l’apanage des DSL dans le cadre d’autres langages. Car oui, certains langages permettent de créer des DSL. Les macros du C et les capacités de meta programmations de Lisp permettent par exemple de créer des langages complets, avec des dialectes spécialisés.

Vient alors le premier problème : on créé un nouveau langage. Récent. Supporté et donc débuggé et (mal) documenté par l’auteur. Ensuite, on se rajoute un niveau d’indirection. Car du coup ça nous fait une abstraction supplémentaire, et il faut savoir ce que ça fait sous le capot. En prime, on freine l’entrée de nouveaux venus dans le projet, puisqu’il faut qu’ils apprenent à faire avec le DSL en plus, là où une simple lib aurait pu faire l’affaire.

Et on touche ici à une seconde problématique, les faux DSL : des libs ordinnaires qui se déguisent en DSL. Typiquement, je pense à Ruby, ici.

Les rubistes prétendent partout qu’ils peuvent créer des DSL avec leur langage. Encore un mensonge, puisque tout ce qu’ils font c’est utiliser le chaînage de méthode, le namespacing, la surcharge des opérateurs et les parenthèses/virgules facultatives pour donner l’impression qu’un nouveau langage est créé.

Tout comme on donne l’illusion de retourner deux paramètres dans une fonction en Python en retournant un tuple et en faisant de l’unpacking. C’est du sucre syntaxique, mais on est très loin de ce que ça prétend être.

Pourquoi c’est important ? Parce que cela laisse à croire qu’il y a quelque chose de spéciale là dedans, alors qu’il s’agit ni plus ni moins que d’une bête lib avec une API fluide. Ce qu’on peut faire dans tout autre langage (excepté l’absence de parenthèses, sur lequel il faudra que j’écrive un article tellement c’est une FBI).

Donc plutôt que de faire du bruit et du hype autour de cela, et amener les gens à se concentrer sur l’aspect “comment obtenir une syntaxe exotique”, il serait plus intéressant de dire tout simplement : voilà comment on peut faire une belle API, voici les bonnes pratiques, appliquez les.

Et aussi écrire une doc…

J’ai horreur en informatique quand on donne 40 noms différents à la même chose. Comme par exemple pour les promises, les futures, les deferred, etc. Merde, non seulement ça n’aide personne, mais en plus ça rend la comprehension de principes plus difficile. Déjà que c’est rarement bien expliqué…

Au final, un DSL est rarement une bonne idée, que ce soit un vrai ou un faux. SQL nous aura bien servi, il faut le reconnaitre, même si on aurait pu faire mieux. Mais la plupart du temps, ce sont quelques heures de gagnées en redaction de code, et des jours de formation et maintenance perdus, ou alors juste une masquarade cachant simplement derrière le hype des principes sains de programmation.

Languages are more than just languages, they are a form of culture, and by being culture they tend to enforce (indirecty or directly) a certain way of doing things, i.e. standards or conventions. This means that if you know the language and its culture, there are less surprises and a longer learning or adaptation curve

(Extrait de Is Lisp Too Powerful ?)

6 thoughts on “Les mensonges des DSL

  • scaringella

    J’ai connu des vrai DSL. Un s’appellait SpeedWare et servait à la gestion des bibliothèques. Syntaxe assez cobolesque. Il compilait en exe sur plategorme HP avec la base TurboImage. 5 minutes pour un écran compilé injecté dans l’applicatif. L’autre servait à la gestion des cimetieres et pareil syntaxe cobolesque et compilation en exe sur PC avec écran, bdd etc tout intégré. Un DSL c’est un langage dans lequel les concepts du domaine à abstraire/informatiser sont dans la syntaxe et TOUT ce qui est nécessaire est embarqué dans l’applicatif à la compilation. Deux DSL en 30 ans d’informatique.

  • foxmask

    @scaringella : mon premier boulot était chez Speedware (une boite d’origine Canadienne). il était vendu pour un L4G (Langage de 4° Generation) concurrent de Cognos. Le soft qui gérait les bibliothèques (municipales) s’appelait EasyReporter. Enfin je dis ça c’était en 1991 depuis ça a pû/dû :) Je n’aurai jamais pensé croiser quelqu’un en parler ; puisque tournant principalement à l’époque sur mainframe HP3000 puis HP9000 puis OS/2. la préhistoire :)

  • scaringella

    @FoxMask

    Ouah !!!! Quelq’un qui connait Speedware !!! Incroyable. Moi c’était pour les bib de grenoble.
    Depuis je suis passé sur les unix ( cheap donc médiocre ) avec du C et du Python. Jamais mis
    les mains dans C++ ou Java malgré les pressions, vraiment trop merdiques.

  • foxmask

    @scaringella suis passé à grenoble former la bibliothèque municipale à ce EasyReported :D

    Sam&Max c’Plus mieux que copin_perdu_de_recherche :)

    on s’moque mais vous comprendriez si vous zaviez vécu ‘ce’ truc :D C’est un peu comme expliquer ce que c’est que le service militaire :)

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.