Ce document répond à la critique : « On dirait un examen de LISP plus que de C. »
Ce cours construit un interpréteur LISP en C — chaque question qui évoque du LISP teste en réalité une compétence C précise, déguisée.
| Question | Apparence | Sous le capot, c'est du C |
|---|---|---|
| Q2 | Fermeture lexicale | Structures chaînées, malloc/copie de listes chaînées,
gestion mémoire, pointeurs de fonctions |
| Q3 | let vs set! |
Manipulation de listes chaînées, -> pointeur,
shadowing = ajout en tête, mutation = parcours et modification |
| Q8 | Arbre S-expression | Union discriminée (SEXPR_INT/SYM/CONS),
pointeurs récursifs, représentation mémoire d'un AST |
| Q9 | Profondeur d'arbre | Parcours récursif d'arbre binaire en C — exactement comme un AST de compilateur |
| Q13 | apply_closure |
Reconstruction d'une chaîne de struct Env à partir
d'un snapshot linéarisé |
| Q14 | Refcounting | malloc/free manuel, comptage de références,
double free, use-after-free, pointeurs partagés |
int/long long,
overflow silencieux, comportement indéfiniswitch, division par zéro,
VM entièrement en CPersonne ne contestera que ces 7,5 points sont du C pur.
Même les questions qui semblent parler de LISP demandent des compétences C fondamentales :
apply_closure) : reconstruction
d'une chaîne de struct en C, ajout de bindings, gestion d'environnements
chaînés — pointeurs, allocation, chaînage.Si l'examen ne contenait que du C classique (factorielle, chaînes, tableaux), que resterait-il du cours ? La spécificité de cette UV, c'est précisément d'utiliser le C comme outil pour construire quelque chose de plus grand — un langage.
Enlever le LISP, ce serait enlever la moitié de la matière enseignée. Les structures de données (listes chaînées, arbres, environnements), la gestion mémoire (malloc/free, refcounting), et l'architecture logicielle (REPL, VM, évaluateur) sont enseignées à travers le LISP, pas à la place du C.
L'examen teste bien des compétences C sur 20 points :
— soit 20/20 de C, dont le LISP est simplement le support pédagogique.
— Juin 2026
Enseignant responsable du cours « De zéro à λ en C », ENSISA 1A