Hi!

I have an application where I will have two hash tables around, one to
map certain objects to a structure providing information about them,
the other one to map identifiers to objects (the same set of
objects). I want both hash tables to be weak, i.e. I want the
respective entries in both hash tables to disappear when the object in
question is no longer referenced.

While other CL implementations like LW offer hash tables which can be
"weak" with respect to their keys or values or both, CMUCL doesn't
seem to have this feature. So, my idea for emulating this in CMUCL
goes like this:

1. Have a CMUCL-weak hash table H1 where the objects are keys and the
   values are structures keeping information about the objects.

2. Have another, normal, hash table H2 where the values are weak
   pointers to the same objects.

3. Once an object won't be referenced from elsewhere the respective
   entry in H1 will disappear automatically while the weak pointer in
   H2 which points to this object will be broken.

   Is that correct or do the weak hash key and the weak pointer
   somehow interact and thus prevent the object from being garbage
   collected?

4. Lastly, I will establish a function in EXTENSIONS:*BEFORE-GC-HOOKS*
   which will scan H2 for broken pointers and remove the corresponding
   entries to completely simulate weak hash values.

Does this sound like a reasonable strategy or am I missing something?

Thanks,
Edi.

Reply via email to