[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: hash tables and GC
Date: Sat, 27 Aug 88 21:25:34 BST
From: Jeff Dalton <jeff%aiai.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>
...
It's probably best to have a concrete proposal, so I'll make one:
Add a keyword parameter :TEMPORARY to MAKE-HASH-TABLE. If this
argument is specified and not NIL, and if :TEST is #'EQ or #'EQL,
entries in the table may be removed by the GC if the key (i.e.,
an object EQ or EQL to the key) is accessible only through the
table(*). Entries in EQUAL tables are never so removed, nor are
numbers in EQL tables. [Explanation: in these cases, it is
generally possible to construct new objects that are respectively
EQUAL or EQL to the key.]
(*) Actually, I think this should be "accessible only through
such tables", because something might be in more than one.
Current practice:
Pop11 has a similar capability as "temporary properties".
(For this purpose, we can think of Pop as Lisp with a different
syntax.)
T has "weak sets". T also has OBJECT-HASH and OBJECT-UNHASH,
which use "weak pointers". If (OBJECT-HASH object) => i, then
(OBJECT-UNHASH i) => object if the object is still accessible
and false if it is not. i is an integer.
R2RS Scheme also has OBJECT-HASH and OBJECT-UNHASH, but they
were not "essential" and have since been removed.
Issues:
0. Can such tables be implemented?
Proof by existence: We have had such tables prototyped internally at
Symbolics for a year or so, but have not had the resources to qualify
them for release to customers. They can be quite efficient, and of
course can significantly improve the efficiency of some kinds of
programs.