Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Qu'est-ce qu'un DSL ?

Langages dédiés : pourquoi nous en utilisons tous, et pourquoi la métacratie en a besoin

Auteur : Stéphane Erard — 10 avril 2026

« Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt. » — Ludwig Wittgenstein, Tractatus Logico-Philosophicus, 5.6

(« Les limites de mon langage sont les limites de mon monde. »)


1. Avertissement au lecteur

Cette page est destinée aux lectrices et lecteurs du dossier métacratie qui rencontrent le terme DSL — dans Appareil et compilateur, dans la série blog Métacratie — Compilateur croisé, ou dans les diapositives originelles de 2017 — sans avoir de formation en informatique.

Aucun prérequis technique n'est nécessaire pour suivre cette page. Elle part d'exemples que tout le monde connaît, construit une définition progressive, et arrive — à la fin seulement — aux DSLs spécifiques du projet métacratie. Le lecteur familier du concept peut sauter directement à la section 8.


2. L'intuition : des langages partout

Avant de définir ce qu'est un DSL, remarquons quelque chose que nous faisons tous, tous les jours, sans y penser : nous changeons de langage selon le domaine dans lequel nous agissons.

La recette de cuisine

Ouvrez un livre de cuisine. Vous y lirez des phrases comme :

Émincer finement les oignons. Faire revenir à feu doux dans l'huile d'olive pendant cinq minutes. Déglacer au vin blanc. Incorporer la crème fraîche hors du feu.

Ce texte possède un vocabulaire propreémincer, déglacer, incorporer, à feu doux — qui n'existe que dans le domaine de la cuisine. Il possède une structure fixe : d'abord la liste des ingrédients, puis les étapes numérotées. Et il possède un lecteur attendu : quelqu'un qui sait ce qu'est une poêle et un fourneau.

Personne n'écrirait un contrat de travail avec ce vocabulaire. Personne n'utiliserait la langue juridique pour expliquer comment faire une vinaigrette. Chaque domaine a son langage.

La notation musicale

Une partition est un langage pour la musique. Elle a son vocabulaire : clef de sol, noires, croches, soupirs, pianissimo, fortissimo, allegro. Elle a sa grammaire : les notes se lisent de gauche à droite, de haut en bas, la durée dépend de la forme de la note, la hauteur dépend de sa position sur la portée. Et elle a son domaine : elle dit quoi jouer, pas comment fonctionne mécaniquement un piano.

Un pianiste lit une partition ; un plombier non. La notation est suprême dans son domaine — elle peut exprimer n'importe quelle musique occidentale — et muette en dehors.

La notation des échecs

e4 e5 Cf3 Cc6 Fb5 — voici les cinq premiers coups de la partie espagnole (ou « Ruy López »). Tout joueur d'échecs au monde lit cette séquence sans ambiguïté. Chaque symbole encode une pièce et une case. Le vocabulaire est minuscule (six pièces, 64 cases), la grammaire est rigide (une pièce, une case, un coup), et le domaine est unique : enregistrer une partie d'échecs. Rien d'autre. On ne peut pas commander un café en notation algébrique.

Les panneaux routiers

Un octogone rouge signifie STOP. Un triangle blanc bordé de rouge signifie danger. Un rond bleu avec une flèche blanche signifie sens obligatoire. Le système des panneaux routiers est un langage : un vocabulaire fini de formes, de couleurs et de symboles, chacun avec une signification précise, conçu pour un seul domaine — la régulation du trafic — et lisible à 90 km/h par son public cible : les conducteurs.

Le point commun

Recettes, partitions, notation des échecs, panneaux routiers : chacun de ces systèmes est un langage dédié — un langage dont le vocabulaire est restreint à un domaine, dont les règles sont propres à ce domaine, et qui n'a aucune prétention à servir en dehors de ce domaine. Le nom formel de cette idée, en informatique et en linguistique, est DSL : Domain-Specific Language, littéralement « langage spécifique à un domaine ».


3. Définition : qu'est-ce qu'un langage dédié ?

Un DSL — Domain-Specific Language — est un langage conçu pour un domaine précis et pour ce domaine seulement.

Trois propriétés le caractérisent :

  1. Un vocabulaire restreint. Le DSL ne reconnaît qu'un ensemble fini de mots ou de symboles, tous liés au domaine. La notation musicale connaît les notes, les silences, les nuances et les tempos — rien d'autre. SQL connaît SELECT, FROM, WHERE, JOIN, INSERT, UPDATE, DELETE — et c'est à peu près tout.

  2. Une grammaire propre. Les règles de combinaison sont spécifiques au domaine. Dans une recette, les ingrédients viennent avant les étapes. Dans une partition, la clef vient avant les notes. Dans une formule chimique, le symbole de l'élément vient avant le nombre d'atomes (H₂O, pas 2HO).

  3. Un domaine d'application. En dehors de son domaine, le DSL est muet. On ne peut pas écrire un poème d'amour en SQL. On ne peut pas décrire une réaction chimique avec des panneaux routiers. Cette limitation est une force, pas une faiblesse : elle garantit que tout ce qui est exprimé dans le DSL appartient au domaine, et que toute ambiguïté étrangère au domaine est structurellement impossible.

Un DSL n'est pas nécessairement un langage informatique. La notation musicale existe depuis le Moyen Âge. La notation algébrique des échecs date du XIXᵉ siècle. Les formules chimiques précèdent les ordinateurs de deux siècles. Le concept de langage dédié est bien plus ancien que l'informatique — l'informatique l'a nommé, formalisé et systématisé, mais elle ne l'a pas inventé.

Note terminologique. « DSL » est l'abréviation anglaise universellement utilisée, y compris dans la littérature technique francophone. La traduction française serait « langage dédié » ou « langage spécifique au domaine ». Cette page utilise les deux indifféremment.

Un DSL est un langage dont le vocabulaire, la grammaire et le domaine d'application sont volontairement restreints à un seul champ. Il dit tout ce qu'il y a à dire dans ce champ — et rien de ce qui est hors de ce champ.


4. DSL contre GPL : le couteau suisse et le couteau à huîtres

Pour comprendre ce qu'est un DSL, il faut comprendre ce qu'il n'est pas. Le contraire d'un DSL est un GPLGeneral-Purpose Language, langage généraliste.

Le langage généraliste

Un GPL peut exprimer n'importe quoi (en principe). Le français est un GPL : on peut y écrire une recette, un contrat, un poème et un théorème de physique. C#, Python et Java sont des GPL informatiques : on peut y construire un serveur web, un jeu vidéo, un compilateur ou un simulateur climatique.

La force du GPL est son universalité. Sa faiblesse est son imprécision dans chaque domaine particulier. En français, la phrase « l'avocat est sur la table » est ambiguë — le juriste ou le fruit ? Un langage dédié au droit ne permettrait pas cette ambiguïté, parce que le mot « avocat » au sens botanique n'appartiendrait pas à son vocabulaire.

Le langage dédié

Un DSL ne peut exprimer que ce qui relève de son domaine. SQL ne peut pas dessiner une image. HTML ne peut pas calculer une trajectoire balistique. La notation musicale ne peut pas formuler une loi fiscale. Cette étroitesse est précisément ce qui donne au DSL sa précision : puisqu'il ne connaît que les concepts de son domaine, chaque phrase écrite dans le DSL est nécessairement à propos du domaine.

L'analogie

Un couteau suisse fait beaucoup de choses : couper, visser, ouvrir une bouteille, limer un ongle. Aucune de ces fonctions n'est parfaite, mais l'outil est universel. C'est un GPL.

Un couteau à huîtres fait une seule chose : ouvrir des huîtres. Il la fait parfaitement, en toute sécurité, avec une forme qui rend la mauvaise utilisation évidente. Il est inutile pour visser ou limer. C'est un DSL.

Le projet métacratie ne propose pas de construire un couteau suisse du droit — un outil universel qui ferait tout approximativement. Il propose de construire une famille de couteaux à huîtres : chacun dédié à un aspect précis du problème (le vocabulaire juridique, le statut politique des biens, la réception citoyenne), chacun précis et vérifiable dans son domaine.

Comparaison synthétique

Axe DSL (langage dédié) GPL (langage généraliste)
Vocabulaire Restreint au domaine Ouvert, potentiellement infini
Domaine Un seul Tous
Précision dans le domaine Élevée, structurellement garantie Variable, dépend du rédacteur
Courbe d'apprentissage pour l'expert métier Faible (il connaît déjà le domaine) Élevée (il doit apprendre le langage entier)
Risque d'ambiguïté Faible (le vocabulaire étranger est interdit) Élevé (tout mot est permis, y compris les mots piégés)

5. Des DSL que vous connaissez déjà

Le but de cette section est de montrer que les DSLs sont partout — dans la vie quotidienne, dans les outils numériques, et même dans le droit. Le lecteur qui termine cette section ne devrait plus jamais considérer « DSL » comme un mot intimidant.

5.1. DSLs non-techniques

La notation musicale. Nous l'avons évoquée en introduction. Ce qui mérite d'être ajouté, c'est que la musique n'a pas un DSL mais plusieurs, chacun adapté à un sous-domaine. La partition classique (portée, clefs, notes) est le DSL de référence. La tablature de guitare est un DSL simplifié qui indique la corde et la frette plutôt que la note abstraite — un DSL pour guitaristes qui ne lisent pas le solfège. Le lead sheet du jazz est un DSL minimaliste : une mélodie et des symboles d'accords (Cm7, G7♯9), le reste étant laissé à l'improvisation. La basse chiffrée baroque (6/4, 7) est un DSL pour clavecinistes qui réalisent l'harmonie en temps réel. Chaque sous-domaine musical a engendré son propre langage dédié.

La notation algébrique des échecs. Au-delà de la notation coup par coup (e4 e5 Cf3), il existe le format PGN (Portable Game Notation) : un DSL plus riche qui inclut les métadonnées (noms des joueurs, date, lieu, résultat) en plus des coups. Le PGN est lisible par les humains et par les logiciels d'échecs — une propriété que nous retrouverons dans les DSLs informatiques.

Les recettes de cuisine. Le format « ingrédients + étapes » que nous connaissons aujourd'hui n'a pas toujours existé. Auguste Escoffier, dans le Guide culinaire (1903), a standardisé la grammaire : nomenclature des sauces mères, des techniques de base, des garnitures classiques. Avant Escoffier, les recettes étaient souvent écrites en prose continue, sans structure fixe. Escoffier a, sans le savoir, formalisé un DSL : un vocabulaire stabilisé, des catégories emboîtées, une structure prévisible. Le cuisinier moderne lit ce DSL sans effort parce qu'il l'a internalisé pendant sa formation.

Les formules chimiques. H₂O, NaCl, C₆H₁₂O₆. Chaque formule encode la composition moléculaire en quelques caractères : le symbole de l'élément (tiré du tableau périodique, lui-même un DSL de classification), puis le nombre d'atomes en indice. La grammaire est rigide, le vocabulaire est fini (118 éléments), le domaine est unique (la composition chimique). Un chimiste lit C₆H₁₂O₆ et voit « glucose ». Un non-chimiste voit une énigme. C'est le propre de tout DSL : il est transparent pour l'expert du domaine et opaque pour les autres.

Le solfège. Do, ré, mi, fa, sol, la, si : sept syllabes qui nomment les sept hauteurs de la gamme. Le solfège est un micro-DSL du pitch — il ne dit rien de la durée, du timbre ou de la dynamique, mais il identifie les hauteurs avec une précision absolue. C'est un bel exemple de DSL minimal : sept mots suffisent à couvrir tout le domaine.

5.2. DSLs techniques que tout le monde utilise sans le savoir

HTML — le langage du Web. Chaque page web que vous avez jamais lue a été écrite en HTML (HyperText Markup Language). HTML est un DSL pour structurer des documents : titres, paragraphes, liens, images, listes. Il ne peut pas faire de calcul, il ne peut pas jouer de la musique, il ne peut pas cuisiner. Il structure des documents, point. Son vocabulaire est une liste fermée de « balises » (<h1>, <p>, <a>, <img>, <ul>, <table>...), chacune avec une signification précise. Un navigateur web (Chrome, Firefox, Safari) sait lire ce DSL et le transformer en page visuelle.

CSS — le langage du style. Compagnon de HTML, CSS (Cascading Style Sheets) est un DSL pour décrire l'apparence : couleurs, tailles, espacements, polices, animations. C'est un domaine différent de celui de HTML (le contenu vs la présentation), et donc un DSL différent. HTML dit quoi montrer ; CSS dit comment le montrer.

SQL — le langage des bases de données. SELECT nom FROM personnes WHERE ville = 'Paris' — une seule phrase qui récupère toutes les personnes habitant Paris dans une base de données. Le vocabulaire de SQL est minuscule : SELECT, FROM, WHERE, JOIN, INSERT, UPDATE, DELETE, CREATE, DROP, et quelques autres. Le domaine est la manipulation de données structurées. SQL ne peut pas envoyer un email, dessiner un graphique ou jouer un morceau de musique. Mais dans son domaine, il est d'une puissance et d'une concision remarquables — cette phrase de sept mots peut interroger une table de cent millions de lignes.

Les expressions régulières (regex) — le langage des motifs textuels. [A-Z]{2}-\d{3}-[A-Z]{2} décrit le format d'une plaque d'immatriculation française. C'est un DSL pour décrire des patterns dans du texte : « deux lettres majuscules, un tiret, trois chiffres, un tiret, deux lettres majuscules ». Cryptique pour le non-initié, d'une précision chirurgicale dans son domaine.

Markdown — le langage que vous lisez en ce moment. La page que vous êtes en train de lire a été écrite en Markdown, un DSL pour la mise en forme de texte. Un # fait un titre, un **mot** met en gras, un - fait une puce. Markdown ne peut pas faire de mise en page complexe, mais il couvre 90 % des besoins de rédaction technique avec une dizaine de symboles.

5.3. Un DSL inattendu : le droit

Voici le point de bascule vers le projet métacratie.

Le Code civil français possède son propre vocabulaire : ayant droit, mise en demeure, force majeure, vice caché, nue-propriété, usufruit, emphytéose. Il possède sa propre grammaire : articles numérotés, alinéas, considérants, attendus. Il possède un domaine : la régulation des rapports entre personnes dans la société française.

Le droit est déjà un DSL, au sens large. Un juriste lit le Code civil comme un musicien lit une partition — avec fluence, en saisissant les implications de chaque terme technique. Un non-juriste lit le Code civil comme un non-musicien regarde une partition — en reconnaissant qu'il y a un système, sans pouvoir le déchiffrer.

Mais c'est un DSL informel et ambigu. Les mots sont en français naturel, ce qui permet les doubles sens, les interprétations divergentes, les zones grises. La « force majeure » du Code civil n'a pas de définition formelle unique — elle est précisée par la jurisprudence, c'est-à-dire par l'accumulation de décisions au cas par cas. Rien, dans la structure du texte, ne force la cohérence entre deux articles. Rien ne détecte mécaniquement qu'une loi votée en 2024 contredit un principe posé en 1804.

Le projet Catala, développé à l'INRIA par Denis Merigoux et ses collègues, est l'une des tentatives contemporaines les plus avancées pour transformer le droit en DSL formel — un langage dans lequel les lois sont écrites de manière vérifiable par une machine. La métacratie s'inscrit dans la même intuition, mais avec une ambition plus large : non pas formaliser une loi existante, mais construire un compilateur croisé qui vérifie la cohérence entre plusieurs DSLs — le droit, les biens communs, les droits des citoyens.

C'est précisément ici que le concept de DSL devient politique. Nous y reviendrons à la section 8.


6. DSL internes et DSL externes

Il existe deux grandes familles de DSLs, et la distinction compte pour comprendre l'approche technique du projet métacratie.

Le DSL externe

Un DSL externe a sa propre syntaxe, son propre analyseur (parseur), ses propres outils. Il vit en dehors de tout langage de programmation. SQL est un DSL externe : sa syntaxe (SELECT ... FROM ... WHERE ...) n'appartient à aucun langage généraliste. HTML est un DSL externe. CSS est un DSL externe. Catala est un DSL externe. La notation musicale est un DSL externe (elle ne vit à l'intérieur d'aucune autre notation).

L'avantage du DSL externe est sa liberté de conception : le créateur du DSL peut inventer exactement la syntaxe qui convient au domaine, sans contrainte héritée. L'inconvénient est le coût d'entrée : il faut construire un analyseur, un éditeur, une documentation, et le lecteur doit apprendre une syntaxe entièrement nouvelle.

Le DSL interne

Un DSL interne (on dit aussi « DSL embarqué ») vit à l'intérieur d'un langage hôte. Il utilise la syntaxe du langage hôte, mais restreint le vocabulaire et applique des règles via le système de types de l'hôte. Le lecteur n'a pas besoin d'apprendre une nouvelle syntaxe — il utilise celle qu'il connaît déjà, mais avec un vocabulaire spécialisé.

L'analogie la plus parlante est celle du jargon professionnel. Un médecin parle français, mais il utilise un vocabulaire spécialisé — angioplastie, dyspnée, hémoglobine glyquée — avec des règles d'usage propres au domaine médical. Le jargon médical est un DSL interne du français : il utilise la grammaire française, mais restreint le vocabulaire au domaine médical. Un francophone qui entre dans un hôpital comprend la syntaxe de chaque phrase, mais pas le vocabulaire — exactement comme un développeur C# qui découvre un DSL interne en C#.

Les DSLs du projet métacratie

Les DSLs du projet métacratie — Common.Dsl, Law.Dsl, Commons.Dsl, Citizen.Dsl — sont des DSLs internes en C#. Concrètement, ils utilisent les attributs du langage C# comme vocabulaire. Un attribut est une annotation que l'on place au-dessus d'une déclaration pour y ajouter une information structurée :

[LawArticle("L.225-1", Hierarchy = NormLevel.Loi)]

Cette ligne dit : « ceci est un article de loi, son identifiant est L.225-1, et il se situe au niveau hiérarchique de la Loi dans la pyramide des normes ». C'est du C# valide syntaxiquement — le compilateur C# l'accepte. Mais le vocabulaire (LawArticle, NormLevel.Loi) est celui du DSL juridique. Et un Source Generator (un composant du compilateur C# appelé Roslyn) lit ces annotations, vérifie les règles du domaine, et produit du code à partir d'elles.

Le lecteur non-technique n'a pas besoin de comprendre les détails de ce mécanisme. Ce qui compte, c'est le principe : les DSLs du projet métacratie ne sont pas un nouveau langage à apprendre de zéro. Ils sont un jargon à l'intérieur d'un langage existant — un vocabulaire dédié, des règles dédiées, un domaine dédié, embarqués dans un cadre syntaxique que les développeurs connaissent déjà.


7. Ce que fait un DSL : déclarer, pas exécuter

La plupart des DSLs partagent une propriété fondamentale : ils sont déclaratifs. Ils décrivent ce que l'on veut, pas comment l'obtenir.

Des exemples familiers

La recette de cuisine dit « émincer les oignons », pas « prendre le couteau dans la main droite, placer la lame à un angle de 15 degrés par rapport à la planche, appliquer 200 grammes de pression verticale en déplaçant la lame horizontalement de 20 centimètres par seconde ». Le quoi (émincer) est dans la recette ; le comment (le geste du couteau) est dans la compétence du cuisinier.

SQL dit « donne-moi tous les Parisiens » (SELECT * FROM personnes WHERE ville = 'Paris'), pas « ouvre le fichier de données, lis chaque ligne octet par octet, compare la chaîne de caractères de la colonne 'ville' avec la chaîne 'Paris', alloue de la mémoire pour chaque correspondance, et retourne le tout ». Le quoi est dans la requête SQL ; le comment est dans le moteur de base de données.

HTML dit « ceci est un titre » (<h1>Mon titre</h1>), pas « dessine les pixels aux coordonnées (x, y) en police Helvetica taille 24 points avec un interligne de 1.2 ». Le quoi est dans le HTML ; le comment est dans le navigateur.

La notation musicale dit « joue un la à 440 Hz pendant une noire à 120 BPM » ; elle ne dit pas « frappe la touche du piano avec une force de 3 newtons, maintiens-la pendant 500 millisecondes, puis relève le doigt ». Le quoi est dans la partition ; le comment est dans le musicien.

La séparation quoi / comment

Cette séparation — le DSL déclare le quoi, un système séparé s'occupe du comment — est la puissance fondamentale d'un DSL. Elle permet à l'expert du domaine de se concentrer sur ce qui lui importe (le contenu, l'intention, la logique du domaine) sans avoir à maîtriser la machinerie qui traduit cette intention en action.

Le cuisinier qui lit « déglacer au vin blanc » n'a pas besoin de comprendre la thermodynamique de l'évaporation. L'analyste qui écrit SELECT...FROM...WHERE n'a pas besoin de comprendre les index B-tree du moteur de base de données. Le juriste qui annote un article avec [LawArticle("L.225-1")] n'a pas besoin de comprendre comment le Source Generator lit cette annotation et produit du code vérifiable.

Dans le projet métacratie

Dans les DSLs du projet métacratie, la déclaration est une annotation typée en C# — un attribut qui dit ce que représente un article, un bien commun, un droit citoyen. L'exécution — vérifier la cohérence, détecter les contradictions, générer des tableaux de bord, produire des erreurs de compilation quand une loi contredit un principe — est assurée par le Source Generator. L'auteur de la déclaration (qu'il soit juriste, citoyen, ou législateur dans l'horizon constructif du projet) n'a pas besoin de savoir comment le générateur fonctionne, de même que le cuisinier n'a pas besoin de comprendre la thermodynamique pour suivre une recette.


8. Pourquoi le projet métacratie utilise des DSLs

Tout ce qui précède converge vers cette section. Le lecteur sait maintenant ce qu'est un DSL, en quoi il diffère d'un langage généraliste, et comment fonctionne la séparation entre déclaration et exécution. Il est temps de répondre à la question : pourquoi le projet métacratie parle-t-il sans cesse de DSLs ?

8.1. Le problème : les lois sont un DSL informel et ambigu

Nous l'avons vu à la section 5.3 : le droit est déjà un langage dédié. Mais c'est un DSL informel, écrit en langue naturelle, sujet à l'interprétation. Trois conséquences :

  • On ne peut pas vérifier mécaniquement qu'une loi votée en 2024 ne contredit pas un principe constitutionnel de 1958. Il faut un humain — un juge constitutionnel — pour le faire, avec tous les biais et toutes les pressions que cela implique. (Le cas Dumas 1995, analysé en détail dans Appareil et compilateur, montre ce qui se passe quand cette vérification humaine défaille.)

  • On ne peut pas tracer la chaîne qui va d'un principe constitutionnel à son application concrète dans la vie d'un citoyen. Combien de textes intermédiaires (lois organiques, décrets, circulaires, arrêtés) séparent un droit proclamé de son exercice réel ? Personne ne le sait exactement — la chaîne est en langue naturelle, dispersée dans des dizaines de sources, et la cohérence d'ensemble n'est garantie par rien.

  • On ne peut pas simuler l'effet d'une modification. Si l'on change le taux d'imposition dans l'article X, quels autres articles sont impactés ? Quels droits citoyens sont modifiés en conséquence ? Dans un DSL informel, il n'existe pas de réponse automatique à ces questions.

Le projet métacratie propose de résoudre ces trois problèmes en transformant le DSL informel du droit en une famille de DSLs formels — typés, vérifiables, traçables.

8.2. Les quatre DSLs du compilateur métacratique

Le compilateur métacratique repose sur quatre DSLs, chacun dédié à une facette du problème. Voici leurs noms, leurs domaines, et une analogie culinaire pour chacun :

  • Common.Dsl — le vocabulaire technique partagé : biens, espaces, périodes, procédures. C'est la liste des ingrédients de base que toutes les recettes partagent (sel, poivre, huile, farine). Sans ce vocabulaire commun, les autres DSLs ne pourraient pas se parler. → Partie 6 — Common.Dsl

  • Law.Dsl — le vocabulaire juridique : articles, alinéas, mesures, hiérarchie des normes. C'est la grammaire de la cuisine — les règles de composition qui déterminent comment les ingrédients se combinent en plats cohérents. → Partie 7 — Law.Dsl

  • Commons.Dsl — le vocabulaire politique des biens : commun, public, privé, contesté, en transition. C'est le guide nutritionnel qui dit quels ingrédients sont sains, lesquels sont à limiter, lesquels sont interdits dans certaines combinaisons. → Partie 8 — Commons.Dsl et Citizen.Dsl

  • Citizen.Dsl — le vocabulaire du citoyen comme récepteur de la loi : cas, circonstances, questions, recours. C'est le menu qui traduit le travail du chef en choix compréhensibles pour le convive. → Partie 8 — Commons.Dsl et Citizen.Dsl

8.3. Le compilateur croisé : quand deux DSLs se parlent

L'intérêt d'avoir plusieurs DSLs — et non un seul méga-langage — est qu'ils peuvent se vérifier mutuellement. Quand Law.Dsl déclare une loi sur le gaz et que Commons.Dsl déclare un budget carbone, un compilateur croisé peut détecter que la loi, si elle est appliquée, viole la contrainte carbone. Cette incohérence, qui aurait exigé des mois de débat interprétatif dans le langage naturel du droit, devient un compile error — un message d'erreur automatique, précis, traçable, émis avant que la loi ne soit promulguée.

C'est la thèse centrale de Appareil et compilateur, Pont 2 : les limites de ce qu'on peut exprimer formellement sont les limites de ce qu'on peut vérifier mécaniquement. Ou, pour revenir à Wittgenstein : les limites de notre langage sont les limites de notre monde. Si le vocabulaire juridique ne contient pas la notion de budget carbone, aucune vérification de cohérence entre loi et écologie n'est possible. Si le DSL le contient, la vérification devient mécanique.

8.4. META(Ex × Ty) comme signature de type

Le lecteur du dossier métacratie a rencontré la notation META(Ex × Ty) — parfois écrite META(France × 1995) ou META(UE × 2024). Cette notation est, littéralement, la signature de type d'un DSL paramétré par un couple Espace × Temps.

Chaque combinaison (un espace géographique ou juridictionnel, un moment dans le temps) produit une instance concrète du DSL. Law.France.2024.Dsl est le DSL juridique français tel qu'il s'applique en 2024. Law.UE.2024.Dsl est le DSL juridique européen de la même année. Ils partagent une racine commune (Law.Dsl) mais diffèrent dans leur vocabulaire concret — parce que le droit français et le droit européen ne sont pas les mêmes.

Cette paramétrisation par Espace × Temps est ce qui permet au compilateur métacratique de comparer des cadres juridiques à travers le temps (comment le droit français a-t-il changé entre 1995 et 2024 ?) et à travers l'espace (comment le droit français et le droit européen s'articulent-ils en 2024 ?). C'est le septième pont de Appareil et compilateur.


9. Le vocabulaire à retenir

Terme Définition
DSL (Domain-Specific Language) Langage dédié à un domaine précis, avec un vocabulaire et des règles restreints.
GPL (General-Purpose Language) Langage généraliste capable d'exprimer n'importe quoi (français, C#, Python).
DSL interne DSL qui vit à l'intérieur d'un langage hôte. Jargon professionnel du langage.
DSL externe DSL qui a sa propre syntaxe et son propre analyseur (SQL, HTML, Catala).
Déclaratif Qui décrit ce que l'on veut, pas comment l'obtenir.
Compilateur Programme qui lit un texte écrit dans un DSL, vérifie ses règles, et produit un résultat (code, erreurs, rapports).
Source Generator Composant du compilateur C# (Roslyn) qui lit des annotations et produit du code. Le « traducteur » des DSLs internes du projet.
M2 / M3 Niveaux d'abstraction dans l'architecture MOF : M3 est le méta-méta-modèle (les primitives qui décrivent les DSLs eux-mêmes), M2 est le DSL proprement dit.
META(Ex × Ty) Notation du projet métacratie : un DSL paramétré par un Espace (Ex) et un Temps (Ty). Chaque combinaison produit une instance concrète.

10. Pour aller plus loin

Pour le contexte philosophique :

Pour comprendre comment les DSLs communiquent entre eux :

  • Comment les DSLs communiquent — SOLID, architecture hexagonale et événements typés appliqués au droit et au rapport citoyen/État/administration.

Pour le pont entre DSLs et théorie politique :

Pour l'implémentation technique complète :

⬇ Download