Re: Ruby1.9 のクラスのメタ階層を整理する

いろいろ考える機会になっておもしろかったです。
Ruby のメタ階層が Smalltalk のそれよりぐちゃぐちゃしてる理由は

  • Ruby にはプロトタイプベース (っぽいもの) があって、Smalltalk にはないため。
  • Ruby には Module があって、Smalltalk にはないため。

かなぁ、と思いました。つまり Ruby の方が機能がリッチな分だけ複雑という説。Ruby 信者っぽい!
Ruby はプロトタイプベースを特異クラスの枠組みで扱うので、特異クラスのインスタンスがクラスとは限りません。メタ階層が一段飛んじゃう。あと、「クラス B の superclass がクラス A だったら、B の特異クラスの superclass は A の特異クラス」という単純なパターンが適用できなくなる。
Module の方は単純で、Class と Object の間に一段はさまるので、図として見にくくなってそうと思った。


Ruby 1.8 の「落とし穴」は、たぶん 1.8 のバグで、ruby-dev:36311 で報告しました。どうやら、「なんか動かない Ruby プログラムがあって、それを動くように Ruby 側を修正したけど、実はそのプログラムは動かなくて正常で、修正のせいで逆におかしくなってた」という感じっぽい。


そういえば前から不思議なんだけど、Smalltalk が Metaclass を用意してるのはなぜなんだろう。メタクラスのクラスは Class 、とすればもっと簡単になる気がする。なんか再帰を一回展開してる感じ。