From: Nattfodd <[EMAIL PROTECTED]>
   Date: Tue, 19 Jul 2005 04:03:49 +0200

   Leopold Toetsch wrote:

   >  
   >    gen n           |       gen j
   >    [ A ] -> [ B ] -|-----> [ C ]
   >      ^                      |
   >      +----------------------+
   >
   > A circular data structure doesn't really change the picture, except,
   > when again scanning up to generation j, and we find object C being
   > alive, we'd have to restart scanning at object A, by following the
   > backreference.
   > If non of A, B, or C is referenced from elsewhere, we would still
   > delete the whole reference loop.

   Hi,
   I don't know how this could work. First, we need more than one pass (if
   each alive object in the IGP needs to follow the backreference, this can
   lead to between |alive_IGP_set| and 2^|alive_IGP_set| passes...).
   And I don't see either how we could check if the loop is referenced from
   elsewhere, as the mark is a single bit.

   A solution I'm thinking of is using two bits for the marking . . .

   I hope there's a (much) more simple way :/
   And this is not at all one pass mark&sweep...

   Regards,
   Alexandre

That's what concerns me.  Even if you devise an efficient way to detect
garbage in the IGP list, a straightforward two-pass implementation might
be simpler, and probably faster.

   Of course, if you believe that circular structures are rare, then it
might be less of an issue.  But that's a dangerous road to traverse; if
circular structures are supported poorly by Parrot, then their rarity
could become a self-fulfilling prophecy.

                                        -- Bob

Reply via email to