MatchaのIPCのフォーマットはMessagePack(多分)
ロードマップではIPCはまだ先なんだけど、実装方法はちまちま調べてる。
RAMディスク上のファイルで共有ロック・排他ロック・inotify・epollを活用してブリテンボードを作るというのもその一環。
で、そのブリテンボードにどんなフォーマットのデータを載せるかという話。RTMの場合、(ブリテンボードではなくデータポートという呼び名だが)データフォーマットに規定がないっぽい(流し読みしかしてないが)。データポートの設計者がバイトフォーマットを(多くはC/C++の構造体として)定義する。ROSの場合は・・・ブリテンボード的なものってあるのかな?
Matchaのデータ送受信はキーバリューで行う。これはIPCでも同じで送信者はキーストリングと基本データ型(整数型やバイト列)などをドキュメントで定義する。これによりデータ追加によるリコンパイルの発生が抑えられる。データ削減では受信側の対応が必要だがデータの不整合はキーバリュークラスの例外でキャッチできるので深刻なクラッシュを回避することができるし、標準データフォーマットとオプショナルデータの混在も用意になる。
で、キーバリューをバイト列に落とし込む必要があるのでいろいろ調査を行った。安直にはXMLだが、パースにコストがかかりそうだしバイト列を記述するのも大変。そこでEXIに目をつけたのだが、仕様書を読むとデフォルトがビット列であってバイト列じゃないというので萎える。そして適当な実装も見つからない。
視点を変えてJSONやYAMLのバイナリ形式がないかと探してみた。YAMLは見つからなかったがJSONについてはBSONというバイナリ形式があるらしい。
もうひとつ見つかったのが表題のMessagePackというフォーマット。聞いたことがなかったが、ここ数年でかなり育ってるプロジェクトという話。まだ調べ始めたばかりだが、エンコード・デコードが高速で、かつ独立した標準の実装が各言語に用意されているということでかなり惚れた。またboostを意識しているのもポイントが高い。ということで、しばらくMessagePackで検討していこうかと思っている。懸案事項は階層化されたデータ構造を記述できるかという点くらいかな。
#MessagePackは筑波大学の学生がはじめたプロジェクトらしい。それがビジネスのレベルで利用されいるというのは感慨深い。
##初見では日本人がはてな日記ではじめたプロジェクトというだけで何かしらうさんくささを感じてた俺。ちょっと調べたら考えがあらたまったけど。日本に絶望しすぎだな。俺。