まつもと ゆきひろです

In message "[ruby-dev:14507] marshal API (was Re: [Patch] pp.rb and debug.rb)"
    on 01/08/16, "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp> writes:

|そうですね。田中さんのおかげで、inspectとの統合だけでは話が済まない、
|というのはわかってきました。(ちょっとだけ不安なのは、[ruby-dev:14460]
|でまつもとさんが「marshalがちゃんと書けることは分かりました」と
|書いてること。なひにはまだ分かってないみたいです。^^;)

いや、最初の時点ではmarshalってのはDFSだけでは書けないと思っ
てたのでした。が、よく読むと田中さんのはサイクルなどにも対応
してましたし、idを使うことで複数のtraverseが同時に(というか、
入れ子に)できるものだったのでmarshalもちゃんと書けることが分
かったということです。この場合、もちろんunmarshalは考えてま
せん。

でも、marshalとinspectの統合はあんまり嬉しい点はないと思いま
すよ。で、カスタムmarshalの問題に限れば、marshalという作業を

  基本的な出力
    バイト単位出力
    基本データ型出力

  prologueの出力
  object prologueの出力
  インスタンス変数の出力
  object epilogueの出力
  epilogueの出力

などの抽象的な手続きの列に分解し、それぞれの手続きに相当する
部分をメソッドとしたdumperを用意することで、実現できるのでは
ないだろうかと空想しています(unmarshalはその逆)。

まあ、どれだけの抽象手続きを用意すればきちんとmarshalできる
のかとか、やっぱりBasicNewが必要だろうとか、いろいろ詰める必
要があるのですが。

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