commit 2140eeca89d8229ff78ca935d6e54a591ae6b044
parent 5730fef6aa32a0240800089eaf0ba6f91dd96b46
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Sun, 9 Jan 2011 07:31:13 +0100
Notes pour la soutenance.
Diffstat:
1 file changed, 48 insertions(+), 0 deletions(-)
diff --git a/soutenance.txt b/soutenance.txt
@@ -0,0 +1,48 @@
+Choses à ne pas oublier à dire lors de la soutenance (keywords: compilation lafourcade um2 m1)
+
+= lisp2li =
+on a choisit de ne pas utiliser le li du prof, mais au contraire d'utiliser du LISP simplifié qui est donc exécutable donc on a pu faire des tests unitaires pour voir si la transformation préservait le sens du programme.
+
+= tests unitaires =
+'test de régression': on a pu modifier des morceaux de code qui avait déjà les tests et voir que ça tournait toujours (après modifs)
+framework extensible : possibilité d'ajouter de nouveaux types de tests (ex. deftest-error, deftest-equiv)
+séparation des tests en modules / sous-modules, possibilité de lancer des tests de certains (sous-)modules seulement.
+contabilisation du nombre de tests, d'erreurs, etc.
+
+= mini-meval =
+C'est un méta-évaluateur 'naïf' mais qui supporte pratiquement tout LISP sauf CLOS (Common Lisp Object System)
+
+= syntaxe supportée =
+* Le 'eval-when'
+* Les 'tagbody' et 'go', les 'throw' et 'catch', les 'block' et 'return' et 'return-from' et le 'unwind-protect'
+* Les 'let', 'let*', 'flet', 'labels', 'macrolet',
+* Les 'macro'
+* Les 'lambda' avec capture de variables
+* Dans la 'lambda-list': '&optional', '&rest', '&key', '&allow-other-keys', '&aux', mais pas les '&body'
+* Plus progn, if, #', quote, etc.
+
+= match =
+* on a fait une fonction de pattern matching qui utilise une syntaxe proche de expressions régulières pour reconnaître des expressions LISP
+ qui ont une certaine forme / motif . On peut 'capturer' des portions de ce motif dans des variables qui sont accessibles dans le corps des
+ match.
+* On a aussi 'cond-match' qui est un dérivé d'un 'case' mais où chaque test est un match sur une expression.
+
+* On a aussi un 'match-automaton' qui est une sorte d'automate où les transitions ne sont pas des lettres mais des motifs. On avance dans
+ une liste en sélectionnant à chaque fois la première transition qui match avec l'élément en cours. On peut 'sauvegarder' des données à
+ chaque transition qui seront mises côte à côte dans une liste.
+* defmatch permet de définir une famille de fonctions, dont une seule est exécutée à l'appel (celle qui match avec le(s?) paramètres).
+* Pas d'optimisation à la compilation de quelle fonction match : la syntaxe de match est assez lourde, et vu qu'on ne match pas sur la forme
+ de l'appel de fonction, mais sur les valeurs passées en paramètre, l'optimisation n'est pas faisable 90% du temps.
+
+= compilation =
+* ON compile vers de l'assembleur assez proche de l'x86. On avait déjà un système d'exploitation assez simple qui tournait de manière
+ autonome sur un PC. On a donc stotché ensemble une REPL compilée et le SE de manière à avoir une REPL autonome qui ne dépend de rien.
+
+= garbage collector =
+* gestion du tas
+* on a un gc très simpliste qui copie les données d'une zone de la mémoire vers une autre et vice versa à chaque fois qu'elle est pleine. La
+ raison est que les autres gc nécessite une occupation variable de la mémoire pour l'exécution du gc qui peut être aussi grosse que la
+ mémoire occupée (O(n)).
+
+= fonctions LISP =
+* On a notre propre fonction 'read' et notre propre fonction 'format' pour être autonome.