PRATIQUE ALGO/METHODES 
Expliquez-moi... Les langages spécifiques : limiter pour optimiser
 
Les syntaxes HTML, SQL et Make appartiennent à un groupe de langages bien particulier : ceux qui ciblent un seul domaine d'utilisation, de la manière la plus optimisée possible. (16/11/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Les langages de programmation utilisés au quotidien par les développeurs sont le plus souvent d'ordre généraliste : ils peuvent servir à résoudre plusieurs types de problèmes, à l'aide de plusieurs approches différentes au besoin. PHP, Java, C#, JavaScript et autres sont ainsi des langages généralistes.

Au contraire, les langages spécifiques, dits également "langages dédiés", ou domain-specific languages (DSL), ont été conçus pour répondre à un type donné de problème, ou à un domaine d'application spécifique. Langages généralistes et langages dédiés cohabitent depuis le début de l'informatique, mais si ces derniers sont restés de fait moins populaires que leurs cousins à usages multiples, ils profitent d'un regain d'intérêt auprès des développeurs désireux de maîtriser leurs outils ou d'améliorer leurs tâches quotidiennes. Les premiers langages généralistes connus, comme Lisp, Fortran ou Cobol, sont en réalité des évolutions généralistes de langages originellement dédiés à un problème, un domaine, une machine...

Les DSL sont rendus nécessaires par le besoin de disposer d'un moyen réellement optimisé de traiter un problème. Un langage généraliste aura tendance à proposer des fonctionnalités qui traiteront certes correctement le problème, mais pas de la manière la plus optimale. Un langage dédié, parce qu'il est conçu à seule fin de traiter un problème ou domaine précis, pourra se délester des lourdeurs inhérentes à une approche généraliste.

Ainsi, les DSL présentent de nombreux avantages : ils utilisent les idiomes et le niveau d'abstraction du domaine ciblé, et donc sont utilisables par des spécialistes ; ils sont légers, donc facilement maintenables, portables et réutilisables ; ils sont le plus souvent très documentés, cohérents et fiables ; ils sont optimisés pour le domaine.
Cependant, utiliser un DSL a un coût : il nécessite de concevoir, implémenter et maintenir son propre langage, d'éduquer ses utilisateurs, et de définir précisément son champ d'utilisation.

Il existe plusieurs centaines de DSL, la plupart non publics. Certains cependant ont une telle importance qu'ils se confondent souvent avec le domaine qu'ils exploitent : SQL pour les bases de données, HTML pour les pages Web, BNF pour définir la syntaxe des langages, Make pour la compilation d'application... Un DSL n'a donc pas forcément besoin d'être "compilé" dans le sens binaire du terme, mais doit disposer au minimum d'un interpréteur. Il présente une syntaxe limitée et propre à accomplir de la manière la plus claire possible les traitements nécessaires au domaine.

Outre l'interprétation ou la compilation, les DSL peuvent se retrouver sous forme de langages embarqués au sein d'un autre, ou de bibliothèques de fonctions dédiées. La syntaxe du langage hôte sert alors à recréer les idiomes du domaine. L'avantage de cette approche est de ne pas avoir à développer d'interpréteur/compilateur, mais d'utiliser celui du langage hôte. Le DSL y perd cependant la spécificité de ses mécanismes, et l'optimisation qui en découle.

Enfin, il reste possible, pour les besoins avancés, d'inclure le DSL au langage hôte sous la forme de fonctionnalités construites dans le langage par le biais d'un préprocesseur, voire d'inclure cette phase de construction au sein même du compilateur, reconstruisant ainsi le langage hôte avec en plus des fonctionnalités voulues. L'interpréteur Tcl, étendu pour de nombreux domaines, en reste le principal exemple.

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page