2009-10-16 6 views
1

J'ai récemment réfléchi à la question des ADSL et des bibliothèques. Dans mon domaine, le problème avec les DSL (R, SAS et Matlab viennent à l'esprit) est qu'ils sont un PITA pour écrire du code plus général et un PITA pour l'intégrer dans un code plus général dans d'autres langues. Je ne dis pas que ce soit impossible, juste ennuyeux et frustrant. Cela contraste avec l'approche de NumPy, par exemple, qui fonctionne avec un langage généraliste et qui serait probablement aussi efficace que Matlab si elle existait depuis longtemps et si elle avait reçu autant d'argent. Cela vous permet de travailler sur un projet où seulement un petit peu est numérique sans avoir besoin de tout un tas de code de colle pour interfacer entre les langues, avoir à mémoriser plusieurs syntaxes, etcDSL vs. Plain Old Libraries

Quels sont les avantages d'un DSL autonome sur une vieille bibliothèque simple dans une langue à usage général? Il semble qu'il y ait des inconvénients si évidents en termes d'intégration plus difficile avec un code plus généraliste et encore une autre syntaxe pour apprendre que je ne comprends tout simplement pas pourquoi ces DSL sont si populaires.

Répondre

1

L'un des principaux avantages d'un DSL autonome est qu'il peut être plus expressif. Dans une bibliothèque écrite dans le langage généraliste, vous êtes limité par la syntaxe de la langue. Considérons un exemple de logiciel bancaire qui a des dossiers financiers qui peuvent être interrogés et que vous voulez trouver tous les problèmes de prêts hypothécaires au cours de la dernière année. Pseudocode pour une requête dans une langue d'usage général ressemblerait à quelque chose comme:

List<Mortgage> mortgagesThisYear = new LinkedList<Mortgage>(); 
for (Mortgage m : mortgages) { 
    if (today.minus(m.getDate()) <= 1 year) { 
    mortgagesThisYear.add(m); 
    } 
} 

maintenant dans un DSL, vous pourriez être en mesure d'écrire quelque chose comme:

Find all mortgages in the last year 

Plus encore, les banquiers pourraient construire ces requêtes basé sur un "langage omniprésent". (une langue du domaine qui est commune et qui facilite la communication entre les programmeurs et les banquiers).

Les consoles DSL stand-by sont destinées à un usage très spécifique et non général. Le langage est plus expressif et la syntaxe est généralement plus détendue et plus liée au domaine.

+0

ok, mais disons que vous aviez un langage à usage général de niveau supérieur. Ensuite, il pourrait être: lastYear = [m pour m dans les hypothèques si aujourd'hui() - m.date <365] – dsimcha

+0

Je pense que les mêmes idées s'appliquent toujours. Le DSL est tout au sujet d'un langage expressif dans le domaine dans lequel vous travaillez. Il est destiné à être spécifique et plus facile à lire/utiliser qu'un langage de niveau supérieur. –

0

L'inconvénient des lignes DSL externes ne s'applique pas aux lignes DSL externes implémentées à l'aide de la génération de code et du modèle d'espace de génération. L'interfaçage est ensuite effectué à travers le langage à usage général utilisé. En réalité, les DSL internes ont beaucoup plus d'inconvénients, comme aucune bonne structure explicite lisible, mauvais codage pratique, possibilités de syntaxe concrète limitée, aucun support d'outils, très difficile ou impossible à implémenter des validations spécifiques au domaine et problème d'interfaçage avec d'autres codes est trop criptique.

Questions connexes