MessagePack for Dの余波

どこまでシリアライズ/デシリアライズを正確にするか -> メリットあんまなくね?
5
Sadayuki Furuhashi @frsyuki

Javaだとtemplateが無いからかな。serializableはシリアライズ語のデータにクラス名を入れて、デシリアライズ時はリフレクションでクラスを引っ張ってきてインスタンスを作る。返り値はObjectだからキャストして使う。

2010-04-26 03:03:33
SKS rep @repeatedly

@frsyuki RTTIとかあるから,現状確かに文字列ベースでチェックはできるんだけど,必要かどうかといわれると微妙だなぁ.

2010-04-26 03:04:10
Sadayuki Furuhashi @frsyuki

キャスト時に型変換しろってな話はある。あーだからやっぱりtemplateが無いからかな。

2010-04-26 03:04:30
SKS rep @repeatedly

ランタイムリフレクションがある言語だと,直接生成できるって旨味があるけど,コンパイルタイムリフレクション止まりの言語だとどうだろうというのと,そういうのは言語内臓のシリアライザーの出番な気もする.

2010-04-26 03:05:26
Sadayuki Furuhashi @frsyuki

2点かな。参照を保存できない→循環した構造を保存できない。クラス名を入れるのはMessagePack的でない→変な型にデシリアライズできてしまう。後者は別に入れてもいいわけで、問題はそのフォーマットを決めないといけない点か。まぁ決めればいいとか。

2010-04-26 03:17:00
Purely Ideal Functionality @random_oracle

. @repeatedly @frsyuki メンバ関数とか大変なことになりそうな話題だなぁ… > 「クラス」をシリアライズ

2010-04-26 03:17:04
SKS rep @repeatedly

@random_oracle メンバ関数はクラスが一致していればずれてないと想定していいんじゃないかと.Rubyのdrbとかはそんな感じで,バージョンとかが全て一致してないと動作は保証してませんし.

2010-04-26 03:19:49
Sadayuki Furuhashi @frsyuki

@random_oracle んーメンバ関数は関係ないですね。送信先にもクラスに関する情報がある前提で。問題となるのはそのステート(インスタンス)のみです。Javaだと、バイトコードを送ってクラスローダを叩いてごにょごにょ、みたいな実装もありますが^^;

2010-04-26 03:19:48
SKS rep @repeatedly

@random_oracle それは恐らく無理ですね.Rubyとかだとやろうと思えば送り手側がソースコード送って,それを受け手側でevalとかやりようはありますが,まぁシリアライゼーションの範疇ではないw

2010-04-26 03:39:30
SKS rep @repeatedly

Michelの実装はどうやって複数の参照が同じオブジェクトを指してるのをシリアライズするんだろうか?

2010-04-26 04:19:29
Sadayuki Furuhashi @frsyuki

@repeatedly 一度シリアライズしたオブジェクトのIDと、そのオブジェクトを何バイト目にシリアライズしたかを覚えておく…? RubyだとすべてのオブジェクトにユニークなIDが振ってあるので、こんな方法でできそうです。

2010-04-26 04:22:40
SKS rep @repeatedly

@frsyuki なるほどー.まぁ実装する側としてはMessagePackがそれを提供するかどうかってのが問題なだけなんだけどもw

2010-04-26 04:23:54
Sadayuki Furuhashi @frsyuki

んー参照は…遅くなりそう。シリアライズもデシリアライズも。ストリームデシリアライズができなくなる予感。

2010-04-26 04:27:43
SKS rep @repeatedly

Michelの言いたいことは分からないでもない.シリアライゼーションライブラリはちゃんとオブジェクトグラフを保持すべきだ,と.が,現状それを完璧にこなしているのは組み込みでもライブラリでもほとんどないわけで,夢ではライブラリは書けない.

2010-04-26 05:46:48
SKS rep @repeatedly

ついでに言うと俺もそういう意見を持っているので,std.serializationじゃなくてstd.msgpackを最初に提案したのでした.

2010-04-26 05:47:30
SKS rep @repeatedly

多分MichelはCocoaにあるArchiverをD言語に移植しようとしているのだろう.けど環境のサポートがないから上手くまとまらない,という所あたりで止まっているのかな.簡単なserialize/deserializeはできるけど,その先に進めないと行った所か.

2010-04-26 05:51:31
SKS rep @repeatedly

で,msgpackは今Michelが止まっている所を突き詰めたようなライブラリなので「支持は出来ない」と.

2010-04-26 05:52:01
SKS rep @repeatedly

ただD言語の場合は現状標準にでかいオブジェクトグラフがないので,あまり困らないというのもある(Andreiが書き直してからstructベースだし).ぶっちゃけそんなのはやっぱりDoost.util.Serializerあたりが頑張ったらいいんじゃないかなと思う.開発とまってるけど

2010-04-26 05:54:36