Une idée d'architecture ne vaut que si elle survit au contact de la machine. Ce tome est le plus concret de la bibliothèque : il ouvre le moteur CAKE© réel, celui qui tourne aujourd'hui dans CakeLand, et suit une instruction depuis le moment où on la tape jusqu'au moment où elle produit un effet observable. Chaque exemple de ce tome a été exécuté dans le moteur avant d'être imprimé ; la sortie affichée est la sortie réelle, et l'empreinte indiquée permet à n'importe qui de vérifier que le texte n'a pas dérivé depuis.
Quelle que soit la taille du programme, le moteur applique la même chaîne. Elle est courte, et c'est volontaire : une chaîne courte se vérifie.
?! et ?# sont retirés avant toute analyse : ils n'atteignent jamais l'arbre.{ } sont équilibrés avant d'aller plus loin.=$! gagne sur =$.Cake.emit vers le visualiseur 3D.Voici le plus petit programme qui traverse les six étapes. Il déclare une pression, la compare à un seuil et écrit un verdict.
t09c01-a.cake?! Poste de survie 3 : controle du sas
=: pression=92.5%
=: seuil=95.0%
=$ (pression<seuil) {
|> "Sas verrouille : pression insuffisante"%
}
Sas verrouille : pression insuffisante
<projet nom="t09c01-a" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="pression" type="var" valeur="92.5"/>
<declaration nom="seuil" type="var" valeur="95.0"/>
<si condition="pression<seuil">
<alors>
<bloc>
<appel methode="println" args=""Sas verrouille : pression insuffisante""/>
</bloc>
</alors>
</si>
</bloc>
</methode>
</classe>
</projet=: déclarations · =$ flux · |> entrées/sortiesc18fb25166c414ef (reproductible : cake hash t09c01-a.cake)Ouvrez le CXML sous l'exemple. Le commentaire a disparu. Le symbole =$ est devenu un nœud <si> avec sa condition ; |> est devenu un <appel> à println. C'est tout le propos du tome : le texte est une surface, l'arbre est la vérité. Deux sources qui diffèrent par la mise en page ou les commentaires produisent le même arbre et donc la même empreinte ; le chapitre 8 s'en sert pour industrialiser.
La deuxième sortie du moteur est géométrique. Cake.emit(x, y, z, t) transmet un point au visualiseur 3D de CakeLand. C'est ainsi qu'une trajectoire orbitale calculée en C% devient une courbe que l'on peut faire tourner à l'écran.
t09c01-b.cake?! Trois points d'approche d'un drone de ravitaillement Cake.emit(0, 0, 0, 0)% Cake.emit(32, 18, 8, 1)% Cake.emit(64, 11, 25, 2)% |> "Projection prete"%
Projection prete [3 point(s) transmis au visualiseur par Cake.emit]
<projet nom="t09c01-b" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<code-brut><![CDATA[Cake.emit(0, 0, 0, 0)%
Cake.emit(32, 18, 8, 1)%
Cake.emit(64, 11, 25, 2)%]]></code-brut>
<appel methode="println" args=""Projection prete""/>
</bloc>
</methode>
</classe>
</projet|> entrées/sorties · bibliothèque : Cake.emit161e86476cfc6e36 (reproductible : cake hash t09c01-b.cake)Une instruction C% n'existe vraiment qu'une fois devenue un nœud d'arbre. Tout ce que le moteur exécute, vérifie ou transmet part de cet arbre, et de lui seul.
Le chapitre suivant ouvre le moteur pièce par pièce et met un nom réel sur chacun de ses organes.