Un langage spécifique au domaine (DSL) est un langage destiné à être utilisé dans le contexte d’un domaine particulier. Un domaine pourrait être un contexte commercial (par exemple, la banque, l’assurance, etc.) ou un contexte d’application (par exemple, une application web, une base de données, etc.) Par opposition, un langage polyvalent (LSG) peut être utilisé pour un large éventail de problèmes commerciaux et d’applications.
Un LSG ne cherche pas à plaire à tous. Au lieu de cela, il est créé pour une sphère limitée d’applicabilité et d’utilisation, mais il est suffisamment puissant pour représenter et traiter les problèmes et les solutions de cette sphère. Un bon exemple de DSL est le HTML. C’est un langage pour le domaine des applications web. Il ne peut pas être utilisé pour, disons, le calcul de chiffres, mais il est clair que le HTML est largement utilisé sur le web.
Un créateur de GPL ne sait pas où le langage pourrait être utilisé ou les problèmes que l’utilisateur a l’intention de résoudre avec lui. Ainsi, une GPL est créée avec des constructions génériques qui sont potentiellement utilisables pour tout problème, solution, entreprise ou besoin. Java est une GPL, car il est utilisé sur les ordinateurs de bureau et les appareils mobiles, intégré dans le web à travers la banque, la finance, l’assurance, la fabrication, etc. et plus encore.
Classification des DSL
Dans le monde des DSL, il existe deux types de langages :
- Langage spécifique au domaine (DSL) : Le langage dans lequel un DSL est écrit ou présenté
- Langage hôte : Le langage dans lequel un DSL est exécuté ou traité
Un DSL écrit dans un langage distinct et traité par un autre langage hôte est appelé un DSL externe.
Voici un DSL en SQL qui peut être traité dans un langage hôte :
SELECT account
FROM accounts
WHERE account = '123' AND branch = 'abc' AND amount >= 1000
D’ailleurs, un DSL pourrait être écrit en anglais avec un vocabulaire et une forme définis qui peuvent être traités dans un autre langage hôte en utilisant un générateur d’analyseur comme ANTLR :
if smokes then increase premium by 10%
Si le DSL et le langage hôte sont les mêmes, alors le type de DSL est interne, où le DSL est écrit dans la sémantique du langage et traité par celui-ci. On parle également de DSL embarqués. Voici deux exemples.
- Un DSL Bash qui peut être exécuté dans un moteur Bash :
if today_is_christmas; then apply_christmas_discount; fi
C’est du Bash valide qui est écrit comme l’anglais.
- Un DSL écrit dans une GPL comme Java:
orderValue = orderValue
.applyFestivalDiscount()
.applyCustomerLoyalityDiscount()
.applyCustomerAgeDiscount();Cela utilise un style fluide et est lisible comme l’anglais.
Oui, les frontières entre DSL et GPL sont parfois floues.
Exemples de DSL
Certains langages utilisés pour les DSL incluent:
- Web : HTML
- Shell : sh, Bash, CSH et autres pour *nix ; MS-DOS, Windows Terminal, PowerShell pour Windows
- Langages de balisage : XML
- Modélisation : UML
- Gestion des données : SQL et ses variantes
- Règles métier : Drools
- Matériel : Verilog, VHD
- Outils de construction : Maven, Gradle
- Calcul numérique et simulation : MATLAB (commercial), GNU Octave, Scilab
- Divers types d’analyseurs et de générateurs : Lex, YACC, GNU Bison, ANTLR
Pourquoi un DSL ?
Le but d’un DSL est de capturer ou de documenter les exigences et le comportement d’un domaine. L’utilisation d’un DSL pourrait être encore plus étroite pour des aspects particuliers du domaine (par exemple, le commerce des matières premières dans la finance). Les DSL rapprochent les équipes commerciales et techniques. Cela ne signifie pas qu’un DSL est uniquement destiné à un usage professionnel. Par exemple, les concepteurs et les développeurs peuvent utiliser un DSL pour représenter ou concevoir une application.
Un DSL peut également être utilisé pour générer du code source pour un domaine ou un problème adressé. Cependant, la génération de code à partir d’un DSL n’est pas considérée comme obligatoire, car son objectif principal est la connaissance du domaine. Cependant, lorsqu’elle est utilisée, la génération de code est un avantage sérieux dans l’ingénierie de domaine.
Pour et contre les DSL
Du côté positif, les DSL sont puissants pour capturer les attributs d’un domaine. De plus, comme les DSL sont petits, ils sont faciles à apprendre et à utiliser. Enfin, un DSL offre un langage pour les experts du domaine et entre les experts du domaine et les développeurs.
Du côté négatif, un DSL est étroitement utilisé dans le domaine et le but prévus. De plus, un DSL a une courbe d’apprentissage, bien qu’elle puisse ne pas être très élevée. En outre, bien qu’il puisse y avoir des avantages à utiliser des outils pour la capture de DSL, ils ne sont pas essentiels, et le développement ou la configuration de ces outils est un effort supplémentaire. Enfin, les créateurs de DSL ont besoin de connaissances du domaine ainsi que de connaissances en développement de langage, et les individus ont rarement les deux.
Options de logiciels DSL
Les options de logiciels DSL open source comprennent :
- Xtext : Xtext permet le développement de DSL et est intégré à Eclipse. Il rend possible la génération de code et a été utilisé par plusieurs produits open source et commerciaux pour fournir des fonctions spécifiques. MADS (Multipurpose Agricultural Data System) est une idée intéressante basée sur Xtext pour la « modélisation et l’analyse des activités agricoles » (cependant, le projet semble ne plus être actif).
- JetBrains MPS : JetBrains MPS est un environnement de développement intégré (IDE) pour créer des DSL. Il se qualifie lui-même d’éditeur projectionnel qui stocke un document comme sa structure arborescente abstraite sous-jacente. (Ce concept est également utilisé par des programmes tels que Microsoft Word.) JetBrains MPS prend également en charge la génération de code vers Java, C, JavaScript ou XML.
Bonnes pratiques DSL
Vous voulez utiliser un DSL ? Voici quelques conseils:
- Les DSL ne sont pas des GPL. Essayez d’aborder des gammes limitées de problèmes dans le domaine définitif.
- Vous n’avez pas besoin de définir votre propre DSL. Ce serait fastidieux. Recherchez un DSL existant qui résout votre besoin sur des sites comme DSLFIN, qui répertorie les DSL pour le domaine de la finance. Si vous ne parvenez pas à trouver un DSL approprié, vous pourriez définir le vôtre.
- Il est préférable de faire des DSL « comme l’anglais » plutôt que trop techniques.
- La génération de code à partir d’un DSL n’est pas obligatoire, mais elle offre des avantages significatifs et productifs lorsqu’elle est faite.
- Les DSL sont appelés des langages mais, contrairement aux GPL, ils ne doivent pas nécessairement être exécutables. Être exécutable n’est pas l’intention d’un DSL.
- Les DSL peuvent être écrits avec des traitements de texte. Cependant, l’utilisation d’un éditeur de DSL facilite les vérifications de la syntaxe et de la sémantique.