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é ?

2voto

Lucas Roberts Points 296

Un exemple de DSL utilisé dans l'apprentissage automatique 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-manual/R-devel/library/stats/html/formula.html

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

et Hadley a une section intéressante dans son livre R avancé qui décrit comment construire un DSL avec R : http://adv-r.had.co.nz/dsl.html

Une fois que le domaine de l'apprentissage profond se sera quelque peu stabilisé (ou même maintenant), j'aimerais voir quelque chose de similaire apparaître dans le cadre du projet Apache MXnet. Cependant, je n'ai vu aucune proposition en ce sens sur la page de la proposition mais

1voto

Oscar Rodriguez Points 35

Les langages spécifiques à un domaine expriment les processus et les connaissances de votre domaine dans un langage qui utilise directement les concepts et la logique de votre domaine particulier.

La communauté s'agrandit indéniablement, mais elle n'est pas encore au niveau des autres technologies "grand public".

La plupart du temps, les DSL sont conçus pour améliorer la productivité au sein des entreprises, qui les gardent donc pour elles et ne partagent pas leurs résultats/intérêts.

Voici une conférence où l'orateur donne quelques exemples d'utilisation de DSL JetBrains MPS avec la technologie de l'édition projetée : https://vimeo.com/197381453

1voto

Maciej Sikora Points 6777

DSL - langage spécifique à un domaine. Commençons par ce qu'est un domaine - un domaine est une zone définie, une étendue. Ce domaine peut être l'apparence d'un site web, et vous avez pour cela CSS, et le second domaine peut être la structure d'un site web, et ici vous avez HTML.

Mais le domaine peut aussi être une application de l'entreprise X. Et dans le cadre de ce domaine, un langage peut être créé. Un langage ne signifie pas qu'il s'agit d'une chose à part entière avec sa propre grammaire, sa propre syntaxe, son propre compilateur ou son propre moteur d'exécution. Le DSL peut n'être qu'une liste d'outils permettant de résoudre les problèmes du domaine.

Considérons la POO et son modèle pour représenter les objets du domaine par des classes et les méthodes comme les comportements de ces objets. Si nous créons une telle structure et donnons à ces objets des comportements, nous pouvons alors écrire un code en utilisant ces concepts. Considérons cet exemple de pseudo-code :

cookie = async getCookie(cookieId)
user = async getUser(userId)
result async user.buy(cookie)
if (result.isError()) {
  error.showAlert("User has not enough money")
} else {
  confirmation.showSuccess("Cookie was bought")
}

Quelle est la part de la GPL (langage à usage général) et quelle est la part de la terminologie et des outils spécifiques au domaine. Il s'agit d'un mélange des deux, mais toutes les commandes sont ici spécifiques au domaine. Cela dit, nous pouvons dire que ce qui précède est écrit dans un DSL dont le domaine est une application x.

En poursuivant cet exemple, je peux créer des outils encore plus abstraits, et réaliser le flux de contrôle à l'aide de ces outils, considérer (c'est plus FP, mais j'espère que vous comprenez ce que je veux dire) :

waitForMany(getCookie(cookieId), getUser(userId)
  .andThen([cookie, user] -> user.buy(cookie))
  .andThen(showSuccess("Cookie was bought"))
  .whenError(showError("User has not enough money"))

Comme vous pouvez le voir, j'ai pu abstraire beaucoup de choses et utiliser cette abstraction pour réaliser le flux de contrôle. Et tout est basé sur la GPL et fonctionne dans le cadre de la GPL.

En réalité, nous écrivons tous des DSL, toutes les abstractions spécifiques à un domaine que nous pouvons utiliser sont de ce type. Mais la plupart de ces abstractions ne sont pas des solutions complètes, c'est pourquoi nous essayons de ne pas utiliser ce mot trop souvent. Mais si vous disposez d'un ensemble d'outils, de fonctions qui abstraient votre domaine, ils forment une sorte de DSL.

Ce qui est aussi DSL, c'est beaucoup de choses, par exemple tout cadre qui fournit un ensemble de règles est DSL. Si vous voyez quelqu'un prétendre être un développeur React, alors vous savez qu'il est un développeur spécifique à un domaine, car React est exactement un DSL qui est une alternative à l'utilisation d'une plateforme web native. Si vous pouvez composer des fonctionnalités à partir d'outils existants spécifiques à un domaine, alors vous écrivez à l'aide d'un DSL. En allant plus loin dans React, désolé pour tous ceux qui ne font pas partie de ce DSL :D, vous pouvez créer un ensemble de composants, et les composer comme des blocs de construction, et hurra !, maintenant vous avez fait un DSL au dessus du DSL.

Yep a répété DSL trop souvent ici, désolé.

0voto

Sindico Points 1623

Ce blog propose un bel exemple basé sur Objective-C et iOS. http://lowcoupling.com/dslengineering

0voto

atongsa Points 156

Nextflow( https://github.com/nextflow-io/nextflow ) est une sorte de langage DSL écrit par groovy ;

l'objectif principal de nextflow est d'écrire un pipeline pour l'analyse, et de passer facilement de l'ordinateur portable au HPC au cloud, et de répéter l'expérience avec conda, docker, singularity.

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