annotate src/README.kkcc @ 4792:95b04754ea8c

Make #'equalp more compatible with CL; add a compiler macro, test & doc it. lisp/ChangeLog addition: 2009-11-08 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (cl-string-vector-equalp) (cl-bit-vector-vector-equalp, cl-vector-array-equalp) (cl-hash-table-contents-equalp): New functions, to implement equalp treating arrays with identical contents as equivalent, as specified by Common Lisp. (equalp): Revise this function to implement array equivalence, and the hash-table equalp behaviour specified by CL. * cl-macs.el (equalp): Add a compiler macro for this function, used when one of the arguments is constant, and as such, its type is known at compile time. man/ChangeLog addition: 2009-11-08 Aidan Kehoe <kehoea@parhasard.net> * lispref/objects.texi (Equality Predicates): Document #'equalp here, as well as #'equal and #'eq. tests/ChangeLog addition: 2009-12-31 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Test much of the functionality of equalp; add a pointer to Paul Dietz' ANSI test suite for this function, converted to Emacs Lisp. Not including the tests themselves in XEmacs because who owns the copyright on the files is unclear and the GCL people didn't respond to my queries.
author Aidan Kehoe <kehoea@parhasard.net>
date Thu, 31 Dec 2009 15:09:41 +0000
parents ac1be85b4a5f
children 3889ef128488
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
1 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
2 Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
3 Mike Sperber <mike@xemacs.org>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
4
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
5 updated 2003-07-29
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
6
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
7 New KKCC-GC mark algorithm:
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
8 configure flag : --use-kkcc
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
9
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
10 For better understanding, first a few words about the mark algorithm
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
11 up to now:
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
12 Every Lisp_Object has its own mark method, which calls mark_object
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
13 with the stuff to be marked.
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
14 Also, many Lisp_Objects have pdump descriptions memory_descriptions,
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
15 which are used by the portable dumper. The dumper gets all the
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
16 information it needs about the Lisp_Object from the descriptions.
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
17
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
18 Also the garbage collector can use the information in the pdump
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
19 descriptions, so we can get rid of the mark methods.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
20 That is what we have been doing.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
21
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
22
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
23 DUMPABLE FLAG
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
24 -------------
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
25 First we added a dumpable flag to lrecord_implementation. It shows,
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
26 if the object is dumpable and should be processed by the dumper.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
27 The dumpable flag is the third argument of a lrecord_implementation
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
28 definition (DEFINE_LRECORD_IMPLEMENTATION).
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
29 If it is set to 1, the dumper processes the descriptions and dumps
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
30 the Object, if it is set to 0, the dumper does not care about it.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
31
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
32
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
33 KKCC MARKING
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
34 ------------
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
35 All Lisp_Objects have memory_descriptions now, so we could get
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
36 rid of the mark_object calls.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
37 The KKCC algorithm manages its own stack. Instead of calling
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
38 mark_object, all the alive Lisp_Objects are pushed on the
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
39 kkcc_gc_stack. Then these elements on the stack are processed
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
40 according to their descriptions.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
41
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
42
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
43 TODO
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
44 ----
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
45 - For weakness use weak datatypes instead of XD_FLAG_NO_KKCC.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
46 XD_FLAG_NO_KKCC occurs in:
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
47 * elhash.c: htentry
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
48 * extents.c: lispobject_gap_array, extent_list, extent_info
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
49 * marker.c: marker
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
50 Not everything has to be rewritten. See Ben's comment in lrecord.h.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
51 - Clean up special case marking (weak_hash_tables, weak_lists,
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
52 ephemerons).
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
53 - Stack optimization (have one stack during runtime instead of
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
54 malloc/free it for every garbage collect)
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
55
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
56 There are a few Lisp_Objects, where there occured differences and
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
57 inexactness between the mark-method and the pdump description. All
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
58 these Lisp_Objects get dumped (except image instances), so their
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
59 descriptions have been written, before we started our work:
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
60 * alloc.c: string
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
61 description: size_, data_, and plist is described
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
62 mark: only plist is marked, but flush_cached_extent_info is called.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
63 flush_cached_extent_info ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
64 free_soe ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
65 free_extent_list ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
66 free_gap_array ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
67 gap_array_delete_all_markers ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
68 Add gap_array to the gap_array_marker_freelist
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
69
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
70 * glyphs.c: image_instance
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
71 description: device is not set to nil
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
72 mark: mark method sets device to nil if dead
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
73 See comment above the description.