版本支援
當前支援的版本
| 語言 | 積極支援 | 僅維護 |
|---|---|---|
| Protoc | 33.x | 29.x, 25.x (Java) |
| C++ | 6.33.x | 5.29.x |
| C# | 3.33.x | |
| Java | 4.33.x | 3.25.x |
| ObjC | 4.33.x | 3.29.x |
| PHP | 4.33.x | |
| Python | 6.33.x | 5.29.x |
| Ruby | 4.33.x |
編號方案
protoc 和各種語言的支援視窗在本主題後面的表格中有所說明。本主題中的版本號遵循 SemVer 約定;在版本“3.21.7”中,“3”是主版本號,“21”是次版本號,“7”是微版本號或補丁號。
Protobuf 的釋出只使用 minor.point 號,例如 29.5。
每個單獨的語言執行時都使用相同的 minor.point 進行版本控制,但具有特定於語言的主版本號。例如,29.5 版本對應 Java 執行時版本 4.29.5 和 C# 執行時版本 3.29.5。我們建議使用 protoc 29.5 配合 Java 4.29.5 和 C# 3.29.5。
此編號方案允許為所有語言的特定版本使用一個數字,同時避免了不同語言之間主版本號的耦合。例如,30.0 版本在 Python 中包含破壞性更改,但在 Java 中不包含,因此 Python 版本從 5.29.0 變為 6.30.0,而 Java 版本從 4.29.0 變為 4.30.0。
此版本控制方案於 2022 年隨 21 版本推出。在引入分離式版本控制方案之前,所有語言的主版本號均為 3。
釋出週期
Protobuf 努力做到每季度釋出一次更新。如果存在緊急需求(例如需要新 API 的安全修復),我們可能會新增一次釋出。跳過釋出應非常罕見。
主版本(破壞性)釋出將以每年的第一季度為目標。如果存在緊急需求,我們可能會隨時引入主版本破壞性更改,但這應該是非常罕見的。
我們的支援視窗由我們的 庫破壞性更改策略 定義。
Protobuf **不**認為強制執行其文件的語言、工具、平臺和庫支援策略屬於破壞性更改。例如,一個釋出可能在不增加主版本的情況下放棄對已過 EOL 的語言版本的支援。
釋出中包含哪些內容?
二進位制線協議格式不會改變,即使在主版本更新時也是如此。您將繼續能夠從新版本的 Protocol Buffers 中讀取舊的二進位制線協議格式 proto 資料。新生成的序列化到二進位制線協議格式的 protobuf 繫結將可被舊二進位制檔案解析。這是 Protocol Buffers 的基本設計原則。請注意,JSON 和 textproto 格式 **不** 提供相同的穩定性保證。
descriptor.proto 模式可能會改變。 在次要版本或補丁版本釋出中,我們可能會新增新的訊息、欄位、列舉、列舉值、版本、版本 特性 等。我們也可能將現有元素標記為已棄用。在主版本釋出中,我們可能會移除已棄用的選項、列舉、列舉值、訊息、欄位等。
.proto 語言語法可能會改變。 在次要版本或補丁版本釋出中,我們可能會新增新的語言構造和現有特性的替代語法。我們也可能將某些特性標記為已棄用。這可能導致 protoc 以前未發出的新警告。在主版本釋出中,我們可能會移除對舊版特性、語法、版本的支援,這可能需要更新客戶端程式碼。
程式碼生成和執行時 API 可能會改變。 在次要版本或補丁版本釋出中,更改將是純粹新增功能或源相容更新。只需重新編譯程式碼即可。在主版本釋出中,程式碼生成或執行時 API 可能會以不相容的方式更改,這需要修改呼叫點。我們儘量減少這種情況。修復或以其他方式影響未定義行為的更改不被視為破壞性更改,也不需要主版本釋出。
作業系統、程式語言和工具版本支援可能會改變。 在次要版本或補丁版本釋出中,我們可能會新增或刪除對特定作業系統版本、程式語言或工具的支援。請參閱 基礎支援矩陣,瞭解我們支援的語言。
總而言之
- 根據我們的 跨版本執行時保證,次要版本或補丁版本應僅包含純粹新增或源相容的更新。
- 主版本釋出可能會移除功能、特性或以需要更新呼叫點的方式更改 API。
支援期限
最新發布版本始終受支援。早期次要版本的支援將在同一主版本下發布新次要版本時結束。早期主版本的支援將在引入破壞性發布的那一季度的四分之一年後結束。例如,當 Protobuf Python 5.26.0 於 2024 年第一季度釋出時,它將 Protobuf Python 4.25.x 的支援結束日期設定在 2025 年第一季度末。
以下各節將介紹每種語言的支援指南。
C++
C++ 將致力於每年第一季度進行主版本升級。
protoc 的版本可以從 Protobuf C++ 的次要版本號推斷。例如:Protobuf C++ 版本 4.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf C++ | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 2024年3月31日 |
| 4.x | 2023年2月16日 | 2025年3月31日 |
| 5.x | 2024年3月13日 | 2026年3月31日 |
| 6.x | 2025年4月4日 | 2027年3月31日 |
| 7.x | 2026年第一季度 | 待定 |
釋出支援圖表
| Protobuf C++ | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x | 3.21 | |||||||||||
| 4.x | 22.x-25.x | 4.23 | 4.24 | 4.25 | 4.25 | ||||||||
| 5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | |||||||
| 6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 | 6.33 | |||||||
| 7.x | 34.x+ | 7.34 | |||||||||||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
C++ 工具、平臺和庫支援
Protobuf 致力於遵循 基礎 C++ 支援政策 中描述的工具、平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 C++ 支援矩陣。
C#
protoc 的版本可以從 Protobuf C# 的次要版本號推斷。例如:Protobuf C# 版本 3.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf C# | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 待定 |
釋出支援圖表
| Protobuf C# | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x+ | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.30 | 3.31 | 3.32 | 3.33 | 3.34 |
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
C# 平臺和庫支援
Protobuf 致力於遵循 .NET 支援政策 中描述的平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 .NET 支援矩陣。
Java
Java 將致力於每年第一季度進行主版本升級。
protoc 的版本可以從 Protobuf Java 的次要版本號推斷。例如:Protobuf Java 版本 3.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf Java | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 2027年3月31日* |
| 4.x | 2024年3月13日 | 2028年3月31日 |
| 5.x | 2027年第一季度* | 2029年3月31日 |
注意
Protobuf Java 3.x 版本的維護支援視窗將為 36 個月,而不是通常的 12 個月(針對主版本線的最後一個版本)。未來的主版本更新(5.x,計劃於 2027 年第一季度)將採用改進的 “滾動相容性視窗”,該視窗應允許恢復到 12 個月的支援視窗。2025 年第一季度和 2026 年第一季度將不會有主版本升級。釋出支援圖表
| Protobuf Java | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 3.25 | 3.25 | ||||||||
| 4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 | 4.34 | |||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
Java 平臺和庫支援
Protobuf 致力於遵循 Java 支援政策 中描述的平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 Java 支援矩陣。
在 Android 上,Protobuf 支援 Google Play 服務 支援的最低 SDK 版本,並且是 Jetpack 中的預設版本。如果兩個版本不同,則支援較低的版本。
Objective-C
protoc 的版本可以從 Protobuf Objective-C 的次要版本號推斷。例如:Protobuf Objective-C 版本 3.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf Objective-C | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 2026年3月31日 |
| 4.x | 2025年4月4日 | 2027年3月31日 |
| 5.x | 2026年第一季度 | 待定 |
釋出支援圖表
| Protobuf Objective-C | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-29.x | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.29 | ||||
| 4.x | 30.x - 33.x | 4.30 | 4.31 | 4.32 | 4.33 | 4.33 | |||||||
| 5.x | 34.x+ | 5.34 | |||||||||||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
PHP
protoc 的版本可以從 Protobuf PHP 的次要版本號推斷。例如:Protobuf PHP 版本 3.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf PHP | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 2025年3月31日 |
| 4.x | 2024年3月13日 | 2026年3月31日 |
| 5.x | 2026年第一季度 | 待定 |
釋出支援圖表
| Protobuf PHP | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 3.25 | 3.25 | ||||||||
| 4.x | 26.x - 33.x | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 | 4.33 | |||
| 5.x | 34.x+ | 5.34 | |||||||||||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
PHP 平臺和庫支援
Protobuf 致力於遵循 PHP 支援政策 中描述的平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 PHP 支援矩陣。
Python
protoc 的版本可以從 Protobuf Python 的次要版本號推斷。例如:Protobuf Python 版本 4.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf Python | 釋出日期 | 支援結束日期 |
|---|---|---|
| 4.x | 2022年5月25日 | 2025年3月31日 |
| 5.x | 2024年3月13日 | 2026年3月31日 |
| 6.x | 2025年4月4日 | 2027年3月31日 |
| 7.x | 2026年第一季度 | 待定 |
釋出支援圖表
| Protobuf Python | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4.x | 21.x-25.x | 4.23 | 4.24 | 4.25 | 4.25 | ||||||||
| 5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | |||||||
| 6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 | 6.33 | |||||||
| 7.x | 34.x+ | 7.34 | |||||||||||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
Python 平臺和庫支援
Protobuf 致力於遵循 Python 支援政策 中描述的平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 Python 支援矩陣。
Ruby
protoc 的版本可以從 Protobuf Ruby 的次要版本號推斷。例如:Protobuf Ruby 版本 3.25.x 使用 protoc 版本 25.x。
未來計劃以斜體顯示,並可能發生變更。
釋出支援日期
| Protobuf Ruby | 釋出日期 | 支援結束日期 |
|---|---|---|
| 3.x | 2022年5月25日 | 2025年3月31日 |
| 4.x | 2024年3月13日 | 待定 |
釋出支援圖表
| Protobuf Ruby | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 3.25 | 3.25 | ||||||||
| 4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 | 4.34 | |||
圖例
| 積極支援 | 次要版本和補丁版本包含新功能、相容性更改和錯誤修復。 |
|---|---|
| 維護 | 補丁版本包含關鍵錯誤修復。 |
| 生命週期結束 | 釋出版本不受支援。使用者應升級到受支援的版本。 |
| 未來 | 計劃釋出。出於規劃目的顯示。 |
Ruby 平臺和庫支援
Protobuf 致力於遵循 Ruby 支援政策 中描述的平臺和庫支援政策。有關支援的具體版本,請參閱 基礎 Ruby 支援矩陣。
JRuby 未獲官方支援,但我們會在最佳努力的基礎上,為支援我們最低 Ruby 版本或以上版本的最新 JRuby 版本提供非官方支援。