我想知道是否有任何高性能序列化库(如Google协议缓冲区)支持总和类型。 总和类型是带标记的联合,基本上就是能够说某个东西是A、B或C中的一个。总和类型在支持代数数据类型的语言中使用,例如Haskell和ML。
如果你所说的“像Google协议缓冲区一样”的意思是能够为多种语言生成代码,那么可能不存在这样的东西。在不支持它们的语言中模拟总和类型最好也很尴尬(例如尝试在boost:variant上进行模式匹配)。因此,如果主要目标是主流语言,则将它们排除在外是有意义的。如果你只想使用Haskell / OCaml / 任何其他语言,那么有很多选择。对于Haskell,有cereal、binary、safecopy等选项。对于OCaml,有piqi项目。
我不知道除了Piqi(我是作者)之外还有支持和并类型的实用系统。Piqi与Protocol Buffers兼容,并原生支持OCaml和Erlang。Protocol Buffers中缺少和并类型是我创建Piqi的原因之一。我的计划是扩展Piqi以支持其他语言,如Haskell、Clojure等。
是否需要一种“高性能”格式?许多通用格式应该能够简单地使用现有的结构,特别是Maps/哈希表,来支持联合(只需包含一个键表示实际值类型的条目)。 因此,也许您可以使用简单的约定来传输这样的内容,比如使用JSON。