- repeatedly
- 3172
- 0
- 0
- 0
Javaだとtemplateが無いからかな。serializableはシリアライズ語のデータにクラス名を入れて、デシリアライズ時はリフレクションでクラスを引っ張ってきてインスタンスを作る。返り値はObjectだからキャストして使う。
2010-04-26 03:03:33@frsyuki RTTIとかあるから,現状確かに文字列ベースでチェックはできるんだけど,必要かどうかといわれると微妙だなぁ.
2010-04-26 03:04:10ランタイムリフレクションがある言語だと,直接生成できるって旨味があるけど,コンパイルタイムリフレクション止まりの言語だとどうだろうというのと,そういうのは言語内臓のシリアライザーの出番な気もする.
2010-04-26 03:05:262点かな。参照を保存できない→循環した構造を保存できない。クラス名を入れるのはMessagePack的でない→変な型にデシリアライズできてしまう。後者は別に入れてもいいわけで、問題はそのフォーマットを決めないといけない点か。まぁ決めればいいとか。
2010-04-26 03:17:00. @repeatedly @frsyuki メンバ関数とか大変なことになりそうな話題だなぁ… > 「クラス」をシリアライズ
2010-04-26 03:17:04@random_oracle メンバ関数はクラスが一致していればずれてないと想定していいんじゃないかと.Rubyのdrbとかはそんな感じで,バージョンとかが全て一致してないと動作は保証してませんし.
2010-04-26 03:19:49@random_oracle んーメンバ関数は関係ないですね。送信先にもクラスに関する情報がある前提で。問題となるのはそのステート(インスタンス)のみです。Javaだと、バイトコードを送ってクラスローダを叩いてごにょごにょ、みたいな実装もありますが^^;
2010-04-26 03:19:48@random_oracle それは恐らく無理ですね.Rubyとかだとやろうと思えば送り手側がソースコード送って,それを受け手側でevalとかやりようはありますが,まぁシリアライゼーションの範疇ではないw
2010-04-26 03:39:30@repeatedly 一度シリアライズしたオブジェクトのIDと、そのオブジェクトを何バイト目にシリアライズしたかを覚えておく…? RubyだとすべてのオブジェクトにユニークなIDが振ってあるので、こんな方法でできそうです。
2010-04-26 04:22:40@frsyuki なるほどー.まぁ実装する側としてはMessagePackがそれを提供するかどうかってのが問題なだけなんだけどもw
2010-04-26 04:23:54Michelの言いたいことは分からないでもない.シリアライゼーションライブラリはちゃんとオブジェクトグラフを保持すべきだ,と.が,現状それを完璧にこなしているのは組み込みでもライブラリでもほとんどないわけで,夢ではライブラリは書けない.
2010-04-26 05:46:48ついでに言うと俺もそういう意見を持っているので,std.serializationじゃなくてstd.msgpackを最初に提案したのでした.
2010-04-26 05:47:30多分MichelはCocoaにあるArchiverをD言語に移植しようとしているのだろう.けど環境のサポートがないから上手くまとまらない,という所あたりで止まっているのかな.簡単なserialize/deserializeはできるけど,その先に進めないと行った所か.
2010-04-26 05:51:31ただD言語の場合は現状標準にでかいオブジェクトグラフがないので,あまり困らないというのもある(Andreiが書き直してからstructベースだし).ぶっちゃけそんなのはやっぱりDoost.util.Serializerあたりが頑張ったらいいんじゃないかなと思う.開発とまってるけど
2010-04-26 05:54:36