【问题标题】:High performance object serialization library supporting sum types支持 sum 类型的高性能对象序列化库
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 你不需要模式匹配,只需要标记的联合。另一个示例是具有 3 个可选字段的 protobuf,其约束条件是一次只能设置其中一个。我主要在寻找支持某些主流语言的跨平台,例如 C++、Java 或 Python。
        • 如果没有模式匹配,我认为 sum 类型是不切实际的(不是不可能的)。可选字段的使用很脆弱,因为通常无法强制执行该约束。预计您可以连接消息,并且在连接期间可能会破坏约束
        猜你喜欢
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        相关资源
        最近更新 更多