13

我知道在 Haskell 中序列化和反序列化数据的两个主要竞争包是二进制和谷类。什么时候应该选择其中一个包而不是另一个包?还是我忽略了其他选择?

4

2 回答 2

10

它们不是竞争,它们是互补的。 cereal适用于严格的字节串,而binary适用于惰性。由于其惰性,binary依赖于在解析错误时抛出异常,而cereal可以通过Either.

此外,暗示“只有”两个主要包是一种歪曲。至少你也应该看看 blaze-builder 。

于 2013-02-02T03:20:52.887 回答
2

一方面,浮点的默认编码binary有问题,而不是简单的 IEEE-754 编码。例如,NaN 不能正确往返。没有这样的已知问题。该问题没有得到解决的迹象,但可以通过显式使用类似的东西来规避,这意味着通用派生的实例仍然存在问题。cerealgetFloatleBinary

但另一方面,它binary似乎比cereal. 目前有 hackage 345依赖于821依赖于. 因此,如果您选择.cerealbinarybinary

于 2018-04-06T16:17:20.187 回答