From: Urabe Shyouhei Date: 2008-10-21T12:37:17+09:00 Subject: [ruby-dev:36830] Re: [Bug #650] Marshal.load raises RegexpError もとの正規表現にバグがあるのは認めますが、それに巻き込まれてでかいPStore のデータがまるごと読めなくて困ってるんですってば。 じゃあ妥協案ですけど、Marshal.loadに invalid: :replace とか受け取れるよ うにしません? Yukihiro Matsumoto さんは書きました: > まつもと ゆきひろです > > In message "Re: [ruby-dev:36794] Re: [Bug #650] Marshal.load raises RegexpError" > on Mon, 20 Oct 2008 01:50:06 +0900, Urabe Shyouhei writes: > > |「1.8から来た正規表現に\uが含まれていたら1.9ではuのこととして扱う」でい > |いんじゃないですかね。 > |1.8が1.9から来る正規表現を読めるようになることは期待してません。 > > |undocumentedなのが理由になれるのはちゃんとドキュメントがあるときだけでに > |しましょうね。 > |たとえば/\n/や/\t/あたりもドキュメントされてませんけど、まさか今後の動作 > |を保証しないとか言い出しますか? > > あー、では「意味」と「意図」と言い換えましょう。\nや\tがどの > ような意味を持つかについて、ほとんどの人は一定の期待を持つで > しょうし、それに応えるつもりは十分にあります。しかし、一方、 > \uはどうでしょう? これにたいしてほとんどの人が合意できる意味 > は存在しないと思います。元の正規表現を書いた人がどのような期 > 待をしたのかはわかりませんが、すくなくとも卜部さんがあげてく > ださった例では、「期待してるであろう動作(バックスラッシュ+u)」 > と「実際の動作(u)」は異なっていました。要するに元のプログラム > のバグです。 > > このような「間違った使い方しか存在しない表現」は積極的にサポー > トしない方がよいのではないかと思います。 > > |ところでなんでこんなにしつこく対応すべきと主張しているかというと、今後同 > |様のことがまだ起こると思うからです。 > |どうせ1.9は1.8と互換性がないわけで、Marshalで非互換が見つかったり、あら > |たに作られたりすることは今後も出てくることが強く予想されます。そのとき > |に、毎回同様の判断を求められるでしょう。それを毎回「気にしない」とかいう > |逃げかたをしていくと、どんどんMarshalでやりとりできる情報が少なくなって > |いって用をなさなくなります。しかもPStoreの場合だと中のオブジェクトが一個 > |でも読めなくなると、DB全体を捨てないといけません。これはとても困ります。 > |今後「気にしない」をどんどん続けていくと、最終的には読めないDBしか残らな > |くなるでしょう(さすがにそこまで到達する前になんか回避策は考えることにな > |ると思いますが)。 > | > |せめて過去のバージョンで読めていたデータは取り出せるべきです。 > > 無条件で? 今回の場合はバージョンが進んだおかげでバグが見つ > かったのだと私には見えますけど。 > > まつもと ゆきひろ /:|) > > > >