Création de DSL en Java, Partie 1: Qu'est-ce qu'un langage spécifique à un domaine?

Si vous avez déjà écrit un makefile ou conçu une page Web avec CSS, vous avez déjà rencontré un DSL ou un langage spécifique à un domaine. Les DSL sont de petits langages de programmation expressifs conçus sur mesure pour des tâches spécifiques. Dans cette série en quatre parties, Venkat Subramaniam présente le concept des DSL et vous montre finalement comment les construire à l'aide de Java. Dans ce premier article, Venkat explique ce qu'est un DSL et définit la différence entre un DSL externe et un DSL interne. Il souligne ensuite certains DSL que vous utilisez probablement depuis des années, peut-être sans même vous en rendre compte.

Si vous avez été impliqué dans l'écriture ou même simplement en utilisant des applications, il est probable que vous ayez déjà rencontré des langages spécifiques à un domaine, ou des DSL, même si vous ne vous en êtes pas rendu compte à l'époque. Un fichier d'entrée de mot-clé dans une application qui reçoit des données d'entrée est un DSL. Un fichier de configuration est un DSL. Un makefile est un DSL utilisé pour spécifier des règles et des dépendances pour la construction d'une application. Si vous avez écrit l'un de ces éléments, vous avez déjà fait vos premiers pas pour créer des langues spécifiques à un domaine.

Le mot langage dans la phrase peut vous amener à vous attendre à ce qu'un DSL utilise la syntaxe pour exprimer certaines sémantiques. Contrairement à un langage à usage général comme Java, un DSL a une portée et des capacités assez limitées; comme leur nom l'indique, les DSL sont fortement axés sur un certain type de problème ou de domaine, et sur l'expression d'un ensemble restreint de solutions dans le contexte de cette portée limitée. Et c'est une bonne chose - les DSL sont simples et concis.

D'accord, c'est L; qu'en est-il de D et S?

Le mot domaine dans DSL fait référence à "un domaine ou une sphère de connaissance, d'influence ou d'activité". (Pour plus d'informations, reportez-vous à Domain-Driven Design par Eric Evans.) La focalisation sur un domaine vous donne un contexte - un cadre logique dans lequel vous pouvez faire évoluer des modèles pour une application.

Le mot spécifique dans DSL vous donne le contexte limité. Cela vous aide à garder les choses pertinentes, concentrées, concises et expressives.

La simplicité est essentielle au succès d'un DSL. Une personne familière avec le domaine de la langue doit facilement le comprendre. Par exemple, si vous créez un DSL que les actuaires utiliseront pour exprimer des règles métier dans le domaine de l'assurance, vous ne voulez pas qu'ils passent beaucoup de temps à apprendre un langage difficile et compliqué. Vous voulez qu'ils se concentrent sur l'expression des détails associés aux risques d'assurance d'une manière qu'ils peuvent facilement comprendre, discuter, évoluer et gérer. Le DSL que vous créez pour eux doit être construit sur leur vocabulaire, les termes qu'ils utilisent quotidiennement pour communiquer avec leurs pairs. Vous voulez qu'ils utilisent la syntaxe que vous fournissez, mais il devrait leur sembler qu'ils ne font que spécifier des règles discrètes.Et ils devraient pouvoir le faire sans avoir l'impression de vraiment programmer ou même d'utiliser une sorte de langage.

Créer un bon DSL, c'est comme préparer un repas nutritif; tout comme vous voulez que les enfants mangent des légumes sans s'en rendre compte et sans se soucier d'eux, vous voulez que les clients utilisent votre DSL sans se soucier de sa syntaxe.

La concision est une autre partie de l'écriture d'un bon DSL, ce qui signifie choisir une syntaxe à la fois laconique et expressive. La concision dans la raison rend votre code plus facile à lire et à maintenir. L'expressivité aide à promouvoir la communication, la compréhension et la rapidité. Par exemple, pour quelqu'un qui comprend la multiplication matricielle, matrixA.multiply(matrixB);est moins expressif et concis que matrixA * matrixB. Le premier consiste à appeler des fonctions et à utiliser des parenthèses, et comprend un point-virgule intimidant. Ce dernier est déjà une expression qui sera assez familière.