Industrialiser, c'est pouvoir répondre sans hésiter à une question simple, posée des milliers de fois : ce programme est-il exactement celui qui a été vérifié ? Comparer des fichiers texte ne suffit pas ; une espace ajoutée, un commentaire corrigé, et le fichier diffère sans que rien n'ait changé dans le comportement. À l'inverse, un chiffre modifié au milieu d'une ligne passe facilement inaperçu.
CakeLang répond par l'empreinte d'arbre : un condensé de 64 bits calculé sur l'arbre syntaxique, et non sur le texte. La commande cake hash la calcule ; chaque exemple de ce tome l'affiche.
L'empreinte couvre l'arbre entier, y compris le nom du projet, que la ligne de commande tire du nom du fichier. Pour comparer deux versions d'un même programme, on les enregistre donc sous le même nom, ici patrouille.cake. Les deux versions ci-dessous sont écrites différemment : l'une est commentée et aérée, l'autre compacte. Comparez leurs empreintes.
patrouille.cake?! Patrouille du drone D-7 : trois passages
=: tour=0%
$= (tour<3) {
Cake.emit(tour*10, 0, 5, tour)%
:+ tour=1%
}
[3 point(s) transmis au visualiseur par Cake.emit] → valeur finale : 3
=: déclarations · $= flux · :+ déclarations · bibliothèque : Cake.emit16cbb7c3367736ad (reproductible : cake hash patrouille.cake)patrouille.cake=: tour=0%
$= (tour<3) { Cake.emit(tour*10, 0, 5, tour)%
:+ tour=1% }
[3 point(s) transmis au visualiseur par Cake.emit] → valeur finale : 3
=: déclarations · $= flux · :+ déclarations · bibliothèque : Cake.emit16cbb7c3367736ad (reproductible : cake hash patrouille.cake)Les empreintes sont identiques. Le commentaire a été retiré avant l'analyse, la mise en page n'a jamais atteint l'arbre : pour le moteur, c'est le même programme.
Changeons maintenant une seule valeur : quatre passages au lieu de trois.
patrouille.cake=: tour=0%
$= (tour<4) {
Cake.emit(tour*10, 0, 5, tour)%
:+ tour=1%
}
[4 point(s) transmis au visualiseur par Cake.emit] → valeur finale : 4
=: déclarations · $= flux · :+ déclarations · bibliothèque : Cake.emitda3cb5bae524460f (reproductible : cake hash patrouille.cake)L'empreinte change. C'est la propriété qui rend l'industrialisation possible : l'empreinte est insensible à la forme et sensible au sens.
Dans une station à des centaines de milliers de points de contrôle, chaque mission validée est enregistrée avec son empreinte. Au moment du déploiement, on recalcule l'empreinte du programme reçu et on la compare à celle du registre. Si elles diffèrent, le programme n'est pas celui qui a été vérifié, quelle que soit la qualité apparente du texte. Le registre conserve aussi le nom de fichier sous lequel l'empreinte a été calculée, puisqu'il fait partie de l'arbre. Cette bibliothèque applique la même discipline à elle-même : chaque exemple porte son empreinte, et un outil de vérification recalcule toutes les empreintes à chaque évolution du moteur. Un exemple dont l'empreinte ou la sortie change est signalé avant publication.
On n'industrialise pas des fichiers, on industrialise des arbres. L'empreinte d'arbre dit si deux programmes sont le même, indépendamment de la manière dont ils sont écrits.
Le chapitre suivant se place du côté du développeur : écrire du C% au quotidien, lire les diagnostics et éviter les pièges.