class Man < Foo; end class Choo < Man;end class Zoo < Choo;end Zoo.new.bar • method lookup é caro no Ruby (tree of hashes with methods) Friday, April 19, 13
class Man < Foo; end class Choo < Man;end class Zoo < Choo;end Zoo.new.bar • method lookup é caro no Ruby (tree of hashes with methods) • a cada novo callsite, o Ruby cacheia as instruções do método Friday, April 19, 13
class Man < Foo; end class Choo < Man;end class Zoo < Choo;end Zoo.new.bar • method lookup é caro no Ruby (tree of hashes with methods) • a cada novo callsite, o Ruby cacheia as instruções do método • inline caching: perto das instruções do callsite Friday, April 19, 13
definir classe end module B # definir módulo end class Object # reabrir objeto (monkeypatch) end class << "Hello World" # criar singleton end Friday, April 19, 13
definir classe end module B # definir módulo end class Object # reabrir objeto (monkeypatch) end class << "Hello World" # criar singleton end "Hello World".extend(B) # criar singleton Friday, April 19, 13
“o meu puro eu” em alemão •o Ruby cria eigenclasses em lazy mode •cada vez que um objeto ganha um método diferente da sua classe, sua eigenclass é criada Friday, April 19, 13
“o meu puro eu” em alemão •o Ruby cria eigenclasses em lazy mode •cada vez que um objeto ganha um método diferente da sua classe, sua eigenclass é criada •classes são sua própria eigenclass Friday, April 19, 13
-‐, [], []=, size, empty? •Array, Hashes, operações básicas •Se existe uma eigenclass, o Ruby usa as instruções não oUmizadas (até 100% mais lento, YMMV) Friday, April 19, 13