From: Yukihiro Matsumoto Date: 2008-10-19T00:18:19+09:00 Subject: [ruby-dev:36784] Re: [Bug #650] Marshal.load raises RegexpError まつもと ゆきひろです In message "Re: [ruby-dev:36773] Re: [Bug #650] Marshal.load raises RegexpError" on Sat, 18 Oct 2008 07:05:07 +0900, Urabe Shyouhei writes: |> |> 厳密に言うとmarshalに上位互換性がないのでmarshalのメジャーバー |> |> ジョンを変化させるべきなのかもしれませんが、メリットよりもデ |> |> メリットの方が大きいのでそれはしない方向を考えてます。 |> |> |ちなみにどういうデメリットですか? |> |> 1.8と1.9でmarshalデータが全くやりとりできないというデメリッ |> トです。 | |まったくということはないでしょう。 |1.8で作ったデータを1.9が読めように1.9を作るのは可能なはずです。 |# 今でも、古いmarshal formatのデータを読もうとすると、警告が出るが処理自 |体はできるはず。 Marshalファイルフォーマットには、メジャーバージョンとマイナー バージョンの情報が付加されており、マイナーバージョンの違いは 「上位互換性がある」ので「古いmarshal formatのデータを読もう とすると、警告が出るが処理自体はできる」、メジャーバージョン の違いは「互換性はないので古いデータは読めない」とする仕組み があります。 今回の場合は、古いデータが新しいMarshalで読めない(Marshal以 外の部分の変更に影響を受けた)というものなので、Marshal側でで きる対応は (1) 杓子定規に考えて、メジャーバージョンをあげる(1.8と1.9が 通信できなくなる、うれしくない) (2) ささいな違いなので気にしない (3) 1.8で正規化する(すでに書き込んだデータは救済できないし、 副作用もある) (4) 1.9側に1.8正規表現かどうか判別して1.9正規表現に変換する (おそらくは巨大な)ルーチンを追加する(苦労の割に得るもの が少ない、うれしくない) くらいではないかと思います。現状のリソースから考えると、2か3 くらいがせいぜいではないかと思います。 まつもと ゆきひろ /:|)