報國挺身日記 このページをアンテナに追加 RSSフィード

2008/02/20

[] Rubiniusを眺める 23:09

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に図があった。