2022 年 5 月 6 日宣布的变更

Protocol Buffers 于 2022 年 5 月 6 日宣布的变更。

版本控制

我们更改了版本控制方案,以便更灵活地更新 Protocol Buffers 的特定于语言的部分。在新方案中,每种语言都有自己的主版本,可以独立于其他语言递增,正如本主题后面关于 Python 版本的介绍。但是,次版本和补丁版本将保持耦合。这使我们能够在某些语言中引入破坏性更改,而无需在没有破坏性更改的语言中提升主版本。

此新版本控制方案的第一个实例是 Python API 的新版本 4.21.0,它紧随之前的版本 3.20.1。其他语言 API 将发布为 3.21.0。

Python 更新

我们在 Protocol Buffers 的 Python 语言支持方面做了一些更改。版本 4.21.0 是一个新的主版本,紧随 3.20.1。新版本基于 upb 库,并且比以前的版本提供明显更好的解析性能,特别是对于大型负载。它还包括适用于 Apple 芯片的预构建二进制模块,无需手动构建即可提高性能。

新版本确实包含一些破坏性更改。具体来说

  • 依赖于隐式创建的类的 UnknownFields() 方法已被显式创建的 UnknownFieldSet 类取代。
  • 一些非核心特性可能已更改,例如某些字符串或错误消息的特定格式。这些不被认为是破坏性更改,但仍可能影响您现有的代码库。
  • 依赖于在 Python 和 C++ 之间共享消息的应用程序在新版本中会中断。大多数开发人员不会受到此影响,但 Nucleus 和可能其他库的用户可能会受到影响。作为一种解决方法,您可以设置一个环境变量,强制库保持兼容性。
  • Python upb 需要从 protoc 3.19.0 或更高版本生成的代码。

JavaScript 支持

我们为 JavaScript 的 Protocol Buffer 支持做了一些调整,以允许 JavaScript 独立于主仓库进行演进和发布。具体来说,我们将语言支持从 主项目 中分离出来,并将其移动到其自己的仓库中。

如果您创建了任何与 Protocol Buffers 中 JavaScript 支持相关的拉取请求,并且您仍然希望合并它们,请随时针对 JavaScript 仓库复制这些请求。我们将自动转移 GitHub 问题。