From: matz@... (Yukihiro Matsumoto) Date: 2000-06-19T06:47:10+09:00 Subject: [ruby-list:23348] Re: xmarshal.rb まつもと ゆきひろです In message "[ruby-list:23331] Re: xmarshal.rb" on 00/06/18, Masatoshi SEKI writes: |> |Objectのインスタンスを任意のクラスに変更するとか、 |> |initialize を伴わない new とかが呼べたら、 | |> そういう危険なことをRubyレベルで許すつもりはないです。 |> そのための拡張ライブラリを書くとかになるんじゃないですかね。 | |なるほど。やっぱり。 |本当にやりたいことは、前と同じ状態のオブジェクトを生成することです。 |Marshal と同様なものは、スクリプトではかけないでしょうか? 現時点では書けませんね。実装上の問題としてはRubyにはクラスの 他に明示的には登場しない「構造」というものがあって、クラスの すり替えはクラスと構造の対応が狂ったものを作ってしまう可能性 があります。この対応ができてないとすぐにインタプリタが落ちて しまいますから、これはちょっと採用できませんね。Smalltalkも 最近はbecome:はなくなったようだし。 # 昔のOOPSLAにbecome: is harmfulというような内容の論文が出て # ました。ちょっと昔は自明じゃなかったんですね。 一方、initializeを介さないnewの方は可能性はありそうに思いま すが、これまたクラスと構造の対応を維持するため、あちこち変更 する必要があるでしょう。というわけで、当面はmarshalのサブセッ ト(各構造毎にオブジェクトを生成する)ような拡張ライブラリって のが現実的ではないかと。 |また、仮に拡張ライブラリを書くとしてどの様なインターフェイスだったら |危険度(?)の許容範囲でしょうか ? インタフェースの問題ではなく実装の問題のように思います。 現状ではクラス名だけから構造はとれないので、それをどう回避す るかですよね。Ruby組み込みのクラスだけならクラス名と構造の対 応をあらかじめテーブルとして用意できますが、拡張ライブラリに よって導入される新しいクラスと構造に関しては...marshalも対応 してないから良いのか。 まつもと ゆきひろ /:|}