[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Hash Tables and GC

re: Just to throw a little light into this discussion:   On Symbolics systems 
    there is a list of forms to be evaluated before any gc flip (ephemeral or 
    dynamic).  It's possible to implement whatever kind of weak pointers 
    strategy you want by explicitly clearing whatever pointers are "weak" 
    before the flip occurs.  The list is called SI:GC-EVERY-FLIP-LIST

Hmmmmm.   As barmar points out, this could't work _in general_  for weak
pointers unless you also restore the non-GC'd entries that you deleted.

PDP10 MacLisp provided a different variant of this -- the infamous GC
hook [sigh, there were so many "hooks" in MacLisp!].  Just _after_ a GC
finishs, but before any more consing is done, the user's "hook" function 
is run.  At this unique interval in time, it is possible to ask of a random 
address/pointer "Were you just GC'd"; [in fact, this capability is independent 
of whether it is a copying, or collecting or refcnt'ing GC].  Then using NIL 
type arrays, pointers could be kept around for inspection after the GC; the 
"NIL type" array simply means that the GC doesn't mark or descend the entries 
(just like XPOINTER type arrays in Interlisp-D].

GJS used this hook to good advantage in MicroPlanner and early Scheme
implementations.  In effect, I think he implemnted :temporary type
hash tables.

-- JonL --