[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: hash tables and GC
There is also the rather similar "weak pointer" notion, which I believe is
implemented in T. The operations on a weak pointer are something like:
MAKE-WEAK-POINTER Object => Weak-Pointer
INDIRECT-WEAK-POINTER Weak-Pointer => Object or NIL
Having a weak pointer to an object allows you to keep track of it, but
doesn't prevent GC. Although I haven't ever used either weak pointers or
GC'able hash-tables, I think weak pointers are superior as a language
feature, since they are more primitive and potentially more efficient.
The GC-able hash-table notion unnecessarily complicates the semantics by
rolling in hash-table semantics when the real issue is with GC. Usually
the association capacity of hashtables is unnecessary: instead of
weak-hashing from A to B, allocate another slot in A to hold the weak
pointer to B.
The implementation issues are basically the same as for GC-able
hash-tables, but weak pointers seem to have a sight edge. They can be
implemented by allocating weak pointers in a special area, but given
abundant tag bits, immediate representations are also conceivable.