From 0da234492a7cc0c11add5314f76adc63605a0374 Mon Sep 17 00:00:00 2001 From: SliTaz User Date: Thu, 28 Oct 2010 16:07:14 +0200 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mentation=20:=20on=20passe=20tout=20p?= =?UTF-8?q?ar=20pointeur.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- implementation/notes.txt | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/implementation/notes.txt b/implementation/notes.txt index 1458e44..f7eaa35 100644 --- a/implementation/notes.txt +++ b/implementation/notes.txt @@ -56,31 +56,35 @@ etc... (voir cltl et implementation/types.lisp). Pour connaître le type de chaque objet, on utilise les n premiers bits, plus les relations d'inclusion (voir implementation/types.lisp). Par ex (tous les mots font 32 bits) : -0... cons (les 31 bits restants sont l'adresse du car, puis 32 bits pour l'adresse du cdr). - Si tout est à 0 (64 bits tous à zéro), c'est nil -100... fixnum (29 bits) -10100... caractères unicode sur 8 bits ;; TODO : y a-t-il des caractères unicode dans le standard ? -10101... caractères unicode sur 16 bit -110... symbol -111... Tout le reste : -11100000... array -11100001... complex -11100010... bignum -11100011... rien. -111001xx... floats (xx : 00 = short, 01 = single, 10 = double, 11 = long) -11101000... hash-table -11101001... readtable -11101010... package -11101011... pathname -11101100... stream -11101101... random-state -11101110... function (attention: d'autes objets peuvent être des fonctions) +1ers bits Passage par pointeur / valeur Description +=============================================================== +0... P cons (les 31 bits restants sont l'adresse du car, puis 32 bits pour l'adresse du cdr). + Si tout est à 0 (64 bits tous à zéro), c'est nil +100... V fixnum (29 bits) +10100... V caractères unicode sur 8 bits ;; TODO : y a-t-il des caractères unicode dans le standard ? +10101... V caractères unicode sur 16 bit +110... P symbol +111... Tout le reste : +11100000... P array +11100001... P complex +11100010... P bignum +11100011... P ratio +111001xx... ? floats (xx : 00 = short, 01 = single, 10 = double, 11 = long) +11101000... P hash-table +11101001... P readtable +11101010... P package +11101011... P pathname +11101100... P stream +11101101... P random-state +11101110... P function (attention: d'autes objets peuvent être des fonctions) + +Comme il n'y a très peu de valeurs qui pourraient être passées par valeur, je suggère qu'on passe tout par pointeur. Les symboles ============ CLTL 2 -Un symbole, (par ex 'foo), est un "objet" (commençant par 010 dans l'exemple ci-dessus). +Un symbole, (par ex 'foo), est un "objet" (commençant par 110 dans l'exemple ci-dessus). Lorsqu'on écrit 'foo, c'est remplacé par un pointeur sur cet objet. Les symboles ont une liste de propriétés (qu'on implémentera par une alist) Les symboles ont un nom (qu'on implémentera par une chaîne de caractères).