【发布时间】:2012-03-11 20:52:24
【问题描述】:
我想知道是否有任何高性能序列化库(如 Google 协议缓冲区)支持 sum types。
Sum 类型是标记的联合,基本上可以说某事物是 A、B 或 C。Sum 类型用于支持 Algebraic Data Types 的语言中,例如 Haskell 和 ML。
【问题讨论】:
标签: serialization types protocol-buffers thrift msgpack
我想知道是否有任何高性能序列化库(如 Google 协议缓冲区)支持 sum types。
Sum 类型是标记的联合,基本上可以说某事物是 A、B 或 C。Sum 类型用于支持 Algebraic Data Types 的语言中,例如 Haskell 和 ML。
【问题讨论】:
标签: serialization types protocol-buffers thrift msgpack
是否需要“高性能”格式?许多通用格式应该能够简单地使用现有的结构——特别是 Maps/hashtables,来支持联合(只包括带有指示实际值类型的键的条目)。 因此,也许您可以只使用简单的约定来使用 JSON 来传输此类内容。
【讨论】:
除了Piqi(我是作者)之外,我不知道有任何实际系统支持求和类型。 Piqi 与 Protocol Buffers 兼容,并原生支持 OCaml 和 Erlang。协议缓冲区中没有 sum 类型是我创建它的原因之一。
我的计划是扩展 Piqi 以支持其他语言,例如 Haskell、Clojure 等。
【讨论】:
如果“像 Google 协议缓冲区”是指为多种语言生成代码的能力,那么可能不存在这样的东西。在不支持它们的语言中模拟 sum 类型充其量是尴尬的(例如,尝试在 boost:variant 上进行模式匹配)。因此,如果主要目标是主流语言,则将它们排除在外是有意义的。
如果你满足于只使用 haskell/ocaml/whatever 有很多选择。对于haskell,有cereal、binary、safecopy 可能还有其他。 ocaml 有piqi project。
【讨论】: