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 问题。