是否有可能在 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
似乎可以回答这个问题。
我正在研究协议架构语言,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
似乎可以回答这个问题。