From: Yukihiro Matsumoto Date: 2008-10-20T00:12:30+09:00 Subject: [ruby-dev:36793] Re: [Bug #650] Marshal.load raises RegexpError まつもと ゆきひろです In message "Re: [ruby-dev:36785] Re: [Bug #650] Marshal.load raises RegexpError" on Sun, 19 Oct 2008 02:13:16 +0900, Urabe Shyouhei writes: |Yukihiro Matsumoto さんは書きました: |> (1) 杓子定規に考えて、メジャーバージョンをあげる(1.8と1.9が |> 通信できなくなる、うれしくない) |> |> (2) ささいな違いなので気にしない |> |> (3) 1.8で正規化する(すでに書き込んだデータは救済できないし、 |> 副作用もある) |> |> (4) 1.9側に1.8正規表現かどうか判別して1.9正規表現に変換する |> (おそらくは巨大な)ルーチンを追加する(苦労の割に得るもの |> が少ない、うれしくない) | |(5) 1.9でRegexp#_dumpとRegexp#_loadを定義する |ってのはどうでしょうね。すると |* TYPE_REGEXPなデータは1.8のRegexp |* TYPE_USERDEFなデータ(でklass==rb_cRegexp)は1.9のRegexp |という割と簡単な判定でいけそうな気がするんですが。 判別はできますが、その後の対応はどうするんでしょうね。 1.9に1.8のregex.cを導入するのも、1.8に鬼車を導入するのも現実 的ではないと思いますから、判別できても完全な互換性を維持する のは困難ではないでしょうか。 さらに言うと、この件についてなんらかの対応したとしても、救済 できるのは、ドキュメントに掲載されていないし、サポートされて いると明言されたこともない\uのようなメタキャラクタでないアル ファベットの前にバックスラッシュがついた正規表現だけなので、 コストの割に得るものが少ない気がします。 考えるほど、ここは(2)かなあ、という気がしてきました。という か、むしろundocumentedなので対応すべきでないような。 まつもと ゆきひろ /:|)