第3回 RHGの逆襲(at 新橋某所)

  • 「クラスの特異クラスがメタクラス」ということが途中までわかんなくて混乱した
  • RubyとCのダブル初心者の自分にはちょっとつらい
  • いい意味でぐだぐだ(by誰か)
  • メモ
  • superがない場合はnilではなく0(Cの偽)を渡さなければならない
                 super
                  │
                 klass
                  │
obj─instanceof─(obj)クラス
  • メソッドは必ずクラスに所属する
  • staticなメソッドはクラスの特異メソッド
  • rubyレベルで特異クラスにアクセスしようとすると、class.cのrb_singleton_classにより書き換わっているおそれがある
  • 1.9ではBasic Objectが追加
  • 1.9ではメタメタクラスがクラスに書き換わるのでメソッドが消える(元のメタクラスのメソッドが見えなくなる)
  • Classクラスの継承は禁止されている なぜ?
  • Moduleクラスは継承できる なぜ?
  • メソッドの探索はオブジェクトからクラスで親をたどるということで一貫
  • obj.classでは特異クラスは取れない
  • クラス継承に組み込まれたmoduleも取れない
    • evil-rubyを使えばできる。gem。ピュアRubyで書かれている
  • RUBY_T_ICASSは化身クラスを表している
  • rb_define_class_idの段階ではクラスはClassクラスの直接のインスタンスになっている。あとでメタクラスインスタンスになるように張り替えられる
  • メタクラスは特異クラスの一種なのでmake_metaclassという名前はよくない。実際には特異クラスを作るもの
  • 特異クラスは自分のインスタンスを知っている。でなければ<#class:A>と表示できない。このために逆参照を作っている
  • メタクラスは何のインスタンス?→Classクラスのメタクラスインスタンスになってるっぽい
  • かつてはこのあたりが一番難しかった
  • 構文解析の難しいところはbisonがやってくれている
  • 今はYARVが一番難しい
  • 汐留のライオンで4時半から懇親会
  • あかさたの人が未踏の話とか楽器の話とか
    • ピアノは体育会系
    • モテ楽器の条件は持ち運べるか/どこにでもあるか

【追記】
あかさたさんGJです
八角研究所 : RHG 片手に Ruby 1.9 を読む集い(The RHG Strikes Back)に参加した(3)