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

hash tables and GC

	Apropos of hash tables, one feature of Pop(Log) that I sometimes want
	to have is "temporary properties".  They are essentially hash tables
	such that being in them does not prevent being garbage collected.  An
	object might have a property (in this table) and nonetheless be
	collectable.  Is there some problem with such tables that makes them
	not a good idea?  They certainly seem to be something users can't
	write for themselves.

I'm not sure just what you mean by "being in" a hash table.  I have
commonly seen the following case -- is it what you have in mind?

I have an EQ hash table H.  My program will never apply the MAPHASH accessor
to H.  Therefore, the fact that H is accessible to my program does NOT
imply that any of the keys or values are accessible.  If the pair [K V]
is in the table, then if K is independently accessible, V is also
accessible.  But if K is not independently accessible, it is garbage, and
so is V unless V is independently accessible.

Do any implementations have "non-mappable" hash tables and a Garbage
Collector that takes this into account?  [The condition that the hash
table equivalence be EQ was only stated to make the explanation simple to
follow intuitively.  If we think of the key K as an exemplar of
some equivalence class, and regard the phrase "K is independently
accessible" as meaning "some element of the equivalence class 
containing K is independently accessible",  then the rationale holds
regardless of the table's equivalence predicate, and can, in fact, be
conservatively followed for EQL and EQUAL hash tables.