Why does Ruby cache the ancestors chain? I mean, not why the implementation i=
mplies that, but why it works that way conceptually.

I find that surprising, because classes conceptually have pointers to module=
s and method dispatching follows pointers. In particular you can add methods=
 to a module after inclussion in some class that will be found by instances o=
f such class.

Is it just a by-product of the linearization of the chain with proxies that s=
acrifices that full dynamic metaphor for speed?