www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
Asoutenance.txt | 48++++++++++++++++++++++++++++++++++++++++++++++++
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.