卜部です。

Yukihiro Matsumoto さんは書きました:
> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:36771] Re: [Bug #650] Marshal.load raises RegexpError"
>     on Sat, 18 Oct 2008 01:05:25 +0900, Urabe Shyouhei <shyouhei / ruby-lang.org> writes:
>
> |> 厳密に言うとmarshalに上位互換性がないのでmarshalのメジャーバー
> |> ジョンを変化させるべきなのかもしれませんが、メリットよりもデ
> |> メリットの方が大きいのでそれはしない方向を考えてます。
>
> |ちなみにどういうデメリットですか?
>
> 1.8と1.9でmarshalデータが全くやりとりできないというデメリッ
> トです。
>   

まったくということはないでしょう。
1.8で作ったデータを1.9が読めように1.9を作るのは可能なはずです。
# 今でも、古いmarshal formatのデータを読もうとすると、警告が出るが処理自
体はできるはず。

> |すでに作ってしまったPStoreデータベースが困りま
> |す、というか、手元で読めなくて若干困っているわけです。なにか(スクリプト
> |側ででもかまわないので)既存のMarshal済みデータに対するworkaroundみたいな
> |ものはないでしょうか。
>
> これからコミットする新しい1.8で古いmarshalデータを一度読み込
> んで、ふたたび書き込むことで1.9でも読めるようにできます。って、
> そういうことじゃないのかな。
>   

気づいたんですけど、それだと

% ruby1.9 -e 'Marshal.dump(/\u0001/, STDOUT)' | \
  ruby1.8 -e 'Marshal.dump(Marshal.load(STDIN), STDOUT)' | \
  ruby1.9 -e 'p Marshal.load(STDIN)'

とかがroud-tripしなくなると思う(いまはする)んですけど、平気なんですかね。