1: Tokenization and ParsingʢίʔυΛύʔπʹόϥͯ͠ɺߏจΛղੳ͢Δʣ 2: CompilationʢίϯύΠϧΑ͏͠ΒΜɺͱࢥͬͨΒKoichi Sasadaͷ໊લ͕ʣ 3: How Ruby Executes Your CodeʢRubyͲ͏ͬͯ͜ͷίʔυΛ࣮ߦͯ͠Δͷ͔ʣ 4: Control Structures and Method Dispatch ʢ੍ޚߏͱ͔ϝιουݺͼग़͠ͱ͔ʣ 5: Objects and ClassesʢΦϒδΣΫτͱΫϥεɺͳɻ͋Εͳɻʣ 6: Method Lookup and Constant Lookup ʢϝιου୳ࡧͱఆ୳ࡧʣ 7: The Hash Table: The Workhorse of Ruby Internals ʢϋογϡςʔϒϧɺRuby෦ͷͨΒ͖Ϟϊʣ 8: How Ruby Borrowed a Decades-Old Idea from Lisp ʢϒϩοΫRubyಠࣗͷಛͱ͔͡ΌͶ͔͑Βʂʣ 9: Metaprogramming ʢࠇຐज़ʣ 10: JRuby: Ruby on the JVM ʢJVMʣ, 11: Rubinius: Ruby Implemented with Ruby ʢRubiniusʣ 12: Garbage Collection in MRI, JRuby, and Rubinius ʢॲཧܥʹΑΔGC͍Ζ͍Ζʣ ࣍ͬ͟ͱݟ
δΣωϦοΫΦϒδΣΫτ simple ruby value String info… Array info… VALUE RSring flags klass RBasic VALUE RArray flags klass RBasic integer value Flags RObject δΣωϦοΫΦϒδΣΫτ FIXNUM_FLAG : 1 simple ruby value RObject numiv ivptr VALUE flags klass RBasic ଞɺRRegexp ͳͲΈࠐΈͷ ΦϒδΣΫτ ଞɺsymbolͳͲ ୯७ͳ
Ϟδϡʔϧͷϝιου୳ࡧॱ RClass: Mathematician super RClass: Person super RClass: Object NPEVMF1SPGFTTPSFOE ! DMBTT.BUIFNBUJDJBO1FSTPO JODMVEF1SPGFTTPS FOE RClass: AnotherSClass RClass: Professor super super 1 3 2 4 5
Ϟδϡʔϧ…includeͷ࣮ RClass: Mathematician super RClass: Person super RClass: Professor RClass: AnotherSClass super RClass: Object super 1 3 2 4 5 RClass: Professor super inculde࣌ʹϞδϡʔϧͷίϐʔ͕ Ϋϥεͱͯ͠࡞͞Εɺ ܧঝπϦʔʹࠩ͠ࠐ·ΕΔ super ίϐʔʂ (module) (class)
1ͭͷΫϥεʹೋͭͷϞδϡʔϧ DMBTT.BUIFNBUJDJBO1FSTPO JODMVEF1SPGFTTPS JODMVEF&NQMPZFF FOE RClass: Mathematician super RClass: Person super RClass: Professor 1 4 2 RClass: Professor ίϐʔʂ super RClass: Employee RClass: Employee super 3
ϞδϡʔϧΛΠϯΫϧʔυͨ͠ Ϟδϡʔϧ NPEVMF1SPGFTTPS JODMVEF&NQMPZFF FOE RClass: Professor super RClass: Employee super RClass: Employee super ίϐʔʂ Ϟδϡʔϧͷsuper͕includeͨ͠ ϞδϡʔϧͷίϐʔΫϥεΛࢦ͢
ϞδϡʔϧΛΠϯΫϧʔυͨ͠ ϞδϡʔϧͷΠϯΫϧʔυ NPEVMF1SPGFTTPS JODMVEF&NQMPZFF FOE DMBTT.BUIFNBUJDJBO1FSTPO JODMVEF1SPGFTTPS FOE RClass: Mathematician super RClass: Person super 1 4 2 ίϐʔʂ RClass: Professor super RClass: Employee super RClass: Professor super RClass: Employee super RClass: Employee super 3
Ϟδϡʔϧ…extendͷ࣮ RObject: klass RClass: Person super 1 3 2 extend࣌ʹϞδϡʔϧͷίϐʔΫϥε͕ ࡞͞ΕɺΦϒδΣΫτͷΫϥεʹͳΔ RClass: Professor RClass: Professor super super ίϐʔʂ (module) (class) RClass: Mathematician super NPEVMF1SPGFTTPSFOE DMBTT.BUIFNBUJDJBO1FSTPO FOE N.BUIFNBUJDJBOOFX NFYUFOE1SPGFTTPS
Ϟδϡʔϧ…prependͷ࣮ RClass: Mathematician super RClass: Oject super RClass: Professor super attr_accessor :name def name “Prof. #{name}” end RClass: Mathematician super origin #prepend 1. Mathematican ͷίϐʔ(OriginΫϥεʣΛɺ ΠϯΫϧʔυ͞ΕͨϞδϡʔϧͷ εʔύʔΫϥεʹ͢Δɻ 2. ΦϦδφϧͷΫϥεͷ શͯͷϝιουΛɺ OriginΫϥεʹҠ͢ Original Origin
ղ: ΠϯΫϧʔυޙͷϞδϡʔϧͷ ϝιουՃ QPJODBSFQSJNBSZ@DMBTTSPPN l"z ΠϯΫϧʔυޙʹϞδϡʔϧʹՃ͞Εͨ ϝιουݺͼग़ͤΔ ˎϝιουςʔϒϧͰͳ͘ɺ ϝιουςʔϒϧͷϙΠϯλΛίϐʔ͢ΔͨΊ method table primary_classroom RClass: Mathematician super ίϐʔʂ RClass: Professor super m_tbl RClass: Professor super m_tbl