Un langage dédié (en anglais, ou DSL) est un langage de programmation dont les spécifications sont conçues pour répondre aux contraintes d’un domaine d'application précis. Il s'oppose conceptuellement aux langages de programmation classiques (ou généralistes) comme Java ou C, qui tendent à traiter un ensemble de domaines. Néanmoins, aucun consensus ne définit précisément ce qu'est un langage dédié. Ce manque de définition précise sur la nature d'un langage dédié rend délicate la tâche d'établir un historique clair sur l'origine du concept.
En informatique, les langages dédiés traitent divers domaines informatiques (pilotes informatiques, le calcul scientifique, les bases de donnéesListe non exhaustive.) ou traitent de différents autres domaines où intervient l'informatique (médecine, aéronautique). L'utilisation d'un langage dédié n'est pas propre à l'informatique, il existe des langages dédiés aux domaines de la médecine, de la cuisineLa diversité des langages dédiés correspond à celle de leurs domaines d'applications..
La construction des langages dédiés diffère fondamentalement de celle d'un langage classique. Le processus de développement peut s’avérer très complexe. Sa conception nécessite une double compétence sur le domaine à traiter et en développement informatique. Qu'il soit langage dédié interne ou externe, la mise en œuvre de ce type de langage requiert l'utilisation de patron de conception. Il existe des patrons de conceptions décrivant l’implémentation comme le décrit Spinellis et décrivant plutôt les phases de développement du langage. Ces deux approches, bien qu'étant fondées sur des idées différentes, se complètent l'une et l'autre.
L'utilisation de langages dédiés présente des avantages et des inconvénients par rapport à l'utilisation de langages généralistes. La justification de l'utilisation de langages dédiés peut se faire en fonction de considérations d'ordre technologique, ou d'ordre financier. D'autre part, les avantages et les inconvénients ne sont pas les mêmes qu'il s'agisse d'un langage dédié interne ou externe.
Tour d'horizon Notion pluridisciplinaire Il existe des langages dédiés dans d'autres domaines que l'informatique. Les plus connus sont notamment : le langage dédié des polices d'assurances ; le langage dédié du code civil.
Nous pouvons aussi retrouver des dictionnaires dédiés au langage de la médecine, de la cuisine, de la philosophie.
Définitions Un langage dédié à un domaine (» ou DSL) fournit une notation orientée à ce domaine d'application. Il est basé sur les concepts et les fonctionnalités du domaine en question. En tant que tel, un langage dédié est un moyen efficace de décrire et de générer des programmes dans un domaine spécifique.
Selon Gilles Muller, un langage dédié est un langage de programmation spécifique à une famille de problèmes donnés appelée « domaine ». Il permet au programmeur de s'assurer de construire un langage approprié et que ce langage réponde aux exigences spécifiques du domaine ciblé.En anglais : .
Une définition complémentaire est donnée par Deursen, Klint et Visser. Un langage dédié est un langage de programmation ou un langage de spécification exécutable qui offre, à travers des notations appropriées et des abstractions, une puissance expressive axée sur, et généralement limitée à, un domaine spécifique.En anglais : A domain-specific language (DSL) is a programming language or executable specification language that offers, through appropriate notations and abstractions, expressive power focused on, and usually restricted to, a particular problem domain..
Langages dédiés internes et externes Il existe deux types de langages dédiés : les langages dédiés internes, aussi appelés langages enchâssés, ou langages embarqués ( ou DSEL) et les langages dédiés externes.
Les premiers sont destinés à être utilisés au sein du code source d'un programme, exprimé par ailleurs dans un autre langage qualifié de langage hôte. Les langages qui se prêtent bien à l’accueil d’un langage embarqué sont par exemple : Lisp, Haskell, Tcl…
Les seconds ne sont pas destinés à l'expression supplémentaire au sein d'un autre langage. Les codes sources des programmes qu'ils permettent d'implémenter sont autonomes et indépendants de tout autre langage de programmation.
500px|gauche|vignette|Langage dédié interne 500px|droite|vignette|Langage dédié externe
Selon Watt le langage dédié doit avoir certains critères : Il doit être universel (c'est-à-dire qu'il doit résoudre tous les problèmes auxquels il est dédié). Il doit être implémenté et réalisé sur un ordinateur. Il doit avoir une logique naturelle pour résoudre les problèmes.
Un langage dédié peut évoluer en fonction de l'évolution même du domaine d'application. Il arrive aussi qu'un langage dédié évolue pour devenir un langage de programmation généraliste.
Exemples de langages dédiés à des domaines particuliers Les domaines d'applications des langages dédiés sont très variés. Ces langages sont néanmoins créés pour effectuer une tâche précise. Les exemples d'usages ci-dessous ne sont qu'une partie très infime des domaines d'applications des langages dédiés.
Pilote informatique
Bossa Le langage Bossa est un langage dédié à l'implantation d'ordonnanceurs de systèmes. Bossa facilite l'intégration de nouveaux ordonnanceurs dans des systèmes généralistes (Windows, Linux) et dans le noyau de système d'exploitation.
Devil Devil (DEVice Interface Language) est un langage dédié à la définition d'interfaces matérielles. Cette approche améliore la robustesse des pilotes de périphériques. À la différence d'un langage généraliste, Devil dispose d'un compilateur qui contrôle automatiquement la cohérence d'une spécification et produit des talons qui incluent des vérifications lors de l'exécution.
Web
HTML HTML (HyperText Markup Language) est un langage de balisage destiné à l'écriture de documents contenant des liens hypertextes. Il a été créé au début des années 1990 par Tim Berners-Lee qui en a fait l'annonce sur usenet dans Qualifiers on Hypertext links le . HTML est soutenu par différents organismes qui en font, en 2011, le langage de référence pour la création de page web.
PHP Le langage de scripts PHP (Hypertext Preprocessor) est destiné à la production des pages web et à la gestion de bases de données, initialement MySQL. Il a été créé en 1994 par Rasmus Lerdorf. L'apport principal de PHP, par rapport au langage HTML, est de permettre la création de pages web dynamiques.
Exemple de génération de page web avec HTML et PHP: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <title><?php echo 'Hello World'; ?></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <p><?php echo 'Hello World'; ?></p> </body> </html>
Ruby Ruby est un langage dédié interne pour des applications Web. D'après Martin Fowler, Ruby est mis en œuvre comme un langage dédié interne car il a été développé sous Emacs qui lui-même s'appuie sur le langage Emacs Lisp. Le langage Emacs Lisp est donc considéré comme le langage hôte de Ruby. L'intérêt récent de Ruby est de reprendre techniquement la méta-programmation dans les langages dédiés internes.
Base de données
SQL Le langage SQL (Structured query language) c'est-à-dire « langage d'interrogation structuré » est à l'origine un langage dédié externe avec Embedded SQL. Il est destiné à interroger ou à manipuler une base de données relationnelle. Il a été développé chez IBM dans les années 1970 par Donald D. Chamberlin et Raymond F. Boyce. Ce langage était initialement nommé SEQUEL.
Exemple de requête SQL dans PHP. <?php // Requete SQL à l'intérieur d'une variable PHP $query = "SELECT id, name FROM products ORDER BY name ;"; // PostgreSQL $result = pg_query($conn, $query); // MySQL $result = mysql_query($query); ?>
Calcul scientifique
Fortran Le Fortran est initialement un langage dédié au calcul scientifique mis au point durant les années 1954-1957 par une équipe d'IBM dirigée par John Backus, prix Turing 1977. Il est le premier langage de programmation de haut niveau et il continue d'évoluer. Depuis la norme Fortran 2003 (ISO/IEC 1539-1:2004), le langage supporte la programmation orientée objet. La norme Fortran 2003 normalise également l'interfaçage avec le langage C, assuré par le module interne ISO_C_BINDING, ce qui permet à un programme Fortran d’accéder facilement aux bibliothèques du langage C et réciproquement au C d'utiliser des bibliothèques Fortran. Et cette interopérabilité a été améliorée avec la norme Fortran 2018 (ISO/CEI 1539-1:2018). Fortran, de langage dédié, évolue donc et tend à devenir un langage généralisteStandard Fortran 2003. Ce langage évolue également dans son domaine dédié avec la prise en charge du calcul vectoriel depuis Fortran 95 (ISO/CEI 1539-1:1997) et du parallélisme depuis Fortran 2008 (ISO/CEI 1539-1:2010), afin de s'adapter aux architectures matérielles actuelles.
Historique et évolution
Il n'y a pas vraiment d'historique sur les langages dédiés car il n'existe pas de réel consensus sur une définition exacte.
Les premiers langages de programmation (Cobol, Lisp, Fortran) sont eux-mêmes considérés comme des langages dédiés bien qu'ils ne soient pas nommés en tant que tel. Ces premiers langages de programmation étaient, de fait, dédiés à un domaine d'application. Avec le développement des possibilités d'applications, les langages ont eu tendance à se généraliser. Parallèlement, la nécessité de langages spécialisés pour résoudre des besoins spécifiques a continué de se faire sentir. Plusieurs solutions ont été trouvées : Les bibliothèques spécifiques (librairies) fournissent des sous-routines spécialisées pour un domaine d'application donné. Les frameworks orientés objet, dont l'objectif est le même que les bibliothèques spécifiques, sont adaptés à la programmation orientée objet. Les langages dédiés à un domaine, qui offrent la possibilité de permettre l'expression dans le domaine d'application ciblé.
Le terme de « langage dédié » serait apparu pour la première fois en , dans une publication de J.M Neighbors.. On retrouve ensuite l'idée de langage dédié sous différents noms, notamment « petit langage » () ou encore « micro langage » en 1986..En 1996, une conceptualisation du langage dédié est mise en œuvre.. Les auteurs y discutent notamment sur le point de vue à adopter entre l'approche « domaine comme un monde réel » () ou l'approche du « domaine comme un ensemble de systèmes » () pour modéliser un langage dédié..
Constructions d'un langage dédié La réalisation de langages dédiés diffère de manière fondamentale de celle des langages de programmation traditionnels.. Le processus de développement peut s’avérer très complexe. Il requiert une expertise du domaine concerné, mais aussi une connaissance dans le domaine de la conception des langages de programmation..
Construction En pratique, le développement d’un langage dédié n’est pas un simple processus séquentiel mais un processus itératif.. Pour que le langage soit le plus proche possible du domaine ciblé, la construction nécessite soit une double compétence (du domaine d'application et de la programmation de langage), soit une collaboration étroite entre l'équipe de programmeurs et les experts du domaine traité.
et Anthony M Sloane proposent des patterns de conception de langages dédiés. Caractéristique de construction d'un langage dédié.
La méthode de caractérisation d'un langage dédié précise qu'il doit être décrit selon deux syntaxes : La syntaxe abstraite (Abstract Syntax). La syntaxe concrète (Concrete Syntax).