シリアライズ
Haskellの値を保存するには、文字列(ByteStringなど)にしたり戻したりする必要がある。そこで有用なのがシリアライズライブラリである。
よく使われているが、性能はいまいち: binary, cereal
binaryはGHCに同梱されているだけあってよく使われている。LazyなByteStringを対象とし、モナディックにエンコーダやデコーダを構築できる。しかし構造の簡単さの割にはパフォーマンスは劣悪である。また、リストの長さなども問答無用で64ビット整数でエンコードするためかなり空間効率が悪い。
cerealはbinaryとよく似たインターフェイスだが、パフォーマンスがだいぶ改善されており、こちらはStrictなByteStringを対象とする。しかし、お世辞にも速いとはいえない。
bytesはbinaryとcerealに共通のインターフェイスを与える。
期待できる serialise, store, winery
serialiseはWell-Typedが開発した、CBORベースのライブラリ。エンコードがbinaryやcerealより速く、しかも短くなりやすいので使い勝手がいい。他のアプリケーションで読み書きしたい場合はこれが一番いいかもしれない。
FP Completeのstoreはスピード一点特化型。Haskellのプログラム同士で高速に通信したい場合はこちらに軍配が上がるか。
wineryはリリースされて間もないインディーライブラリ。最高レベルの速度と密度、互換性を提供する。アーリーアダプタにおすすめ (参考記事: 特級シリアライズライブラリ、winery 1.0解禁)
未検証
http://hackage.haskell.org/package/flat
table:主要ライブラリの比較
encode 1 encode 1000 decode バイト数
winery 0.28 μs 0.26 ms 0.81 ms 58662
cereal 0.82 μs 0.78 ms 0.90 ms 91709
binary 1.7 μs 1.7 ms 2.0 ms 125709
serialise 0.61 μs 0.50 ms 1.4 ms 65437
aeson 9.9 μs 9.7 ms 17 ms 160558
store 54 ns 56 μs 0.13 ms 126410
#ライブラリ #変換