まつもと ゆきひろです

In message "[ruby-dev:17913] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ?"
    on 02/08/04, Takaaki Tateishi <ttate / kt.jaist.ac.jp> writes:

|> でもデフォルトサイズで生成されたウィンドウが一瞬画面にちらつ
|> いたりする可能性があるわけですよね。
|
|はい,そうですが,この点でallocate/initializeに何をさせ
|るかということを判断しているわけではないと思っています.

私にとっては十分ですけどね。

|「空のRubyオブジェクト」というのは,中田さんの「使用不能」と同じ
|感じだと思いますが,何を空のオブジェクト,使用不能状態と見なすの
|かは設計者/実装者に任されるということになるのでしょうか?
|たとえば,Data_Wrap_Struct してRubyのオブジェクトを作るものの場合
|はもとのデータをどうやって生成するのかは実装者に任されてしまうと
|思います.

えーと、T_DATAの場合にはptrを0としてData_Wrap_Structするのが
よいと思います。で、initializeで DATA_PTR(obj) = ptr と初期
化するわけですね。それ以外の「型」については個別に対応する必
要がありますが、「型」を自分で定義する機会は滅多に無いはずで
すから、あまり問題にならないと思います。

|また,allocateで使用不能なオブジェクトを作ったことで,すべてのメ
|ソッドでその使用不能状態を検出する作業が必要になるなどの場合があ
|ると思います.このような場合でもallocateで使用不能状態を作るべき
|かでちょっと悩んでしまいます.

ProcやThreadのように使用不能な状態の存在しないクラスもありま
すので、絶対にだめとは言えませんが、従っておいたほうがユーザ
に親切ではないだろうかとは思います。ProcやThreadも将来的には
対応させようと思ってますし。

|どちらにしても,インスタンスのタイプや構造を知るというのは,具体
|的にどのようなものでしょうか? たぶん,僕はallocateによる利点が
|どこにあるのかが具体的に分かっていので,何をさせるべきかで悩んで
|しまうのだと思います.

「allocationのやり方がオブジェクトごとに異なっていて、どこにフッ
クをかけたらよいのかわからない」というのがそもそもの動機です。
allocation frameworkにより

  * Class.newでオブジェクトの生成。その中身は
    + Class.allocateでオブジェクトの生成
    + obj.initializeでオブジェクトの初期化

と統一されたので、生成と初期化について一貫性ができたというこ
とです。しかも、これによりやや間接的ではありますが、クラスか
らそのクラスのインスタンスの「型」を知る方法ができたという副
次的な効果もできたということです。

                                まつもと ゆきひろ /:|)