MessagePack

7
Sadayuki Furuhashi @frsyuki

[1.0, 1.0, 1.0] を Array length=3 Float value Float value Float value とシリアライズする代わりに、Array length=3 type=Float value value value にするのが基本かなぁ。

2010-09-11 17:55:49
Sadayuki Furuhashi @frsyuki

型固定配列型の案(特に浮動小数点数配列)。C++版でunpacker.next()の代わりにbegin/endで回せるようにするには。object.as<T>()で、例外の代わりにnull的な値を返すas_optional<T>が欲しい件。RPCのエラーの設計とシリアライズ方法。

2010-09-12 10:23:49
Sadayuki Furuhashi @frsyuki

以上が本日の議題。begin/endは誰かが名案を思いつくに違いない! as_optionalは互換性の問題だけかな。ifで分岐するのはオーバーヘッド?

2010-09-12 10:25:43
Sadayuki Furuhashi @frsyuki

型固定配列型は、シリアライズフォーマットの互換性を崩すので大変悩ましい。ウマいシリアライズフォーマットを閃けば…。実用上、C++でしか使わない気もする。JavaだとList<T>にはextends Tな型が入っている可能性があるので、型固定配列でシリアライズできるとは限らない。

2010-09-12 10:28:15
Sadayuki Furuhashi @frsyuki

RPCのエラーは、まずエラークラスの継承という概念を入れるか否か。入れた場合には、IDLの記述方法はどうするか、シリアライズ方法(MessagePackの型システムを使って継承関係の表現する方法)はどうするか。それから、組み込みのエラーはどうするか。

2010-09-12 10:29:43
Sadayuki Furuhashi @frsyuki

エラークラスに継承が無いと、RPCでエラー仕様のアップデートができない。継承があれば、継承先のクラスを追加することはできる。クライアントは、サーバが新しい例外を投げるように修正されたこと知らなくても、基底クラスでcatchできるので。

2010-09-12 10:31:29
Sadayuki Furuhashi @frsyuki

RPCを使ってプログラムを書くときは、とりあえず例外処理はテキトーに決めておいて、後から詳しく詰めていって堅牢なプログラムに仕立てていきたい。エラーに継承の概念があれば、最初はテキトーに基底クラスを並べて置いて、後から互換性を保ったままアップデートしていける。

2010-09-12 10:34:09
Sadayuki Furuhashi @frsyuki

と言うわけで継承の概念は入れたいけど、シリアライズ方法とIDLでの記述方法が問題。それから実装が…。仕様が複雑になると実装が難しくなって困る。型固定配列も悩ましいなぁ…

2010-09-12 10:35:31
Sadayuki Furuhashi @frsyuki

型固定配列は、MessagePackの型システムが変わるわけではない。Array型の保存形式の1つ。JSONとの互換性は保たれる。

2010-09-12 10:48:28
Sadayuki Furuhashi @frsyuki

0xc4〜0xc7あたりに int 32 array 32、int 64 array 32、float array 32、double array 32 を追加するのが1案。あるいはもっと汎用的に、fixed-type array 保存形式を加える案がもう1つ。

2010-09-12 10:49:40
Sadayuki Furuhashi @frsyuki

思うに、コンテナの配列を型固定配列でシリアライズしても、ほとんどサイズは削減できない。コンテナではなく、長さが固定の「構造体」なら良いけど、構造体の表現方法に困る。MessagePackで構造体まで表現するのはやり過ぎな予感。なので、整数と浮動小数点と真偽値くらい。

2010-09-12 10:51:23
Sadayuki Furuhashi @frsyuki

Nil型の型固定配列は…要らないな。整数は符号付き・符号無しの8,16,32,64、浮動小数点数はfloat,double、真偽値だとビット配列になるのかな。4×2+2+1=11種類の候補。

2010-09-12 10:53:19
Nobuyuki Kubota @nobu_k

今日はmpluaのpackerをC++版に変更するというか、mprpcluaのLuaObjectをmpluaに移して、mprpcluaからはそれを利用するように変更する!

2010-09-12 10:56:24
Sadayuki Furuhashi @frsyuki

型固定配列は、大量の浮動小数点数や整数を扱いたいケースに有用。それはRubyでは扱わない、C++でしか使わない…という発想はあり得る? それならば、fix_int8クラスと同じように、C++にカスタムクラスを提供するだけでも良さそうなのだけど。

2010-09-12 11:03:45
Sadayuki Furuhashi @frsyuki

C++の浮動小数点数の型固定配列 ←→ MessagePackのRaw型 ←→ Javaの浮動小数点数の型固定配列 という変換は、普通にできる。実際に、文字列はこの方法で扱っている。

2010-09-12 11:07:14
Sadayuki Furuhashi @frsyuki

MessagePack自体で型固定配列を提供する場合との違いは、変換時に型チェックが効くか否か。Raw型を使うと、本当に生バイト列なデータを浮動小数点数の型固定配列としてデシリアライズできてしまうけど、型固定配列があれば、それを防げる。それだけかな。

2010-09-12 11:08:07
Sadayuki Furuhashi @frsyuki

安定版と開発版のリリースを分けたくなってきた。

2010-09-12 11:10:49
Sadayuki Furuhashi @frsyuki

msgpack-experimentalリリースを作りたい。

2010-09-12 11:11:04
Sadayuki Furuhashi @frsyuki

あと、C/C++版だけSourceForgeでリリースしていると名前がカブる問題。パッケージ名をmsgpack-cpp-VERSIONにした方が良さそう。あとリリース場所をmsgpack.org/releases以下にした方が良いかな。

2010-09-12 11:13:54
Sadayuki Furuhashi @frsyuki

この辺りは他の多言語対応なプロジェクトのやり方を調査してみよう。何があるかな…案外に思いつかない。

2010-09-12 11:14:59
Sadayuki Furuhashi @frsyuki

@shot6 ふむっ! 使う側としても安心感がありますよね。開発者的には-experimentalの方を積極的に使って欲しい面もありますが^^;

2010-09-12 11:16:13
Sadayuki Furuhashi @frsyuki

ひとりハッカソン中。タグこれでw → #msgpackhack

2010-09-12 11:18:40
Sadayuki Furuhashi @frsyuki

C++版で、exceptionが使えない環境で使えない問題。object.convert<T>とas<T>(型変換API全部)が、エラーが起きたら例外で通知しているため。エラーは返り値で返した方が良いのではないか、という案。

2010-09-12 11:22:39
Sadayuki Furuhashi @frsyuki

Android NDKは、Embedded C++ とは違うのかな。 #msgpackhack

2010-09-12 11:23:12
1 ・・ 4 次へ