AP3 — Compiler notre langage
L’arbre d’AP2 devient des octets pour une petite machine à pile : instructions, pile, variables, puis sauts. En fin de séance, nous comparons la machine à l’interpréteur et voyons ce qu’un typeur saurait avant d’exécuter.
AP3, 13 h 45 – 17 h
Comment suivre la séance
Nous commençons par les repères CPU : mémoire, registres, PC, programme en mémoire, pile et cache (slides 7–11). Puis quatre étapes au même rythme : cours, atelier, reprise. Les arbres sont écrits à la main dans les notebooks ; votre parser d’AP2 n’a pas besoin d’être terminé. Les octets et les maps sont les deux formes Elixir nouvelles : une slide les rappelle avant chaque atelier.
À vous de jouer dans Livebook
1. Lire et écrire des instructions
Définissez un format binaire et distinguez opcode, opérande et adresse en octets.
Slides 12 à 19Elixir : motifs binaires <<…>>, byte_size/1 · poly, chap. 6.
2. Faire tourner une machine à pile
Suivez le compteur ordinal, la pile et la boucle lecture–décodage–exécution. Compilez un arbre arithmétique en postordre.
Slides 20 à 29Elixir : la pile est une liste, with · poly, chap. 3, 4 et 6.
3. Où ranger les variables ?
Associez les noms à des cases locales. Distinguez la table du compilateur des valeurs manipulées par la machine.
Slides 31 à 38Elixir : maps, Map.fetch/2, Map.put/3 · poly, chap. 6.
4. Assembler et prendre une branche
Résolvez les étiquettes en deux passes, calculez les adresses et compilez case avec deux sauts.
Slides 39 à 48Elixir : Enum.reduce/3 avec accumulateur, tuples comme étiquettes · poly, chap. 6.
Rendu
Cycle 1 · AP1–AP3 — dimanche 6 décembre 2026 à 23 h 59
Gardez vos étapes dans AP3/. Je préciserai en cours les notebooks à terminer, les cellules attendues et le point d’arrêt, selon notre avancement. Un seul rendu réunit AP1–AP3 ; nous en reparlerons à l’oral en AP4. Les prolongements non demandés restent facultatifs.
Laboratoires et défis facultatifs
Ces exercices sont facultatifs. Gardez vos essais dans entrainement/ ; pour un bonus, joignez les notebooks choisis au rendu annoncé en cours. Vous pouvez reprendre une notion ou explorer un point plus avancé.
Pour reprendre une notion
Reprendre les fermetures d’AP2
Un laboratoire guidé, indépendant de la machine : l’environnement capturé, l’appel, puis une fonction qui fabrique une fonction. Utile avant l’étape 5.
Reprendre les priorités et les arbres
Un parseur limité aux expressions entières, pour reprendre les priorités et les arbres. Ce laboratoire est indépendant de l’interpréteur principal.
Reprendre la pile avec une calculatrice RPN
Une calculatrice postfixe et ses commandes, pour prolonger le laboratoire de pile d’AP1.
Pour aller plus loin
Étape 5 — Appeler une fonction
Pour qui a terminé les quatre étapes, ou pour toute la classe en « locomotive » : trois instructions, une pile de cadres d’appel et des fonctions fermées, sans capture. Le travail à rendre sera annoncé en cours ; les prolongements non demandés sont facultatifs.
TP ★ — Récursion et programmation dynamique
Escaliers, rendu de monnaie, mémoïsation : la récursion qui calcule vite.
Les défis de la séance
Des exercices plus durs, énoncés secs, zéro solution. Pour ceux qui ont fini le livebook et en veulent encore.
Un bout de syntaxe oublié ?
Le poly reprend le langage aux chapitres 1 à 4, avec ses exemples et leurs résultats. Pour cette séance, relisez le chapitre 6.
