992
|
1 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
|
|
2 Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
|
|
3 Mike Sperber <mike@xemacs.org>
|
|
4
|
|
5 New KKCC-GC mark algorithm:
|
|
6 configure flag : --use-kkcc
|
|
7
|
|
8 For better understanding, first a few words about the mark algorithm
|
|
9 up to now:
|
|
10 Every Lisp_Object has its own mark method, which calls mark_object
|
|
11 with the stuff to be marked.
|
|
12 Also, many Lisp_Objects have pdump descriptions, which are used by
|
|
13 the portable dumper. The dumper gets all the information it needs
|
|
14 about the Lisp_Object from the descriptions.
|
|
15
|
|
16 Also the garbage collector can use the information in the pdump
|
|
17 descriptions, so we can get rid of the mark methods.
|
|
18 That is what we have been doing.
|
|
19
|
|
20
|
|
21 DUMPABLE FLAG
|
|
22 -------------
|
|
23 First we added a dumpable flag to lrecord_implementation. It shows,
|
|
24 if the object is dumpable and should be processed by the dumper.
|
|
25 The dumpable flag is the third argument of a lrecord_implementation
|
|
26 definition (DEFINE_LRECORD_IMPLEMENTATION).
|
|
27 If it is set to 1, the dumper processes the descriptions and dumps
|
|
28 the Object, if it is set to 0, the dumper does not care about it.
|
|
29
|
|
30
|
|
31 TODO
|
|
32 ----
|
1204
|
33 After all Lisp_Objects have pdump descriptions (THEY DO NOW!!),
|
992
|
34 (mark_with_description) can get rid of the mark_object calls.
|
|
35
|
|
36
|
1204
|
37 There are a few Lisp_Objects, where there occured differences and
|
|
38 inexactness between the mark-method and the pdump description. All
|
|
39 these Lisp_Objects get dumped (except image instances), so their
|
|
40 descriptions have been written, before we started our work:
|
|
41
|
|
42 * alloc.c: lcrecord_list
|
|
43 description:
|
|
44 mark: performs extra gc_checking_assert() for various checks.
|
992
|
45
|
|
46 * alloc.c: cons
|
|
47 description: car and cdr
|
|
48 mark: cdr is marked, only if its != Qnil
|
|
49
|
|
50 * alloc.c: string
|
1204
|
51 description: ???
|
|
52 mark: ???
|
992
|
53
|
1204
|
54 * buffer.c: buffer
|
|
55 description: XD_LISP_OBJECT indirect_children
|
|
56 mark: indirect_children not marked if Qnull_pointer
|
992
|
57
|
|
58 * eval.c: subr
|
|
59 description: XD_DOC_STRING doc
|
|
60 mark: empty, nothing is marked
|
|
61
|
|
62 * file-coding.c: coding_system
|
1204
|
63 description: ???
|
|
64 mark: ???
|
992
|
65
|
1204
|
66 * glyphs.c: image_instance
|
|
67 description:
|
|
68 mark: mark method sets device to nil if dead
|