Stable name equality

David Feuer david.feuer at
Tue Aug 21 09:21:02 UTC 2018

On Tue, Aug 21, 2018, 4:32 AM Simon Peyton Jones <simonpj at>

> That's explained in the paper. A StableName# is a pointer to a stable name
> object in the heap that *contains* an index into the stable name table.
> Basically, the garbage collector needs to know whether a stable name is
> alive or not, so it can work out when to clear it from the table.
> Very good.  But could it be explained in a Note too?  The paper is from a
> long time ago, contains lots of surrounding explanation, and might well be
> out of date (even if it in fact is not out of date).

Certainly there should be a note, but as I mentioned in this thread, I
think we can probably actually do better than we presently do.

> So the entry in the table /also/ points to the same, heap-allocated
> StableName#?   Doesn’t that keep it alive? Or is this akin to the treatment
> of weak pointers?   (Which is part of the same paper.)

The stable name table is not in the root set. All its references are weak.

> Do we anywhere keep a pointer to the object that this is a stable name of?
Yes. That's in the stable name table entry. It's also the key for the
stable name hash table.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list