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

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

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