2023 年 12 月 5 日宣布的变更

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

Java 重大变更

在 v26 中,我们计划根据我们的重大变更政策版本支持政策,对 Java 进行一次主版本号的提升。

以下各节概述了我们计划在 26.0 版本的 protocol buffers 中包含的一系列重大变更。请注意,计划可能会发生变化。这些是需要注意的潜在重大变更,但它们可能不会在这个特定版本中发生,或者根本不会发生。

对生成代码/运行时不匹配问题投毒

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

这不被视为一项重大变更,因为它只是增加了对现有政策的强制执行,但可能需要用户更新他们生成的代码。

破坏与旧生成代码的兼容性

v26.x 将破坏与旧主版本生成的代码的兼容性。用户应重新生成旧代码,使其与当前版本保持一致。

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

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

移除已弃用的方法/变量

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

这将移除对以下(非详尽)列表的访问:

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

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

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

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

更多细节将在相应的版本说明中提供。