MessagePack for OCamlを公開しました

くえにしさん([twitter:@kuenishi]さん)に誘われたのでMessagePackハッカソンに参加してきました。
MessagePack本体のレポジトリにMessagePack for OCamlを取り込んでもらったので、みんな使ってください!

MessagePackって?

JSONYAMLと同程度の表現能力をもった省スペースなオブジェクトシリアライザです。対応言語もC/C++/Java/D/Ruby/Haskellなどと非常に多いです。 対応言語言一覧 → http://wiki.msgpack.org/display/MSGPACK/QuickStart

公式Wiki採用実績によると、かなりメジャーなプロジェクトも採用されているようです。実際、ハッカソンにも仕事で利用されている方が結構来ていました。

実はボクたちの作っているチャットアプリのAsakusaSatelliteでもちょっとだけ使ってます。

MessagePack for OCamlを作りました

OCamlだってMessagePackを使いたい!」というわけで、OCaml版を作りました。
現状ではシリアライザ・デシリアライザ部分のみです。 RPCは今後の課題です。

インストール方法・使い方

http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+OCamlに書いたので、そちらをご覧ください。
API リファレンスもあります。

実装方法


変換処理といえば証明駆動でしょ、というわけでコア部分はCoq証明されています。
このとき苦労したことはReject会議のスライドに書いてあるので、興味のある方はどうぞ。

なお、Coqで生成されたコードもレポジトリに入っているので、普通に使う分には意識する必要はありません。

今後の課題

  • 効率が悪い: Coqと連携させる関係で1バイトがboolの8項タプルで表現されて、効率的には微妙な気がしています。誰かに怒られるか、自分が困ったら考えます。
  • RPCがない : IDL処理系ができたら本気だします。

ハッカソンの感想

  • たのしかったです! さそっていただいて、ありがとうございます!
  • 「仕事でMessagePackを使ってます/使いたいです!」みたいなパワフルな人たちばかりで、すごかったです。
  • 型によって処理を変えれる言語だと便利なシリアライザが作れていいなぁ
  • [twitter:@frsyuki]さんと[twitter:@nobu_k]さんがIDLの仕様をどうするかの議論をしていたので、ちょっと参加させていただきました。「それ、OCamlだとちょっと....」みたいなことしか言ってなかった気がしますが。
  • 複数の言語で便利に使えるIDL仕様を決めるのは、なかなかスリリングな作業で楽しかったです。
  • 結果としてなかなかいいIDLの仕様を決めれたので、処理系が楽しみです!

おまけ

東大こわい