于 2023 年 4 月 11 日发布的变更

于 2023 年 4 月 11 日发布的 Protocol Buffers 相关变更。

弃用语法反射

v23 版本将弃用通过反射检查语法版本的功能。该弃用将在构建时以警告形式体现。此功能将在未来版本中被移除。

在 C++ 中增加对 ctype=CORD 的支持

v23 版本将为单一 `bytes` 字段(包括 `oneof` 字段)增加 `ctype=CORD` 支持,用于指定数据应使用 `absl::cord` 而非 `string` 来存储。如果开源社区有足够兴趣,未来版本可能会为单一 `string` 字段类型以及 `repeated` `string` 和 `byte` 字段增加支持。

`ctype=CORD` 对扩展(extensions)没有影响。

您将可以通过字段选项(field options)来添加此支持

optional bytes foo = 25 [ctype=CORD];

选项保留

选项(Options)现在有了“保留期”(retention)的概念,它控制着选项是否会保留在生成的代码中。默认情况下,选项一直具有“运行时保留期”(runtime retention),这意味着它们会保留在生成的代码中,因此在运行时对生成的描述符池可见。但是,您现在可以设置 `retention = RETENTION_SOURCE` 来指定一个选项(或选项中的字段)不得在运行时保留。这被称为“源码保留期”(source retention)。

设置保留期的方法如下

extend google.protobuf.FileOptions {
  optional int32 source_retention_option = 1234
      [retention = RETENTION_SOURCE];
}

它也可以设置在一个普通字段上,在这种情况下,它仅在该字段出现在选项内部时生效:

message OptionsMessage {
  optional int32 source_retention_field = 1 [retention = RETENTION_SOURCE];
}

更多信息,请参阅选项保留期

停止对 Bazel <5.3 的支持

v23 版本将停止对 Bazel 4 的支持。Protobuf 将继续支持 Bazel 5 LTS,并要求最低版本为 Bazel 5.3。这符合基础 C++ 支持政策中描述的构建支持政策,并反映在基础 C++ 支持的版本信息中。