まつもと ゆきひろです

In message "[ruby-ext:01874] downcast"
    on 01/07/27, Takaaki Tateishi <ttate / jaist.ac.jp> writes:

|Ruby/DLの開発にあたって,悩んでいる点があるので相談にのって頂け
|ると嬉しいです.簡単には,オブジェクト自身のtypeを変更して,もっ
|ているデータ構造自体も変更してしまうというのはナンセンスかどうか?
|という問題です.

止めといた方が良いと思いますが、どうしても茨の道を歩きたいな
ら止めません。IO#reopenのようにクラスを変えるものも既にある
のでどうしてもダメとは言えないでしょうけど。

というのは、まず第一に動的にオブジェクトのクラスが変わること
はインタプリタコアが予想していないように思います。たとえば、
cast!に渡すクラスが予想外のものであれば(今回はチェックしてな
いみたい)、かなりの確率で落ちます。

次にRDataのfree関数をRubyに開放するのも賛成できません。あれ
は「Cを使う人なら分かって使うだろうから」というので用意して
あるもので、任意のRubyプログラムを実行することは保証できませ
ん。というか、正直なところfree関数の中でRubyのコードはまった
く実行してほしくありません(GCの内部から直接呼ばれるので普通
の実行状態ではないので)。

ということで、結果的にそのアプローチはライブラリ全体をひどく
不安定なものにすると思います。

で、個人的にはPtrDataとStructDataのクラスを分けない(ので結果
としてキャストが不要)というアプローチの方が良いのではないか
と思います。もちろん、単なるポインタからみればStructDataには
不要なメソッドがいっぱいあるわけですが、それはそれ、その不要
なメソッドの呼び出しを禁止してしまえば実害は無いのではと。

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