- Langage dédié
-
Un langage dédié (Domain specific language) est langage dont l'utilisation est dédiée à un domaine d'application.
Sommaire
Tour d'horizon technologique
Analogie
Il existe des langages dédiés dans d'autres domaines que l'informatique. Les plus connus sont notamment :
Nous pouvons aussi retrouver des dictionnaires dédiés au langage de la médecine, la cuisine, la philosophie etc.[Note 1]
Définitions
Un langage dédié à un domaine (en anglais « Domain-specific language » ou DSL) fournit une notation orientée sur son 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[3].
Selon Gilles Muller, un langage dédié est un langage de programmation spécifique à une famille de problèmes données appelé "domaine". Il permet au programmeur de s'assurer de construire un code approprié et que ce code réponde aux exigences spécifiques à ce domaine[4].
Il existe deux deux types de langages dédiés, les langages dédiés internes (aussi appelés langages enchâssés, ou langages embarqués) sont destinés à être utilisés au sein de programmes sources exprimés, par ailleurs, dans un autre langage, alors qualifié de langage hôte. Les langages dédiés externes ne sont pas destinés à l'expression supplémentaire au sein d'un autre langage. Les programmes sources qu'ils permettent d'exprimer sont autonomes et indépendant de tout autre langage de programmation[5] [6] [7].
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[8]
Exemples de langages dédiés
Ruby (DSL interne)
Le Ruby est un langue dédié pour des applications Web [9]. D'après Martin Fowler, Ruby est mis en oeuvre comme un DSL interne car il a été developpé 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 le metaprogramming dans les langages dédiés interne[10].
SQL (DSL externe)
Le langage SQL (Structured query language) c'est-à-dire « langage d'interrogation structuré » est un langage dédié interne (enchassé) ou externe avec Embedded SQL [11], il est destiné à interroger ou à manipuler une base de données relationnelle. Il a été developpé chez IBM dans les années 1970 par Donald D. Chamberlin et Raymond F. Boyce. Ce langage était initialement nommé SEQUEL[12].
Fortran
Le fortran est initialement un langage dédié au calcul scientifique[13] crée en 1956 par une équipe dirigé par John Backus.
PHP
Le langage de scripts PHP est dédié à la production des pages HTML et à la gestion de bases de données en MySQL. Il a été crée en 1994 par Rasmus Lerdorf[14].
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[15].
Devil
Devil est un langage dédié à la définition d'interface, 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 d'exécution[16].
HTML
L'HTML (HyperText Markup Language) est un langage de balisage dédié à l'écriture de documents contenant des liens hypertextes.
Il a été crée par Tim Berners-Lee au début des années 1990; il en a fait l'annonce sur usenet dans Qualifiers on Hypertext links le 2 août 1991.
L'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.[17].
Usage et Application
Drivers
pilotage
Historique et Evolution
Historique
L'idée des langages spécifiques au domaine n'est pas récente, celle-ci serait presque aussi ancienne que les langages de programmation eux-mêmes. Le concept serait en effet apparu dans la seconde moitié des années 1950 avec APT (Advanced Packaging Tool), un langage visant la programmation de machines-outils[18]. Une difficulté de décrire l'histoire des DSL est qu'il n'y aurait pas unanimité quant à savoir ce qui fait d'un langage un DSL[réf. nécessaire].
Evolution
Enjeux économiques
L'utilisation de langages dédiés à un domaine implique différents enjeux économiques, comme son coût d'apprentissage et son coût de maintenance.
Un des enjeux économique concerne le temps d'apprentissage du langage. En effet, le coût d'apprentissage d'un langage généraliste peut être plus facilement amortie par la multiplication des domaines d'application. Dans le cas d'un langage dédié, le champs d'amortissement et plus réduit en fonction du domaine d'application. Il faut pouvoir mesurer le gain de productivité engendré par l'utilisation d'un langage dédié, et dans quelle mesure cela compense le temps d'apprentissage.
D'autre part, l'utilisation des langages dédiés dans l'enseignement se discute également. Certains propose l'apprentissage d'un langage dédié, dont les étudiants pourront se servir pour apprendre d'autres langages généralistes. D'autres proposent l'apprentissage de plusieurs langages généralistes pour ensuite être capable d'utiliser des langages dédiés en fonction du domaine d'application[19].
L'utilisation d'un langage dédié implique leur implémentation. Le coût initial de développement du langage est aussi à prendre en compte dans la mesure de l'impact économique. Paul Hudak (en) propose une approche permettant de limiter ce coût initial de développement. Cette approche est fondée sur les langages dédiés enchâssés (internes). Le principe est de profiter de l'infrastructure et des outils de l'environnement de développement d'un langage généraliste[20].
Un des enjeux économiques est la maintenabilité des programmes produits, ainsi que la possibilité d'évolution du langage. Dans les faits, le coût d'entretien d'un langage dédié est inférieur à celui d'un langage généraliste[21].
.
Constructions d'un langage DSL
La réalisation de langages dédiés (DSL) diffère de manière fondamentale de celle des langages de programmation traditionnels[22]. 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 programmations[23].
Construction
En pratique, le développement d’un langage dédié n’est un pas un simple processus séquentiel mais un processus itératif[24]. Pour que le langage soit le plus proche possible du domaine, la construction nécessite soit une double compétence (du domaine et de la programmation), soit une collaboration étroite entre l'équipe de programmeur et les experts du domaine traité.
Bien que les langages dédiés soient souvent différents les uns des autres en fonction des domaines, leur mise en œuvre suit une phase de développement commune. Nous[Qui ?] pouvons
dés lorsidentifier les différentes phases de développementainsisuivantes[25] :- Décision
Réponse à la questionDéfinir "pourquoi" mettre en place un langage dédié pour ce domaine est pertinent.- Analyse
- Analyser le domaine et les besoins spécifiques à ce langage, ainsi que les choix technologiques.
- Conception
- Définir l'approche technique de la mise en œuvre du langage.
- Implantation
- Programmer le langage en lui-même.
- Déploiement
- Mettre à disposition le langage dédié ainsi conçu.
Pattern
Les motifs récurrents de Spinellis (ou pattern) sont différentes techniques de construction d'un langage dédié. Cette approche diffère selon que l'on construise un langage interne ou externe. On peut retrouver 8 motifs récurrents utilisés pour la conception et la mise en œuvre des langages dédiés. Les design patterns, peuvent être de trois types différents[26] :
- Structurels qui s’intéressent aux intéractions entre le DSL et les autres langages (langages embarqués (piggyback), front-end).
- Comportementaux qui s’intéressent à la structure globale d’un système faisant intervenir un ou plusieurs DSLs (pipeline),
- Créationnels qui décrivent la conception du DSL (traitement lexical, représentation de structures de données, transformation source à source, extension de langage, spécialisation de langage).
Contrairement au patterns de Spinellis, les patterns de Sloane offrnte une approche de conseil pour les développeurs de langages dédiés et non une taxinomie des DSL. Chacune des phases de développements d’un DSL est présentée : de la décision (Pourquoi ?) à l’implémentation (Comment ?)[27].
Avantages et inconvénients
Les langages dédiés montrent un potentiel intéressant en termes de productivité, de réutilisabilité et de fiabilité.
(en) Juha-Pekka Tolvanen et Steven Kelly, « Integrating models with domain-specific modeling languages », dans SIGPLAN., 2008, p. 448 [texte intégral, lien DOI]
Avantages
Programmes DSL sont concis, auto-documenté dans une large mesure, et peuvent être réutilisés à des fins différentes[28].
Avantages des langages dédiés internes
L'utilisation de langages dédiés internes offre un avantage majeur: cette approche permet de profiter de l’infrastructure, des caractéristiques et des outils de développement du langage hôte. Ainsi, lors de la création du langage dédié, le développeur n’a pas à définir une grammaire complète, ni à créer les outils de support pour son langage dédié[29].
Avantage des langages dédiés externes
- Dans un DSL externe, la syntaxe du langage pourra représenter tout concept qu'il sera souhaitable d'utiliser avec le domaine ciblé, permettant d'exprimer pleinement ce dernier en utilisant les termes et symboles qui lui sont propres.
- Le langage n'étant pas lié à un langage hôte, il ne devrait pas souffrir de biais de mise en œuvre ou de compromis liés à l'environnement dans lequel il sera intégré, notamment au niveau de la syntaxe ou de la plateforme cible.
(en) Mark Strembeck et Uwe Zdun, « An approach for the systematic development of domain specifie languages », dans Software: Practice and Experience, vol. 39, août 2009, p. 15 (ISSN 2153-1292) [texte intégral, lien DOI]
Inconvénients
Au niveau de la performance, les programmes développés dans des DSL utilisent habituellement moins efficacement le temps processeur, étant à un plus bas niveau d'abstraction et souvent interprétés, par rapport aux langage généralistes disposant la plupart du temps de compilateurs optimisants ou de machines virtuelles très performantes, comme la machine HotSpot dans le cas de Java.
(en) Wikipedia, « Domain-specific language », dans SIGPLAN Not., 2011 [texte intégral]
Notes
- Liste non exhaustive.
Références
- site gouvernement du Quebec 2002, p. 1
- De Broglie 2004, p. 1-4
- Mernik 2005, p. 1
- Muller 2004, p. 1
- Hudak 1996, p. 2
- Strembeck 2009, p. 15
- Fowler 2009, p. 15
- Deursen 2000, p. 2
- Jon Bentley 1986, p. 711-721
- Martin Flower 2005
- Zachary Smith 2011, p. ?
- Chamberlin 1970, p. 1-2
- Backus 1965, p. 2-3
- Kaehms 2002, p. 5
- Muller 2004, p. 2
- Muller 2000, p. 4
- Apple, (en) http://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html Entre autre organismes: Opera, Mozilla, rejoints par
- MARJAN MERNIK 2005, p. 2
- Hill 2004, p. 2
- Hudak 2004, p. 2
- Mernik 2005, p. 2
- Spinellis 2001, p. 1
- Heering 2005, p. 1
- Mernik 2005, p. 1-4
- Mernik 2005, p. 2
- Spinellis 2001, p. 3-9
- Sloane 2005, p. 2
- premiere Avantage DSL 1994, p. 169-178
- Hudak 1996, p. 169-178
Bibliographie
- (en) Arie van Deursen, Paul Klint et Joost Visser, « Domain-specific languages: an annotated bibliography », dans SIGPLAN Not., vol. 35, no 6, juin 2000, p. 26-36 [texte intégral, lien DOI]
Articles scientifiques
- (en) Arie van Deursen, Paul Klint et Joost Visser, « Domain-specific languages », dans SIGPLAN., vol. 35, no 6, juin 2000, p. 26-36 [texte intégral, lien DOI]
- (en) Marjan Mernik, Jan Heering et Anthony :M. Sioane, « When and how to develop domain-specific languages », dans SIGPLAN Not., vol. 37, décembre 2005, p. 1 [texte intégral, lien DOI]
- J.W. Backus, FORTRAN Reference Manual for the IBM 704, 1965, 2 p. [présentation en ligne]
- (en) Donald D. Chamberlin et Raymond F. Boyce, « SEQUEL: A STRUCTURED ENGLISH QUERY LANGUAGE », dans Document, 1974, p. 1-2 [texte intégral]
- (en) Rasmus Lerdorf et Kevin Tatroe, « Programming PHP », dans livre, 2002, p. 11 [texte intégral]
- (en) Laurent Réveillère, Fabrice Mérillon, Charles Consel, Renaud Marlet et Gilles Muller, « The Devil Language », dans Document, 2000, p. 4 [texte intégral]
- (en) Julia L. Lawall, Anne-Françoise Le Meur et Gilles Muller, « On Designing a Target-Independent DSL for Safe OS Process-Scheduling Components », dans ., 2004, p. 2 [texte intégral, lien DOI]
- (en) Mark Strembeck et Uwe Zdun, « An approach for the systematic development of domain specifie languages », dans Software: Practice and Experience, vol. 39, août 2009, p. 15 (ISSN 2153-1292) [texte intégral, lien DOI]
- (en) Paul Hudak, « Building domain-specific embedded languages », dans ACM Computing Surveys (CSUR), vol. 28, no 4, 1996 [texte intégral, lien DOI]
- (en) Martin Fowler, « A pedagogical framework for domain-specifie languages », dans International Journal of Software Engineering and Knowledge Engineering, vol. 26, 2009, p. 13–14 (ISSN 0740-7459) [texte intégral]
- (en) Marjan Mernik, Jan Heering et Anthony :M. Sioane, « When and how to develop domain-specific languages », dans SIGPLAN Not., vol. 37, décembre 2005, p. 2 [texte intégral, lien DOI]
- (en) Diomidis Spinellis, « Notable Design Patterns for Domain-Specific Languages », dans Journal of Systems and Software, vol. 56, no 1, 2001, p. 98-99 [texte intégral, lien DOI]
- (en) Jon Bentley, Programming pearls: Little languages, vol. 29, 1986, 711-721 p. [présentation en ligne]
- (en) Martin Fowler, « Language Workbenches: The Killer-App for Domain Specific Languages? », dans SIGPLAN., juin 2005 [texte intégral]
- (en) Zachary Smith, « Development of tools to manage embedded SQL », dans SIGPLAN., 2011 [texte intégral, lien DOI]
- (en) John M. D. Hill et Kenneth L. Alford, « A Distributed Task Environment for Teaching Artificial Intelligence with Agents », dans journal SIGCSE, 2004 [texte intégral]
- (en) Marjan Mernik, Jan Heering et Anthony :M. Sioane, « When and how to develop domain-specific languages », dans SIGPLAN Not., vol. 37, décembre 2005, p. 2 [texte intégral, lien DOI]
- (en) Paul Hudak, « Building domain-specific embedded languages », dans ACM Computing Surveys, vol. 28, décembre 1996, p. 196-196 [texte intégral, lien DOI]
Sites webs de référence
- S’assurer contre les aléas… de la langue!, Site gouvernementale du Quebec, 2002
- La langue du Code civil, Gabriel de BROGLIE pour l'académie des sciences morales et politiques, 2004
Liens externes
- Site web officielle de Gilles Muller
Wikimedia Foundation. 2010.