是否有可能在 Cap'n proto 中扩展带有更多变体的标记联合,同时与任何旧数据二进制兼容?

Is it possible to extend a tagged union with more variants in Cap'n proto while being binary-compatible with any old data?

我正在研究协议架构语言,Cap'n'proto 似乎可以满足我的需求,但我需要一个关键功能,但我在文档中找不到:

假设我有这个带有两个结构成员的标记联合,采用类似 C 的语法:

struct taggedUnion {
    int tag;
    union {
        struct a {
           int x;
        }

        struct b {
            float x;
        }
    }
}

我以后可以向标记的联合添加另一个结构,同时仍然能够读取旧数据吗?

struct taggedUnion {
    int tag;
    union {
        struct a {
           int x;
        }

        struct b {
            float y;
        }

        struct c {
            int z;
            bool b;
        }
    }
}

感觉它应该是可行的,但我在文档中找不到任何说明它是可行的。在不破坏线路兼容性的情况下,有一条关于组可扩展的注释(新字段对旧数据归零)。

如果可能的话,我将如何在 cap'n proto 模式语法中声明此更改?有一个 before/after 例子就好了!

找到了。 ... new fields may be added to existing groups and unions 似乎可以回答这个问题。