Quelle est la langue spécifique au domaine? Quelqu'un l'utilise? Et de quelle manière?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

Question

Je suppose que je recherche une sorte d’intro et que je vois si quelqu'un l’a utilisée. Y at-il des avantages particuliers à l’utiliser?

Wikipedia:

  Le

langage spécifique au domaine (DSL) est un langage de programmation ou un langage de spécification dédié à un domaine de problème, 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 spécifiques de la manière dont vous l'avez mis en œuvre ou de son utilité dans un scénario donné?

Était-ce utile?

La solution

Une langue spécifique à un domaine est une langue écrite pour traiter un domaine spécifique ou un ensemble de problèmes. Il y en a beaucoup autour, comme make, ant, and rake pour décrire les versions de logiciels, ou lexx et yacc pour la construction du langage. Ces dernières années, ils sont devenus populaires car certaines choses se sont combinées pour les rendre plus faciles à construire. La popularité croissante de Ruby, qui présente plusieurs caractéristiques qui facilitent la création de nouvelles DSL, est l’un de ces facteurs.

Martin Fowler est un grand partisan de l’idée, comme ici .

Autres conseils

Vous pouvez considérer les DSL comme des arguments trop complexes pour des fonctions écrites dans un langage de programmation plus général. Le vrai langage de programmation analyse le code DSL et en fait quelque chose. Généralement, le code DSL se concentre uniquement sur ce que vous voulez faire, et le système plus large détermine la comment .

Les exemples de DSL incluent tous les langages de requête (SQL, XPath, ...), tous les langages de gabarit (Django, Smarty, ...), les scripts shell, incluant notamment des éléments tels que twill, un navigateur Web piloté par commande (généralement utilisé). pour les tests automatisés), les langages de stockage et d’échange de données (XML, YAML, ...) et les langages de documentation tels que LaTex, HTML ou CSS.

Certains langages avec une syntaxe très flexible comme TCL et Lisp construisent leur DSL directement dans le langage ... lorsque cela est possible. La majorité des langues utilisent des chaînes, généralement chargées à partir de fichiers externes.

Y at-il des avantages particuliers à les utiliser? Leur utilisation aux fins auxquelles ils sont destinés est très avantageuse au point que vous vous tournerez vers eux sans le savoir, tout comme vous utilisiez (je présume) SQL ou HTML sans les considérer comme des DSL.

J'oserais dire qu'il y a suffisamment de DSL pour toutes les applications dont vous pourriez avoir besoin; vous n'avez presque certainement pas besoin d'apprendre à écrire le vôtre.

(abordant le noeud de la question)

Je pense que la première fois que j'ai vu DSL quelque part et sa définition en tant que " domaine langage spécifique " J'ai également pensé qu'il s'agissait d'un langage particulier et concret dont je n'avais pas entendu parler - mais non, il s'agit d'un terme général qui désigne les langues adaptées à un domaine d'application particulier.

Ironiquement, si vous veniez d’entendre parler de TCL en tant que "langage de commande d'outil" vous pourriez penser, comme 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.

Je pense que c'est un langage adapté à la résolution de problèmes dans un domaine spécifique. Il peut s’agir d’un langage de traitement de règles ou d’un langage de description de service.

Un opposé à un langage spécifique au domaine (DSL) est un langage à usage général .

Un DSL est un bon moyen de développer un langage destiné aux non-programmeurs. Par exemple, si vous avez un DSL pour les responsables des finances dans une entreprise, plutôt que de programmer selon leurs spécifications, vous pouvez simplement les laisser écrire le programme qu'ils souhaitent. Ensuite, s'il est trop lent, vous pouvez prendre ce qu'ils ont écrit qui marche comme ils veulent, écrivez-le dans un langage compilé pour l'accélérer.

Tout est DSL ...

Assembleur: MOV R1 à R2
Compilateurs: Assignmentments - A = A + 1, Conditionals - IF (VRAI) ..., Succursale - RETURN
HTML: ... décrit une structure imbriquée
TCP / IP: décrire les adresses vers / depuis les adresses
PDF: Décrire le placement de texte / image sur du papier
Polices: décrivez les caractères

Toute langue utilisée pour décrire un processus spécifique est un DSL. Malheureusement, il manque de langages spécifiques à un domaine pour décrire même nos processus les plus élémentaires. Nous utilisons donc les quelques langages dont nous disposons pour décrire tout ce que nous faisons. "Zipez tous les fichiers HTML de mon site Web" nécessite 300 lignes de 3 ou 4 langues différentes à compléter.

Pour construire un DSL, déterminez le nombre minimum de caractères nécessaires pour décrire un processus que vous pouvez vous rappeler 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. L'analyse syntaxique est si rapide que toute syntaxe que vous utilisez est correcte, je préfère le langage naturel comme syntaxe dans la plupart des cas, "Payer les employés le premier du mois", mais spécifique à un domaine est juste que, spécifique à un domaine, vous déterminez la syntaxe correspond le mieux au problème.

Je ne voudrais pas utiliser d’autres solutions qui pourraient être pratiques, mais ne correspondent pas au problème, tel que HTML utilisé pour définir les données (XML). CSV est très utile, il convient à la plupart des problèmes. JSON ne convient pas à la partie relative à la facilité d’utilisation, c’est trop de choses qui ajoute des complications inutiles lorsque CSV fonctionne pour la plupart des problèmes. Nous utilisons beaucoup EXCEL pour DSL, cela fonctionne très bien pour décrire de petits problèmes, sous des rangées de 65K à 1M, telles qu’une arborescence ou des menus, la colonne A étant le niveau, les autres colonnes sont des icônes, des couleurs, des étiquettes et autres (EXCEL est une CSV éditable).

J'ai constaté que HTML ne résolvait pas vraiment le problème de la mise en page, alors je m'en suis débarrassé et j'ai défini un DSL qui convient. J'ai défini 6 régions sur la page, HEADER, BODY, FOOTER, MARGES GAUCHE / DROITE et MARGES COMPLETE GAUCHE / DROITE. Je pourrais ensuite demander au générateur de page d'ajouter une barre de titre, une barre de statut, des menus, une table, des formulaires, ..., à des cellules spécifiques. Chacune de ces cellules peut ensuite être divisée en rangées et colonnes à n’importe quelle profondeur. La mise en page prend quelques secondes pour tous les styles.

BODY contient une table de mes employés
HEADER contient la légende "Hello World" dans la barre de titre avec une connexion au logiciel Collins

Un DSL de menu ne correspond pas à celui de la mise en page, j'ai donc créé un DSL unique pour les menus.

Ressource Mon menu principal
* définir: menu, m, niveau, étiquette, icône, action;
m, 0, fichier;
m, 1, open, open.gif, Fichier de dialogue ouvert;

Chaque problème est unique, l’ordinateur peut utiliser n’importe quel format, c’est l’être humain pour lequel les DSL sont conçus. Rendez-le donc compréhensible pour les humains, quelque chose qu’ils peuvent taper et transforment le langage en mots réels; car ce sont de vraies personnes, des endroits et des choses que nous décrivons.

Bien! il y a beaucoup de choses expliquées ci-dessus. Je vais essayer d'expliquer cela d'une manière beaucoup plus simple, comme le comprendra quelqu'un comme moi.

Les langages à usage général étant utilisés à de nombreuses fins, le DSL n’est conçu que pour un domaine spécifique. Comme HTML ou CSS.

Vous pouvez dire si vous avez écrit sur un papier des instructions que seulement une personne ou votre seul meilleur ami peut comprendre et que personne d'autre ne pourrait comprendre. Ensuite, ce peut être un DSL. Mais si vous écrivez des instructions dans des termes que beaucoup de gens peuvent comprendre et suivre, alors ce n'est pas DSL.

I onces a créé une carte de commutation pour utilisateur pouvant être utilisée via le port série d'un ordinateur. L'utilisateur souhaite un programme pour cette carte pouvant être exécuté sur cette carte. Les commutateurs de relais sont activés et désactivés en conséquence. J'ai donc écrit quelques instructions et dit à l'utilisateur de programmer ce tableau conformément à ces instructions. Ceci est un exemple de DSL. Je n'ai pas inventé un nouveau langage, mais plutôt un groupe de chaînes que le micro-contrôleur peut lire à partir de la mémoire EEPROM, analyser en conséquence et effectuer une tâche spécifique.

J'ai écrit un bref article de blog expliquant pourquoi j'aime utiliser les DSL:

Je le souhaite Langages spécifiques à un domaine (DSL) supplémentaires Plus

Dans ce document, je définis un DSL comme suit:

  

Un petit langage de programmation spécialement conçu pour communiquer des solutions à un domaine de problèmes particulier.

En termes d'utilisation, si vous avez déjà utilisé Ant, langage SQL (Structured Query Language) ou CSS (Cascading Style Sheets), vous avez utilisé un DSL.

J'aime utiliser les DSL car ils ont pour objectif de faciliter la communication de solutions à des problèmes spécifiques, et ce, de manière à favoriser l'inclusion d'experts de domaine.

Un exemple simple de langage DSL (Domain Specific Language) est le langage HTML utilisé pour le domaine particulier appelé applications Web.

Je viens d’entendre DSL, mais je trouve un exemple vraiment utile: LUNA (ancien lunascript).

Il s'agit d'un langage / framework de programmation sur mesure créé par l'équipe Asana pour leur propre plate-forme.

Comme je le constate plus loin, de nombreuses entreprises créent leurs propres cadres et langages afin de créer un avantage concurrentiel, voici quelques exemples:

  • SAP avec AbAp
  • PeopleSoft avec PeopleCode
  • Apple avec Objective-C
  • Facebook a des choses comme FBML et FQL

Celles-ci sont spécifiques à un domaine car vous les utiliserez presque exclusivement pour travailler sur ces plates-formes.

J'espère que cette réponse vous aidera à clarifier le concept.

Un exemple de DSL utilisé dans Machine Learning est patsy en python: https://patsy.readthedocs.io/en/latest/formulas.html#

qui est basé sur la formule DSL de R: https://stat.ethz.ch/ R-manuel / R-devel / bibliothèque / stats / html / formula.html

https://cran.r-project.org /web/packages/Formula/vignettes/Formula.pdf

et Hadley a une belle section de son livre R avancé qui décrit comment créer un DSL avec: http://adv-r.had.co.nz/dsl.html

Une fois que le champ d’apprentissage en profondeur se sera stabilisé quelque peu (ou même maintenant), j'aimerais voir quelque chose de similaire se produire dans le projet Apache MXnet. Cependant, je n'ai vu aucune proposition à ce sujet sur la page de proposition cependant.

DSL - DomainSpecificLanguage

  

DSL est un langage informatique qui cible un type de problème particulier plutôt qu'un langage généraliste qui vise tout type de problème logiciel.

Où: configurations (TravisCI .yaml), générer des scripts ( gradle ), des dépendances des cibles (< un href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod ), programmation de l'interface utilisateur ( Anko ) etc.

DSL est une programmation déclarative - Que fait plutôt comment faire

Les DSL externes ont leur propre syntaxe personnalisée et vous écrivez un analyseur complet pour les traiter (par exemple, XML, RegExp, SQL, HTML, CSS, UML).

Les

DSL internes sont des moyens particuliers d’utiliser un langage hôte pour donner à ce dernier l’apparence d’un langage particulier (par exemple, Lisp, Ruby, annotations Java, macros).

En savoir plus ici , ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top