F# 用非公式 MessagePack ライブラリを作ってみている

F# 特化型です。

ソースコード

公式

公式は CLI 向けの msgpack-cli が存在します。

なぜ作ったの?

公式のものが F# 向きかと言われるとうーんと思い、なら勉強がてら趣味開発に利用しようというのと、公式の F#ラッパーを書く体力がなかったことが発端です。品質などを考えると、公式をラップしたほうが良いというのはわかっているのですが…。

現状

  • pack するためには MsgPackValue<'T when 'T :> comparison> という判別共用体に落としこむ必要あり
  • comparison なのは Map の影響
  • ext を任意の型にしたい場合は packExt<'T when 'T :> IPackable, comparison>, unpackExt<'T when 'T :> comparison>
  • ext を byte [] のまま保持するなら pack, unpack
  • 任意の型にしない場合、もしくは ext を使わない場合は MsgPackValue 型を用いる
  • tyep MsgPackValue = MsgPackValue;; (pack の関係で Unitが使えなかった…)
  • MsgPackValue を簡単に生成するための Limited モジュール
  • 旧仕様は OldSpec モジュールで提供
  • テストは基本的に FsCheck (array32 と map32 の重さに耐えられなかったけど!)
  • unpack の内部実装は PasecClone
  • 実行速度は後で考える

そのうちやりたい

  • 性能検査
  • シグネチャ調整
  • README含むドキュメント整備
  • Type Provider実装
  • Mono 対応 (Mono 3.2.7 だと F# 3.0 にバージョンを下げないといけない…etc)
  • Xamarin 系対応
  • パフォーマンス・チューニング
  • NuGet公開

「御託はいいからさっさと NuGet に公開しろ!」とか言われたら、最優先で対処します。

他にこれほしい、というものあれば twitter なり issue なり pull request なりでお願いします。ユーザ自分しかいなさそうですけどっ!