L'avenir d'un moteur se prépare en disant précisément où il en est. Ce chapitre fait le point en septembre 2026, et raconte comment ce tome a lui-même servi d'outil d'ingénierie.
Pour la première fois, chaque exemple de la bibliothèque a été exécuté dans le moteur avant d'être imprimé. Cette discipline a immédiatement fait apparaître des défauts qu'aucun texte n'aurait montrés : les boucles $$ ne s'incrémentaient pas, $$: ne parcourait rien, $! ne sortait pas des boucles, les blocs d'erreur absorbaient l'instruction suivante, les fonctions étaient ignorées dans l'éditeur, et -4 devenait un texte.
Tous ces défauts ont été corrigés dans le moteur avant la rédaction. Chaque correction est accompagnée d'un test qui échoue sur l'ancien moteur et réussit sur le nouveau, et la suite de tests existante, plus de cinq cents cas, reste entièrement verte. Les empreintes des programmes d'exemple de CakeLand n'ont pas bougé.
| Domaine | État | Commentaire |
|---|---|---|
| Déclarations, affectations, conditions, tant-que | exécuté | Base de tous les exemples de la bibliothèque. |
| Pour, pour-chaque, rompre, continuer, faire-tant-que | exécuté | Corrigés en septembre 2026. |
| Essayer, capturer, final, lever, vérifier | exécuté | Syntaxe !{ … !} (e) { … } !~ { … }. |
Fonctions <@: | exécuté | Par toutes les portes depuis septembre 2026. |
| Bac à sable, budget d'exécution | exécuté | Vérifiés par des exemples qui échouent volontairement. |
| Noms inconnus lus comme texte | à décider | Changer ce comportement toucherait les programmes existants. |
| Objets, modificateurs, métaprogrammation | analysé | Reconnus et placés dans l'arbre ; exécution limitée. |
| Nouvelles familles d'opcodes | en portage | Android, couche d'exécution et scripts de haut niveau. |
Un dernier exemple, qui aurait tourné sans fin il y a quelques semaines, montre une boucle pour qui s'arrête dès que la condition de sécurité est atteinte.
t09c10-a.cake=: reserve=100%
$$ (tour=1; tour<=10; tour++) {
:+ reserve=0-15%
=$ (reserve<30) {
|> "Tour " + Cake.toString(tour) + " : reserve critique, retour"%
$!%
}
}
Tour 5 : reserve critique, retour
<projet nom="t09c10-a" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="reserve" type="var" valeur="100"/>
<pour init="tour=1" condition="tour<=10" increment="tour++">
<bloc>
<affectation cible="reserve" valeur="reserve + 0 - 15"/>
<si condition="reserve<30">
<alors>
<bloc>
<appel methode="println" args=""Tour " + Cake.toString(tour) + " : reserve critique, retour""/>
<code-brut><![CDATA[break]]></code-brut>
</bloc>
</alors>
</si>
</bloc>
</pour>
</bloc>
</methode>
</classe>
</projet=: déclarations · $$ flux · :+ déclarations · =$ flux · |> entrées/sorties · $! flux · bibliothèque : Cake.toString30f35c29d9e810e3 (reproductible : cake hash t09c10-a.cake)La leçon de ce tome dépasse la liste des correctifs : une documentation qui exécute ses exemples devient un banc d'essai du moteur. Chaque nouvelle version de CakeLang recalculera les sorties et les empreintes de toute la bibliothèque. Un écart signalera soit un défaut du moteur, soit un texte à mettre à jour, et dans les deux cas on le saura avant les lecteurs.
L'avenir d'un moteur commence par un état des lieux vérifiable. Une documentation qui exécute ses exemples cesse d'être un commentaire du système : elle en devient l'un des contrôles.
Le dernier chapitre du tome rassemble la chaîne complète en un seul programme.