Rubiniusを眺める

Rubiniusをちょっとだけ調べてみた。
文字エンコーディング
Stringオブジェクトの中にencodingフィールドが用意されているが、実際にはnilがセットされているだけ。指定する方法も見当たらない。今は、シングルバイト文字しかサポートされていないということか。


metaclass:
Object#metaclassというメソッドがあったので、メタクラス階層がどうなっているのかも見てみた。途中でループしないで、無限にメタクラスのリンクが伸びていくタイプだった。メタクラス階層の三階以上のメタクラス(例:Object.metaclass.metaclass)のsuperclassは全てMetaClassという名前のクラスに集約されている。
Ruby1.8.6との相違点を調べているうちに、1.8.6でおかしな現象を見つけた。三階以上のメタクラスのsuperclassが自分自身であるという結果を返す場合がある。(そのメタクラスメタクラスがまだ作成されていないとき)
ruby-list:40520あたりが関係しているのかもしれないが、今更どうでも良い。本来あるべき姿が知りたければ、Rubiniusを参照したほうが賢明か?

Ruby1.9については、http://d.hatena.ne.jp/sumim/20080111に図があった。