2023 年 12 月 5 日宣布的变更

2023 年 12 月 5 日宣布的 Protocol Buffers 变更。

Java 破坏性变更

在 v26 中,我们计划根据我们的 破坏性变更政策版本支持政策,对 Java 进行主要版本升级。

以下各节概述了我们计划在 26.0 版本的协议缓冲区中包含的一系列破坏性变更。请注意,计划可能会并且确实会发生变化。这些是需要注意的潜在破坏性变更,但它们可能不会在此特定版本中发生,或者可能根本不会发生。

Poison Pill 代码生成/运行时不匹配

根据我们的 跨版本运行时保证,Protobuf 不支持在主要版本边界之间混合生成的代码和运行时,也不支持在单个主要运行时版本内混合来自较新版本的 protoc 的生成的代码和较旧的运行时。我们计划引入“poison pills”来检测和强制执行这些不允许的不匹配。

由于这只是添加了对现有策略的强制执行,因此不被视为破坏性变更,但可能需要用户更新其生成的代码。

打破与旧代码的兼容性

v26.x 将打破与来自较旧主要版本的生成代码的兼容性。用户应重新生成来自相同版本的旧生成代码。

例如,最初为向后兼容 v2.x.x 生成的代码与 v3.x.x 运行时而引入的 GeneratedMessageV3 将重命名为 GeneratedMessage。运行时将更新以支持 版本,这将与旧的生成代码不兼容。

这符合我们现有的 跨版本运行时保证,并且是一项破坏性变更。

删除已弃用的方法/变量

v26.x 将删除对已弃用方法和变量的访问权限。这些方法和变量通常已在之前的版本中标记为 @Deprecated

这将删除对以下非详尽列表的访问权限

  • 描述符语法 API,应替换为相应的特性访问器(例如 FieldDescriptor.hasPresence()EnumDescriptor.isClosed()

  • TextFormat 打印方法,应替换为相应的 TextFormat.printer() 方法。

  • PARSER 变量,应替换为 parser() 方法。

  • 用于旧 v2.x.x 代码生成兼容性的运行时方法。根据我们的 跨版本运行时保证,不再支持此功能。

更多详细信息将在相应的发行说明中提供。