シリアライズ
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より速く、しかも短くなりやすいので使い勝手がいい。他のアプリケーションで読み書きしたい場合はこれが一番いいかもしれない。 未検証
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