Ruby object model: A matter of life and death2. Javier Lafora
Working at ASPgems
@eLafo
elafosobrerailes.blogspot.com
9. RBasic
RClass
RObject
MyClass
flags
klass
object instance_variables
super
flags
klass
constants
instance_variables methods
13. BasicObject
*super
*klass
Object Module
*super *super
*klass *klass
Musician
*super
*klass
name=()
name()
Class
*super
*klass
bruce
IronMaiden
*klass *super
@name=”bruce” *klass
15. Unshamesly taken from Burkey Libbey's presentation
“Ruby's Object Model: Metaprogramming and other Magic”
16. BasicObject
*super
*klass
Object
*super
*klass
Musician
*super
*klass
name=()
name()
bruce
IronMaiden
*klass *super
@name=”bruce” *klass
17. BasicObject
*super
*klass
Object
*super
*klass
to_s()
Musician
*super
*klass
bruce
IronMaiden
*klass *super
@name=”bruce” *klass
26. bruce
IronMaiden
*klass
*super
#bruce *klass
*klass
*super
flight_plane()
32. Musician Class
*super *super
*klass *klass
#Musician
*super
*klass
awesome_musicians()
34. Object
*super Module
Class
*klass *super
*klass
#Musician
*super
Musician *klass
*super awesome_musicians()
*klass
IronMaiden Class
*super *super
*klass *klass
38. BasicObject #BasicObject
*super *super
*klass *klass
Object #Object
*super *super
*klass *klass
Class
*super
Musician #Musician
*klass
*super *super
*klass *klass
IronMaiden #IronMaiden
*super *super
*klass *klass
39. “The superclass of the eigenclass of an object
is the object's class. The superclass of the
eigenclass of a class is the eigenclass of the
class's superclass.”
Paolo Perrotta
43. IronMaiden
*super
*klass
ICSinger
*super
*klass
high_pitch_from_hell()
#bruce
*klass
bruce *super
*klass
46. Musician
*super
*klass
ICHeavyMetal
*super
*klass
IronMaiden devil_horns()
*super
*klass
#bruce
*klass
*super
ICSinger
*super
bruce *klass
*klass high_pitch_from_hell()
50. ICHeavyMetal HeavyMetal
*super *klass
*klass *iv_tbl
*iv_tbl *m_tbl
*m_tbl
iv_tbl
m_tbl
devil_horns()
54. Object #Object
*super *super
*klass *klass
m_tbl m_tbl
Musician #Musician
*super *super
*klass *klass
m_tbl m_tbl
ICHeavyMetal HeavyMetal #HeavyMetal
*super *super *super
*klass *klass *klass
*m_tbl *m_tbl *m_tbl
IronMaiden #IronMaiden
*super *super
*klass *klass
*m_tbl *m_tbl
56. Object #Object
Musician #Musician
ICHeavyMetal HeavyMetal
ICHeavyMetal:: HeavyMetal::
InstanceMethods InstanceMethods
HeavyMetal::
ClassMethods
ICHeavyMetal::
IronMaiden ClassMethods
#IronMaiden
67. Metaprogramming with Ruby – Paolo Perrotta
http://mwrc2008.confreaks.com/11farley.html
http://www.rubyinside.com/a-look-into-rubys-object-model-3940.html
http://rhg.rubyforge.org/
http://www.madebydna.com/all/code/2011/06/24/eigenclasses-demystified.html
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
http://www.atalon.cz/rb-om/ruby-object-model/#sc-inheritance-sample
Editor's Notes Ruby C's VALUE type is interpreted as an integer, if it's (Fixnum, Symbol, true, false or nil), or a pointer, if it's a large value klass is always a large value struct st_table is mostly a ruby hash #define META_CLASS_OF_CLASS_CLASS_P(k) (METACLASS_OF(k) == (k)) #define METACLASS_OF(k) RBASIC(k)->klass