2022 年 5 月 6 日宣布的变更

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

版本控制

我们更改了版本控制方案,以便能够更灵活地更新 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 silicon 提供了预构建的二进制模块,无需手动构建即可提高性能。

新版本确实包含一些重大变更。具体来说:

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

JavaScript 支持

我们对 Protocol Buffer 对 JavaScript 的支持进行了一些调整,以使 JavaScript 能够独立于主代码库进行演进和发布。具体来说,我们将语言支持从主项目中解耦,并将其移至其自己的代码库中。

如果您创建了任何与 Protocol Buffers 中 JavaScript 支持相关的拉取请求,并且仍希望合并它们,请随时在 JavaScript 代码库中重新提交。我们会自动迁移 GitHub 问题。