The 'store' package provides efficient binary serialization. There are a couple features that particularly distinguish it from most prior Haskell serialization libraries:
-
Its primary goal is speed. By default, direct machine representations are used for things like numeric values (
Int,Double,Word32, etc) and buffers (Text,ByteString,Vector, etc). This means that much of serialization uses the equivalent ofmemcpy.We have plans for supporting architecture independent serialization - see #36 and #31. This plan makes little endian the default, so that the most common endianness has no overhead.
-
Instead of implementing lazy serialization / deserialization involving multiple input / output buffers,
peekanpokealways work with a single buffer. This buffer is allocated by asking the value for its size before encoding. This simplifies the encoding logic, and allows for highly optimized tight loops. -
storecan optimize size computations by knowing when some types always use the same number of bytes. This allows us to compute the byte size of aVector Int32by just doinglength v * 4.
It also features:
-
Optimized serialization instances for many types from base, vector, bytestring, text, containers, time, template-haskell, and more.
-
TH and GHC Generics based generation of Store instances for datatypes
-
TH generation of testcases.
- Initial release announcement
- Benchmarks of the prototype
- New 'weigh' allocation benchmark package,
created particularly to aid optimizing
store.