F13 · N syntaxes, un seul graphe
Le pivot multi-langages
Plusieurs langages entrent, un seul graphe d'opérations sort — et deux syntaxes différentes qui disent la même chose donnent la même graine, à l'octet.
01Ce que c'est
Les outils qui manipulent du code partent en général d'un arbre de syntaxe, donc d'un arbre par langage, donc d'un outillage par langage. Ici les frontends convergent vers une seule représentation : un graphe d'opérations, commun à tous.
La conséquence est vérifiable et inhabituelle : deux programmes écrits dans deux syntaxes différentes, qui font la même chose, produisent la même graine à l'octet près. Ce n'est pas une équivalence déclarée, c'est une égalité binaire.
Le code peut alors voyager en graine, la syntaxe d'origine effacée, et être relu ensuite de façon byte-exacte.
02Les points clés
- Un graphe, pas N arbres
- Les outils d'analyse s'écrivent une fois, pas une fois par langage.
- Convergence vérifiable
- Deux syntaxes équivalentes ⇒ la même graine à l'octet.
- Le code voyage en graine
- La syntaxe d'origine est effacée ; la relecture reste byte-exacte.
03Quatre points de vue
◐ Ce que ça change à l'écran
Qu'est-ce que je vois, et qu'est-ce que je fais autrement ?
Vous ouvrez du code dans une langue que l'outil n'était pas censé connaître, et il le comprend quand même — parce qu'il ne raisonne pas sur la langue mais sur ce qu'elle dit.
⌥ Brancher ça chez soi
Par où ça entre dans mon logiciel, et qu'est-ce que ça me coûte ?
Vous écrivez votre analyse une fois, contre le graphe, pas une fois par langage contre un arbre de syntaxe. Ajouter un langage n'oblige pas à réécrire l'outil qui le consomme.
◆ Ce que ça vous fait gagner
Quel risque ça lève, et qu'est-ce qui est vérifiable ?
Le coût d'un outillage multi-langages est habituellement multiplicatif : un outil par langage, à maintenir chacun. Ici il est additif d'un côté seulement — les frontends — et fixe de l'autre.
✻ Pourquoi ça marche
Quel est le principe, et en quoi il diffère de l'existant ?
L'arbre de syntaxe est tellement le point de départ par défaut qu'on ne le présente plus comme un choix. En le remplaçant par un graphe d'opérations, la syntaxe redevient ce qu'elle est : un habillage de surface, pas la structure.
04À quoi ça sert
- Outillage d'analyse qui doit couvrir plusieurs langages sans se dupliquer
- Migration et archivage de code indépendants de la syntaxe
- Comparaison de programmes au-delà de leur écriture
05Ce que ça ne fait pas
- Six frontends, ce n'est pas « tous les langages ». Chaque langage supplémentaire est un travail réel, pas un réglage.
- L'égalité byte-exacte entre deux syntaxes est établie sur les cas essayés ; elle n'est pas un théorème, et elle ne le sera pas.
- Le voyage du code en graine est câblé mais éteint par défaut : il s'allume, il ne se rencontre pas tout seul.
06Lectures disciplinaires
- ⧉ Économie
- Le coût d'un outillage multi-langages est habituellement multiplicatif : un outil par langage, chacun à maintenir, chacun à faire évoluer. Ici il devient additif d'un seul côté — les frontends — et fixe de l'autre. C'est une bascule de structure de coût, pas une remise.
- ✦ Philosophie
- L'arbre de syntaxe est un point de départ si universel qu'il a cessé de se présenter comme un choix. Le remplacer par un graphe d'opérations remet la syntaxe à sa place : un habillage de surface, et non la structure de ce qui est dit. Deux écritures différentes du même geste cessent alors d'être deux objets qui se ressemblent — elles deviennent le même objet.
- ✑ Langue & transmission
- Une seule représentation pour plusieurs langues, c'est très exactement ce qu'une langue pivot fait en traduction : on ne traduit pas de chaque langue vers chaque autre, on passe par un intermédiaire commun. Le nombre de chemins à écrire cesse de croître au carré du nombre de langues.