I would like to view this page in
Un langage DSL est un langage de programmation avec un niveau d'abstraction supérieur, optimisé pour une catégorie spécifique de problèmes. Un langage DSL utilise les concepts et les règles du secteur ou du domaine.
Un langage DSL est généralement moins complexe qu'un langage générique comme Java, C ou Ruby. Dans la plupart des cas, les DSL sont élaborés en étroite collaboration avec les experts du domaine pour lequel le DSL est conçu. Dans de nombreux cas, les langages DSL sont destinés à être utilisés non par des développeurs de logiciels, mais par des non-programmeurs qui maîtrisent le domaine auquel s'adresse le DSL.
L'utilisation de langages DSL peut apporter une multitude d'avantages. L'avantage le plus évident de l'utilisation des DSL est que, une fois que vous avez un langage et un moteur de transformation, votre travail dans le domaine particulier du développement logiciel couvert par le DSL devient beaucoup plus efficace, simplement parce que vous n'avez pas à effectuer manuellement des tâches fastidieuses. Si vous générez du code source à partir de votre programme DSL (au lieu de l'interpréter), vous pouvez utiliser des abstractions spécifiques au domaine sans ajouter au temps d'exécution, car le générateur, tout comme un compilateur, peut supprimer les abstractions et générer du code efficace.
Si vous avez une façon d'exprimer les préoccupations du domaine dans un langage qui est étroitement lié au domaine, votre pensée devient plus claire, parce que le code que vous écrivez n'est pas encombré de détails d'implémentation. En d'autres termes, l'utilisation de langages DSL vous permet de séparer l'essentiel de la complexité fortuite.
Les langages DSL, dont le domaine, les abstractions et les notations sont étroitement liés à la façon dont s'expriment les experts du domaine (c.-à-d. les non-programmeurs), permettent une très bonne intégration entre ces experts et les techos.
L'utilisation de langages DSL et d'un moteur d'exécution permet d'avoir une logique applicative exprimée dans le code DSL indépendante de la plateforme cible. L'utilisation de langages DSL permet d'augmenter la qualité du produit créé : diminution des bogues, amélioration de la conformité architecturale, facilitation de la maintenance. Ces avantages résultent de la suppression des degrés de liberté (inutiles), de la duplication du code et de l'automatisation du travail répétitif.
Il existe deux façons fondamentalement différentes d'intégrer le code traditionnel et le code DSL. La première conserve le code DSL et le code courant dans des fichiers séparés. Le code DSL est ensuite transformé en code de langage de programmation par un générateur de code automatisé, ou bien le programme charge le code spécifique au domaine et l'exécute. Cette première approche, avec un langage d'usage général (GPL) et un code DSL séparés, est appelée DSL externe. Pensez à SQL comme exemple de DSL externe.
Une autre approche consiste à combiner code DSL et code d'usage général dans le même fichier de programme, ce qui permet une intégration beaucoup plus étroite entre eux. Le DSL réutilise la grammaire et l'analyseur du GPL et exploite les options d'extension disponibles du langage hôte. Le terme DSL interne est utilisé pour décrire ce type de scénarios.
Il convient de mentionner que certains GPL sont plus adaptés à ce type d'extension que d'autres.
Les deux approches peuvent être intéressantes, en fonction des circonstances, et MPS les prend toutes deux en charge.
La structure et la syntaxe du langage DSL étaient définies par l'écriture de code dans le langage auquel le code DSL devait être intégré. En général, les IDE ne connaissaient pas le langage DSL et ne fournissaient donc pas de prise en charge (saisie automatique de code, vérification personnalisée des erreurs, etc.). Cependant, avec MPS, vous utilisez le framework MPS avec ses DSL spécialisés en développement de langage pour définir les extensions de langage. L'IDE en a ainsi connaissance, et le système peut fournir une prise en charge complète de l'IDE pour les langages DSL intégrés.
Le terme de programmation orientée langage a été inventé par Sergey Dmitriev, fondateur et premier PDG de JetBrains, et « père » de MPS dans son article de 2004 intitulé Language-Oriented Programming: The Next Programming Paradigm (« Programmation orientée langage : le prochain paradigme de la programmation »). D’autres personnes ont proposé des approches assez proches, généralement sous d’autres noms. Charles Simonyi et son approche de programmation intentionnelle en sont un bon exemple, et Martin Fowler a décrit l’approche dans son article de 2005 intitulé Language Workbenches: The Killer-App for Domain Specific Languages ? (« Établis de langage : l’application incontournable pour les langages spécialisés d’un domaine ? »).
L'idée centrale est que nous n'utilisons pas un seul langage lors du développement de logiciels, mais plutôt les langages qui conviennent le mieux à chacune des tâches. Contrairement à la programmation polyglotte qui, en surface, préconise une approche similaire, la programmation orientée langage encourage explicitement les développeurs à construire leurs propres langages DSL ou à étendre les langages existants avec des concepts spécifiques au domaine dans le cadre de cette approche. Pour ce faire, les ateliers de langage tels que MPS sont un élément important de l'approche orientée langage.
Avec MPS, vous pouvez définir un éditeur personnalisé pour n'importe quel nouveau langage afin de simplifier l'utilisation de langages DSL. Même les experts du domaine, qui ne sont pas familiers avec la programmation traditionnelle, peuvent travailler facilement dans MPS, avec des langages spécifiques à leur domaine, conçus avec la terminologie adaptée.
Dans la vidéo suivante, vous pouvez voir un exemple de la façon dont une réponse vocale interactive a été réalisée avec MPS. Ce langage DSL s'adresse à des personnes au profil non technique, de sorte que l'expérience utilisateur est adaptée.