2023年12月5日宣布的变更

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

Java 破坏性变更

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

以下章节概述了我们计划包含在 Protocol Buffers 26.0 版本发布中的一系列破坏性变更。请注意,计划可能会发生变化。这些是需要注意的潜在破坏性变更,但它们可能不会出现在此特定版本中,或者根本不会发生。

毒丸式生成代码/运行时不匹配检测

根据我们的跨版本运行时保证,Protobuf 不支持跨主版本边界混合生成代码和运行时,也不支持在同一主运行时版本中混合来自较新 protoc 版本的生成代码与旧运行时。我们计划引入“毒丸”机制来检测和强制执行这些不允许的混合情况。

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

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

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 生成代码兼容性的运行时方法。根据我们的跨版本运行时保证,这不再受支持。

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