>>>>> "B" == Ben Tilly <ben_tilly / hotmail.com> writes:

B> Why the swap?  It buys you the ability to see the
B> elements no matter what order they were in at the
B> start, but outside of artificial benchmarks, will
B> you see that?

 To reduce the number of entries.

B> I have to wonder about this.  We are defining ==
B> for an array.  And we are creating new arrays and
B> putting them in a hash, an act that causes == to
B> be called on them.  Your id sanity check makes that
B> work, but it seems fragile.

 it has actually the 2 methods (but with the swap). Apparently your method
 is faster with b.rb

B> Passing data in a thread local variable has the
B> advantage that you don't need to explicitly pass a
B> cache around.  

 An Array which contain a recursive Hash and recursive Array, no ?

B>              The disadvantage is that if you want
B> the code to behave correctly upon hitting an
B> exception, you need to protect various calls.

pigeon% grep rb_ensure tangle.c
        return rb_ensure(inspect_call, (VALUE)&iarg, protect_reset, 0);
pigeon% 

 

Guy Decoux