Informaticienzero

Le blog d'un informaticien passionné de partage, d'échanges et surtout, pas si zéro que ça.

Aujourd’hui, c’est le chapitre Langage spécifique au domaine que je vais traduire, comme sa licence Creative Commons Attribution 3.0me le permet. Il a été écrit à l’origine par Michael Hunger.

Chaque fois que tu écoutes une discussion entre experts d’un quelconque domaine, que ce soit des joueurs d’échec, des enseignants de maternelles, ou des agents d’assurance, tu remarqueras que leur vocabulaire est assez différent du langage de tous les jours. C’est ce à quoi servent les langages spécifiques au domaine (NdT : tiré de l’anglais domain-specific languages, abrégé en DSLs) : un domaine spécifique a un vocabulaire spécialisé pour décrire des choses particulières au-dit domaine.

Dans le monde du logiciel, les DSLs parlent d’expressions exécutables, dans un langage spécifique à un domaine, avec un vocabulaire limité et dont la grammaire est lisible, compréhensible et — heureusement — écrivable — par des experts du domaine. Les DSLs utilisés par les développeurs ou les scientifiques sont là depuis un long moment. Par exemple, les « petits langages » Unix, qu’on trouve dans les fichiers de configurations, ainsi que les langages créés avec le pouvoir des macros LISP sont parmis les plus vieux exemples.

Les DSLs sont fréquemment classés comme internes ou externes.

Tu dois toujours prendre en compte le public de ton DSL. Sont-ils des développeurs, des managers, des clients business, les utilisateurs finaux ? Tu dois adapter le niveau technique du langage, les outils disponibles, l’aide à la syntaxe (intellisense), la visualisation et la représentation en fonction de l’audience. *By hiding technical details, DSLs can empower users by giving them the ability to adapt systems to their needs without requiring the help of developers. It can also speed up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available *(NdT : je n’arrive pas à traduire).

Mon mot à moi

Ce chapitre aura été extrêmement dur à traduire parce que, sans recherche complémentaire, je n’aurai pas compris de quoi parle l’auteur. L’article Wikipédia est d’une grande aide pour ça.

Par exemple, la différence entre un DSL interne et externe devient plus claire. Le premier sera utilisé au sein d’un code source écrit dans un langage hôte (type Haskell, Lisp, etc) alors que le deuxième permet de créer des programmes indépendants de tout autre langage de programmation.

On peut voir SQL comme un DSL puisqu’il est cantonné à la manipulation de bases de données et le permet plus facilement que s’il fallait appeler une longue liste de routines en C ou en C++. Un autre exemple que j’avais vu : l’utilisation de Lua au sein d’un programme C++ qui implémentait un système d’Entities, Components, Systems et qui, par l’utilisation d’un langage simple comme Lua, permettait à un utilisateur non versé dans le C++ d’ajouter des personnages ou des caractéristiques à des personnages. Ou encore LINQ, le langage de requête utilisable au sein d’un programme C#.

En DSL externe, citons Cucumber, un programme qui fournit un langage permettant de tester d’autres logiciels en utilisant un langage appelé Gherkin.

J’encourage chaque lecteur à lire l’article Wikipédia qui est plus clair et, surtout, qui contient des exemples qui aident à bien saisir la notion.