8

我想知道是否有任何高性能序列化库(如 Google 协议缓冲区)支持sum types

Sum 类型是标记的并集,基本上可以说某事物是 A、B 或 C。Sum 类型用于支持代数数据类型的 Haskell 和 ML 等语言

4

3 回答 3

2

如果“像 Google 协议缓冲区”是指为多种语言生成代码的能力,那么可能不存在这样的东西。在不支持它们的语言中模拟 sum 类型充其量是尴尬的(例如,尝试在 boost:variant 上进行模式匹配)。因此,如果主要目标是主流语言,则将它们排除在外是有意义的。

如果你满足于只使用 haskell/ocaml/whatever 有很多选择。对于 haskell,有grainbinarysafecopy,可能还有其他。ocaml有piqi 项目

于 2012-02-21T17:38:34.117 回答
2

除了Piqi(我是作者)之外,我不知道任何支持 sum 类型的实用系统。Piqi 与 Protocol Buffers 兼容,并原生支持 OCaml 和 Erlang。协议缓冲区中没有 sum 类型是我创建它的原因之一。

我的计划是扩展 Piqi 以支持其他语言,例如 Haskell、Clojure 等。

于 2012-02-21T18:12:20.067 回答
0

是否需要“高性能”格式?许多通用格式应该能够简单地使用现有的结构——特别是 Maps/hashtables,来支持联合(只包括带有指示实际值类型的键的条目)。因此,也许您可​​以只使用简单的约定来使用 JSON 来传输此类内容。

于 2012-02-27T06:14:58.963 回答