Article de reference

Langage spécifique au domaine

Un langage dédié ( DSL ) est un langage informatique spécialisé dans un domaine d'application précis . Il se distingue des langages généralistes (GPL), largement applicables à d...

Un langage dédié ( DSL ) est un langage informatique spécialisé dans un domaine d'application précis . Il se distingue des langages généralistes (GPL), largement applicables à divers domaines. Il existe une grande variété de DSL, allant des langages couramment utilisés pour des domaines communs, comme HTML pour les pages web, aux langages utilisés par un ou quelques logiciels seulement, comme le softcode MUSH . Les DSL peuvent être subdivisés selon leur type et comprennent les langages de balisage dédiés, les langages de modélisation dédiés (ou plus généralement, les langages de spécification ) et les langages de programmation dédiés. Les langages informatiques spécialisés ont toujours existé, mais l'expression « langage dédié » s'est popularisée avec l'essor de la modélisation dédiée . Les DSL les plus simples, notamment ceux utilisés par une seule application, sont parfois appelés, de manière informelle, mini-langages .

La frontière entre langages généralistes et langages de domaine n'est pas toujours nette. Un langage peut posséder des fonctionnalités spécifiques à un domaine donné, tout en étant applicable plus largement, ou inversement, être en principe largement applicable, mais en pratique principalement utilisé dans un domaine spécifique. Par exemple, Perl a été initialement développé comme langage de traitement de texte et d'interface, pour le même domaine qu'AWK et les scripts shell , mais a ensuite été principalement utilisé comme langage de programmation généraliste. À l'inverse, PostScript est un langage Turing-complet et peut en principe être utilisé pour n'importe quelle tâche, mais est en pratique principalement utilisé comme langage de description de pages .

Utiliser

La conception et l'utilisation de DSL appropriés constituent un élément clé de l'ingénierie de domaine , en utilisant un langage adapté au domaine concerné. Cela peut consister à utiliser un DSL ou une licence GPL existante, ou à développer un nouveau DSL. La programmation orientée langage considère la création de langages spécialisés pour exprimer les problèmes comme une étape standard du processus de résolution de problèmes. Créer un langage dédié à un domaine (avec un logiciel pour le prendre en charge), plutôt que de réutiliser un langage existant, peut s'avérer judicieux si ce langage permet d'exprimer un type de problème ou de solution spécifique plus clairement qu'un langage existant et si ce type de problème se rencontre fréquemment. Concrètement, un DSL peut être spécialisé pour un domaine problématique spécifique, une technique de représentation de problème spécifique, une technique de résolution spécifique ou d'autres aspects d'un domaine.

Aperçu

Un langage dédié est créé spécifiquement pour résoudre des problèmes dans un domaine particulier et n'est pas conçu pour résoudre des problèmes en dehors de ce domaine (bien que cela soit techniquement possible). À l'inverse, les langages généralistes sont créés pour résoudre des problèmes dans de nombreux domaines. Le domaine peut également correspondre à un secteur d'activité. Voici quelques exemples de secteurs d'activité :

  • polices d'assurance-vie (développées en interne par une grande entreprise d'assurance)
  • simulation de combat
  • calcul de salaire
  • facturation

Un langage dédié se situe entre un langage de programmation très restreint et un langage de script , et est souvent utilisé de manière analogue à une bibliothèque de programmation . La frontière entre ces concepts est assez floue, tout comme celle qui existe entre les langages de script et les langages généralistes.

En matière de conception et de mise en œuvre

Les langages de domaine sont des langages (ou plus souvent, des syntaxes ou grammaires déclarées) conçus et implémentés avec des objectifs très précis. Un langage de domaine peut être un langage de diagramme visuel, comme ceux créés par le Generic Eclipse Modeling System , une abstraction de programmation, comme l' Eclipse Modeling Framework , ou un langage textuel. Par exemple, l'utilitaire en ligne de commande grep possède une syntaxe d'expressions régulières permettant de rechercher des motifs dans des lignes de texte. L' utilitaire sed définit une syntaxe pour la recherche et le remplacement d'expressions régulières. Ces langages, souvent très simples, peuvent être utilisés conjointement dans un shell pour réaliser des tâches de programmation plus complexes.

La frontière entre les langages de domaine et les langages de script est parfois floue, mais les langages de domaine sont souvent dépourvus de fonctions de bas niveau pour l'accès au système de fichiers , le contrôle interprocessus et d'autres fonctions caractéristiques des langages de programmation complets, qu'ils soient de script ou non. De nombreux langages de domaine ne sont pas compilés en bytecode ou en code exécutable, mais en différents types d'objets multimédias : GraphViz exporte en PostScript , GIF , JPEG , etc., tandis que Csound est compilé en fichiers audio et qu'un langage de domaine de lancer de rayons comme POV-Ray est compilé en fichiers graphiques.

Langages de définition de données

Un langage de définition de données comme SQL présente un cas intéressant : il peut être considéré comme un langage spécifique à un domaine car il est spécifique à un domaine spécifique (dans le cas de SQL, l’accès et la gestion des bases de données relationnelles), et est souvent appelé depuis une autre application, mais SQL possède plus de mots-clés et de fonctions que de nombreux langages de script, et est souvent considéré comme un langage complet, en partie à cause de la prévalence de la manipulation de bases de données en programmation et du niveau de maîtrise nécessaire pour être expert dans ce langage.

Pour brouiller encore davantage cette frontière, de nombreux langages spécifiques à un domaine possèdent des API exposées, et peuvent être accessibles depuis d'autres langages de programmation sans interrompre le flux d'exécution ni appeler un processus séparé, et peuvent ainsi fonctionner comme des bibliothèques de programmation.

Outils de programmation

Certains langages dédiés à un domaine s'enrichissent au fil du temps d'outils de programmation complets, ce qui complexifie la question de leur nature spécifique ou non. Le langage fonctionnel XSLT (Extensible Stylesheet Language Transformation ), conçu initialement pour transformer un graphe XML en un autre, en est un bon exemple. Depuis sa création, il a été étendu pour permettre (notamment dans sa version 2.0) diverses interactions avec le système de fichiers, la manipulation de chaînes de caractères et de dates, ainsi que le typage des données.

En ingénierie dirigée par les modèles , on trouve de nombreux exemples de langages spécifiques à un domaine, comme OCL ( Object Constraint Language ), un langage permettant d'enrichir les modèles avec des assertions, ou QVT (Query/View/Transformation ), un langage de transformation spécifique à un domaine. En revanche, des langages comme UML ( Unified Modeling Language ) sont généralement des langages de modélisation généralistes.

En résumé, une analogie est utile : un langage très restreint est comme un couteau, qui peut servir de mille façons, de la préparation des aliments à l’autodéfense. Un langage dédié est comme une perceuse électrique : un outil puissant aux multiples usages, mais dans un contexte précis, à savoir percer des trous. Un langage généraliste est un établi complet, doté de divers outils pour réaliser diverses tâches. Les langages dédiés sont destinés aux programmeurs qui, face à leur établi actuel, constatent qu’ils ont besoin d’une meilleure perceuse et trouvent dans un langage dédié la solution idéale.

Sujets linguistiques spécifiques à un domaine

Langues spécifiques au domaine externes et intégrées

Les DSL implémentés via un interpréteur ou un compilateur indépendant sont appelés langages de domaine externes . TeX et AWK en sont des exemples bien connus. Une autre catégorie, appelée langages de domaine intégrés (ou internes), est généralement implémentée au sein d'un langage hôte sous forme de bibliothèque et tend à être limitée à la syntaxe de ce langage, bien que cela dépende des capacités de ce dernier.

Modèles d'utilisation

Il existe plusieurs modèles d'utilisation pour les langages spécifiques à un domaine :

GML est un langage dédié utilisé par GameMaker Studio , conçu pour faciliter l'apprentissage des fondamentaux de la programmation aux programmeurs débutants. Il combine les caractéristiques de plusieurs langages, dont Delphi , C++ et BASIC . La plupart des fonctions GML, une fois compilées, appellent des fonctions d'exécution écrites dans le langage spécifique de la plateforme cible ; leur implémentation finale reste donc invisible pour l'utilisateur. L'objectif principal de ce langage est de rendre le développement de jeux plus accessible. L'environnement d'exécution de GameMaker, qui gère la boucle de jeu principale et l'implémentation des fonctions, permet de créer un jeu simple avec seulement quelques lignes de code au lieu de milliers.

Langage de balisage ColdFusion

Le langage de script associé à ColdFusion est un autre exemple de langage dédié aux sites web axés sur les données. Il permet d'intégrer différents langages et services tels que Java, .NET , C++, les SMS, la messagerie électronique , les serveurs de messagerie, HTTP, FTP, Exchange, les services d'annuaire et les systèmes de fichiers , afin de les utiliser au sein des sites web.

Le langage de balisage ColdFusion (CFML) comprend un ensemble de balises utilisables dans les pages ColdFusion pour interagir avec les sources de données, manipuler les données et afficher les résultats. La syntaxe des balises CFML est similaire à celle des éléments HTML.

FilterMeister

FilterMeister est un environnement de programmation, doté d'un langage basé sur le C, conçu spécifiquement pour la création de modules d'extension de traitement d'images compatibles avec Photoshop . FilterMeister fonctionne lui-même comme un module d'extension Photoshop et peut charger et exécuter des scripts, ou les compiler et les exporter en tant que modules d'extension indépendants. Bien que le langage FilterMeister reproduise une part importante du langage C et de sa bibliothèque de fonctions, il ne contient que les fonctionnalités utilisables dans le contexte des modules d'extension Photoshop et ajoute des fonctionnalités spécifiques à ce domaine.

Modèles MediaWiki

La fonctionnalité Modèle de MediaWiki est un langage intégré spécifique à un domaine dont l'objectif fondamental est de prendre en charge la création de modèles de page et la transclusion (inclusion par référence) de pages MediaWiki dans d'autres pages MediaWiki.

Le génie logiciel utilise

Les langages dédiés suscitent un vif intérêt pour améliorer la productivité et la qualité du génie logiciel . Ils pourraient constituer un ensemble d'outils robustes pour un développement logiciel efficace. Ces outils commencent d'ailleurs à être intégrés au développement de systèmes logiciels critiques.

Le Software Cost Reduction Toolkit en est un exemple. Cet ensemble d'outils comprend un éditeur de spécifications pour créer un cahier des charges , un navigateur de graphes de dépendances pour afficher les dépendances entre les variables, un les formules bien formées du cahier des charges, un vérificateur de modèles et un démonstrateur de théorèmes pour vérifier la conformité des propriétés du programme au cahier des charges, ainsi qu'un générateur d'invariants qui construit automatiquement les invariants à partir des exigences.

Une évolution plus récente est la programmation orientée langage , une méthodologie d'ingénierie logicielle intégrée basée principalement sur la création, l'optimisation et l'utilisation de langages spécifiques au domaine.

Métacompilateurs

. doi : 10.1145/1118890.1118892 . S2CID 207158373 .
  • Spinellis, Diomidis (2001). « Modèles de conception remarquables pour les langages spécifiques à un domaine ». Journal of Systems and Software . 56 (1) : 91– 99. doi : 10.1016/S0164-1212(00)00089-3 .
  • Parr, Terence (2007). L'ouvrage de référence ANTLR : Création de langages spécifiques à un domaine . Pragmatic Bookshelf. ISBN978-0-9787392-5-6.
  • Larus, James (2009). « Dépenser le dividende de Moore ». Communications of the ACM . 52 (5) : 62–69 . doi : 10.1145/1506409.1506425 . ISSN 0001-0782 . S2CID 2803479 .
  • Werner Schuster (15 juin 2007). « Qu'est-ce qu'un DSL Ruby et qu'est-ce qui n'en est pas un ? » . C4Media .
  • Fowler, Martin (2011). Langages spécifiques à un domaine . Addison-Wesley. ISBN978-0-321-71294-3.
  • Plus d articles de Worldlex Wiki

    Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

    Explorer l index