まつもと ゆきひろです

In message "Re: [ruby-dev:36785] Re: [Bug #650] Marshal.load raises RegexpError"
    on Sun, 19 Oct 2008 02:13:16 +0900, Urabe Shyouhei <shyouhei / ruby-lang.org> 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なので対応すべきでないような。

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