135 votes

Qu'est-ce qu'un langage spécifique à un domaine ? Quelqu'un l'utilise-t-il ? Et de quelle manière ?

Je pense que je suis à la recherche d'une sorte d'introduction et je cherche à savoir si quelqu'un l'a utilisé. Y a-t-il des avantages particuliers à l'utiliser ?

Wikipedia :

langage spécifique au domaine (DSL) est un langage de programmation ou un langage de spécification dédié à un domaine de problème particulier, à une technique de représentation de problème particulière et/ou à une technique de solution particulière.

Quelqu'un peut-il donner des exemples précis de la façon dont vous l'avez mis en œuvre ou de la manière dont il peut être utile dans un scénario donné ?

128voto

Charlie Martin Points 62306

Un langage spécifique à un domaine est un langage écrit pour traiter un domaine spécifique ou un ensemble de préoccupations. Il en existe beaucoup, comme make, ant et rake pour décrire la construction de logiciels, ou lexx et yacc pour la construction de langages. Ces dernières années, ils sont devenus populaires car certains éléments se sont combinés pour les rendre plus faciles à construire. La popularité croissante de Ruby, qui dispose de plusieurs fonctionnalités facilitant la construction de nouveaux DSL, est l'une des principales raisons de cette popularité.

Martin Fowler est un fervent partisan de cette idée, comme en témoignent les exemples suivants aquí .

86voto

rgz Points 143

On peut considérer les DSL comme des arguments complexes pour des fonctions écrites dans un langage de programmation plus général. Le véritable langage de programmation analyse le code du DSL et en fait quelque chose. En général, le code du DSL ne se concentre que sur la fonction ce que vous voulez faire, et le système dans son ensemble se charge de l'exécution. comment .

Les exemples de DSL incluent tous les langages de requête (SQL, XPath, ...), tous les langages de template (Django, Smarty, ...), les scripts du shell, en particulier des choses comme twill, un navigateur web piloté par des commandes (principalement utilisé pour les tests automatisés), les langages de stockage et d'échange de données (XML, YAML, ...), et les langages de documents comme LaTex, HTML ou CSS.

Certains langages à la syntaxe très souple, comme TCL et Lisp, intègrent leur DSL directement dans le langage... lorsque c'est possible. La majorité des langages utilisent des chaînes de caractères, généralement chargées à partir de fichiers externes.

Y a-t-il des avantages particuliers à les utiliser ? Les utiliser dans le but pour lequel ils ont été conçus est très avantageux, à tel point que vous les utiliserez sans le savoir, tout comme vous avez utilisé (je suppose) SQL ou HTML sans penser qu'il s'agissait de DSL.

J'ose dire qu'il existe suffisamment de DSL pour tout type d'application dont vous pourriez avoir besoin ; vous n'avez certainement pas besoin d'apprendre à écrire votre propre DSL.

13voto

rndmcnlly Points 984

(en abordant le cœur de la question)

Je crois que la première fois que j'ai vu DSL quelque part et sa définition en tant que "langage spécifique à un domaine" Je pensais également qu'il s'agissait d'une langue particulière et concrète dont je n'avais pas entendu parler - mais non, c'est un terme général pour les langages qui sont adaptés à un domaine d'application particulier.

Ironiquement, si vous veniez d'entendre parler de TCL en tant que "langage de commande d'outils", on pourrait penser, comme pour les DSL, qu'il y aurait beaucoup de TCL pour divers outils - mais non, c'est le nom spécifique d'un langage de script particulier.

12voto

Clif Points 111

Tout est un DSL...

Assembleur : MOV R1 à R2
Compilateurs : Instructions d'affectation -- A = A + 1, conditionnelles -- IF (TRUE) ..., branche -- RETURN
HTML : ... décrire une structure imbriquée
TCP/IP : décrire les adresses de départ et d'arrivée
PDF : décrire l'emplacement du texte/de l'image sur le papier
Polices : décrire les caractères

Tout langage utilisé pour décrire un processus spécifique est un DSL. Malheureusement, il n'y a pas assez de langages spécifiques à un domaine pour décrire même nos processus les plus élémentaires, de sorte que nous utilisons les quelques langages dont nous disposons pour décrire tout ce que nous faisons. "Pour zipper tous les fichiers html de mon site web, il faut 300 lignes de 3 ou 4 langages différents.

Pour construire un DSL, déterminez le nombre minimum de caractères nécessaires pour décrire un processus dont vous pouvez vous souvenir et qui ne nécessite pas de documentation. N'oubliez pas que la rapidité et la facilité d'utilisation sont les principaux critères de conception. Je préfère le langage naturel comme syntaxe dans la plupart des cas, "Payer les employés le premier du mois", mais un domaine spécifique est justement un domaine spécifique, vous déterminez la syntaxe qui correspond le mieux au problème.

Je m'abstiendrais d'utiliser d'autres solutions qui pourraient être pratiques mais qui ne correspondent pas au problème, comme le HTML qui a été utilisé pour définir les données (XML). CSV est très utile, il répond à la plupart des problèmes. JSON n'est pas adapté à la facilité d'utilisation, c'est une surenchère qui ajoute des complications inutiles là où CSV fonctionne pour la plupart des problèmes. Nous utilisons beaucoup EXCEL pour le DSL, il fonctionne très bien pour décrire les petits problèmes, moins de 65K à 1M lignes, comme les structures arborescentes ou les menus, la colonne A est le niveau, les autres colonnes sont les icônes, les couleurs, les étiquettes et autres (EXCEL est un CSV éditable).

J'ai constaté que le HTML ne résolvait pas vraiment le problème de la mise en page, alors je l'ai supprimé et j'ai défini un DSL qui convient. J'ai défini 6 régions sur la page, HEADER, BODY, FOOTER, LEFT/RIGHT MARGINS, et LEFT/RIGHT FULL MARGINS. Je pourrais ensuite demander au générateur de pages d'ajouter une BARRE DE TITRE, une BARRE D'ÉTAT, des MENUS, des TABLEAUX, des FORMULAIRES,..., à des cellules spécifiques. Chacune de ces cellules peut ensuite être divisée en lignes et en colonnes, selon la profondeur souhaitée. La mise en page ne prend que quelques secondes, quel que soit le style.

BODY contient un tableau de mes employés
HEADER contient un titre de barre de titre "Hello World" avec login à Collins Software

Un DSL de menu ne correspond pas au DSL de mise en page, c'est pourquoi j'ai construit un DSL unique pour les menus.

Ressource Mon menu principal
*define:menu,m,Level,Label,Icon,Action ;
m,0,fichier ;
m,1,open,open.gif,Boîte de dialogue Ouvrir un fichier ;

Chaque problème est unique, l'ordinateur peut utiliser n'importe quel format, c'est pour l'homme que les DSL sont conçus, il faut donc les rendre compréhensibles par l'homme, quelque chose qu'il peut taper, et faire en sorte que le langage soit composé de vrais mots, car ce sont des personnes, des lieux et des choses réels que nous décrivons.

11voto

Michael Damatov Points 5453

Je pense qu'il s'agit d'un langage adapté à la résolution de problèmes dans un domaine spécifique. Il pourrait s'agir d'un langage de traitement des règles ou d'un langage de description des services.

Le contraire d'un langage spécifique à un domaine (DSL) est un langage spécifique à un domaine (DSL). langage polyvalent .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X