Bug sur le markdown.
This commit is contained in:
parent
cccf02f8c6
commit
a4ffb5fcd9
|
@ -5,9 +5,9 @@ Tests unitaires
|
||||||
* séparation des tests en modules / sous-modules, possibilité de lancer des tests de certains (sous-)modules seulement.
|
* séparation des tests en modules / sous-modules, possibilité de lancer des tests de certains (sous-)modules seulement.
|
||||||
* Statistiques : contabilisation du nombre de tests, d'erreurs, etc.
|
* Statistiques : contabilisation du nombre de tests, d'erreurs, etc.
|
||||||
|
|
||||||
`mini-meval`
|
mini-meval
|
||||||
============
|
==========
|
||||||
C'est un méta-évaluateur «naïf» mais qui supporte pratiquement tout LISP sauf CLOS (Common Lisp Object System)
|
`mini-meval` est un méta-évaluateur «naïf» mais qui supporte pratiquement tout LISP sauf CLOS (Common Lisp Object System).
|
||||||
|
|
||||||
Syntaxe supportée par mini-meval et le simplificateur
|
Syntaxe supportée par mini-meval et le simplificateur
|
||||||
=====================================================
|
=====================================================
|
||||||
|
@ -20,14 +20,17 @@ Syntaxe supportée par mini-meval et le simplificateur
|
||||||
* Dans la `lambda-list`: `&optional`, `&rest`, `&key`, `&allow-other-keys`, `&aux`, mais pas les `&body`
|
* Dans la `lambda-list`: `&optional`, `&rest`, `&key`, `&allow-other-keys`, `&aux`, mais pas les `&body`
|
||||||
* Plus `progn`, `if`, `#'`, `quote`, etc.
|
* Plus `progn`, `if`, `#'`, `quote`, etc.
|
||||||
|
|
||||||
`lisp2li`
|
lisp2li
|
||||||
=========
|
=======
|
||||||
On a choisi de ne pas utiliser le li proposé par les encadrants, mais au contraire d'utiliser du LISP (très) simplifié qui est donc exécutable ce qui nous a permis de faire des tests unitaires pour voir si la transformation préservait le sens du programme.
|
* On a choisi de ne pas utiliser le langage intermédiaire proposé par les encadrants, mais au contraire d'utiliser du LISP (très) simplifié
|
||||||
|
qui est donc exécutable ce qui nous a permis de faire des tests unitaires pour voir si la transformation préservait le sens du programme.
|
||||||
|
* Vu qu'on rajoute des sortes de special-form dans le langage intermédiaire qui ne font pas partie de LISP, pour que le langage
|
||||||
|
intermédiaire reste exécutable, on emballe le code généré dans un `macrolet` qui définit des macros transformant des special-operator en
|
||||||
|
code LISP équivalent.
|
||||||
|
* Cette transformation est assurée par la fonction squash-lisp décrite ci-dessous.
|
||||||
|
|
||||||
Cette transformation est assurée par la fonction squash-lisp décrite ci-dessous.
|
squash-lisp
|
||||||
|
===========
|
||||||
`squash-lisp`
|
|
||||||
=============
|
|
||||||
* En 3 passes :
|
* En 3 passes :
|
||||||
* Passe 1 :
|
* Passe 1 :
|
||||||
* macro-expansion (on utilise `mini-meval`) et `eval-when`.
|
* macro-expansion (on utilise `mini-meval`) et `eval-when`.
|
||||||
|
@ -90,10 +93,14 @@ Ramasse-miettes
|
||||||
===============
|
===============
|
||||||
* gestion du tas
|
* 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.
|
* 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.
|
||||||
* Ce type de gc s'appelle un [two-finger garbage collector](http://en.wikipedia.org/wiki/Cheney's_algorithm "Article wikipédia").
|
* Ce type de gc s'appelle un [two-finger garbage collector][gc-wp].
|
||||||
* La raison de ce choix de modèle de gc est que les autres types de gc nécessitent une occupation variable de la mémoire pour l'exécution du
|
* La raison de ce choix de modèle de gc est que les autres types de gc nécessitent une occupation variable de la mémoire pour l'exécution du
|
||||||
gc (nécessaire pour le parcours en largeur/profondeur) qui peut être aussi grosse que la mémoire occupée (𝑶(𝑛)) dans le pire des cas.
|
gc (nécessaire pour le parcours en largeur/profondeur) qui peut être aussi grosse que la mémoire occupée (𝑶(𝑛)) dans le pire des cas.
|
||||||
|
|
||||||
Implémentation de fonctions LISP
|
Implémentation de fonctions LISP
|
||||||
================================
|
================================
|
||||||
* On a notre propre fonction `read` et notre propre fonction `format` pour être autonomes.
|
* On a notre propre fonction `read` et notre propre fonction `format` pour être autonomes.
|
||||||
|
|
||||||
|
Références
|
||||||
|
==========
|
||||||
|
[gc-wp]: http://en.wikipedia.org/wiki/Cheney's_algorithm "Article wikipédia décrivant le fonctionnement de notre ramasse-miettes."
|
||||||
|
|
Loading…
Reference in New Issue
Block a user