Langage dédié

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 :

  • le langage dédié de polices d'assurances[1];
  • le langage dédié du code civil[2].

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 lors identifier les différentes phases de développement ainsi suivantes[25] :

Décision 
Réponse à la question Dé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

  1. Liste non exhaustive.

Références

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

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Langage dédié de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Langage Dédié — En informatique on distingue deux types de langages : les langages généralistes (General Purpose Languages) comme PL/1, Ada ou C++, et les langages dédiés (Domain Specific Languages ou DSL) comme les langages de formules dans un tableur. Un… …   Wikipédia en Français

  • Langage dedie — Langage dédié En informatique on distingue deux types de langages : les langages généralistes (General Purpose Languages) comme PL/1, Ada ou C++, et les langages dédiés (Domain Specific Languages ou DSL) comme les langages de formules dans… …   Wikipédia en Français

  • Langage XML — Extensible Markup Language Extensible Markup Language Extension de fichier .xml Type MIME application/xml, text/xml Développé par World Wide Web Consortium Type de format …   Wikipédia en Français

  • Langage de balisage extensible — Extensible Markup Language Extensible Markup Language Extension de fichier .xml Type MIME application/xml, text/xml Développé par World Wide Web Consortium Type de format …   Wikipédia en Français

  • Langage-objets — Programmation orientée objet La programmation orientée objet (POO) ou programmation par objet, est un paradigme de programmation informatique qui consiste en la définition et l assemblage de briques logicielles appelées objets ; un objet… …   Wikipédia en Français

  • Langage G — LabVIEW LabVIEW Développeur National Instruments Dernière vers …   Wikipédia en Français

  • Langage R — R (logiciel) Pour les articles homonymes, voir R. R (logiciel) Développeur …   Wikipédia en Français

  • Langage BASIC — BASIC Pour les articles homonymes, voir Basic. {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres   Sigles de trois lettres …   Wikipédia en Français

  • Langage de rêve — Dans une monographie célèbre de 1906, le psychiatre allemand Emil Kraepelin a étudié les troubles du langage intérieur dans le rêve. Parmi ces troubles se trouvent des paraphasies (p.e. néologismes), des troubles du discours (p.e. agrammatisme)… …   Wikipédia en Français

  • Langage fonctionnel — Programmation fonctionnelle La programmation fonctionnelle est un paradigme de programmation qui considère le calcul en tant qu évaluation de fonctions mathématiques et rejette le changement d état et la mutation des données. Elle souligne l… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”