On Fri, Apr 8, 2011 at 7:56 PM, Yukihiro Matsumoto <matz / ruby-lang.org> wrote:
> Hi,
>
> In message "Re: [ruby-core:35667] Re: caching of the ancestor chain"
>  on Sat, 9 Apr 2011 09:40:59 +0900, Xavier Noria <fxn / hashref.com> writes:
>
> |So I wonder whether this is a design sacrifice for optimization purposes.
>
> Yes, kind of. If you can find a way to implement "proper" mixin
> relationship as efficient as it currently is, I'd love to take it.

What's actually slow about this? JRuby caches nothing but runs the
following benchmark 3x faster than 1.9.2p160 (and it's not Ruby
execution performance):

cls = Class.new
20.times { cls = Class.new(cls) }
5.times { puts Benchmark.measure { 1000000.times { cls.ancestors } } }

~/projects/jruby  jruby -rbenchmark -e "cls = Class.new; 20.times {
cls = Class.new(cls) }; 5.times { puts Benchmark.measure {
1000000.times { cls.ancestors } } }"
  1.002000   0.000000   1.002000 (  0.956000)
  0.510000   0.000000   0.510000 (  0.511000)
  0.474000   0.000000   0.474000 (  0.474000)
  0.493000   0.000000   0.493000 (  0.493000)
  0.466000   0.000000   0.466000 (  0.466000)

~/projects/jruby  ruby1.9 -rbenchmark -e "cls = Class.new; 20.times {
cls = Class.new(cls) }; 5.times { puts Benchmark.measure {
1000000.times { cls.ancestors } } }"
  1.350000   0.060000   1.410000 (  1.450674)
  1.370000   0.070000   1.440000 (  1.511301)
  1.350000   0.050000   1.400000 (  1.463408)
  1.350000   0.060000   1.410000 (  1.466519)
  1.360000   0.070000   1.430000 (  1.478440)

Am I misunderstanding the original question?

- Charlie