版本支援
protoc 和各種語言的支援視窗將於本主題後續表格中涵蓋。本主題中的版本號碼均使用 SemVer 慣例;在版本「3.21.7」中,我們說「3」是主要版本,「21」是次要版本,「7」是微版本或修補程式號碼。
從 v20.x protoc 版本開始,我們變更了版本控制方案,以便對 Protocol Buffers 的語言特定部分進行更靈活的更新。在新方案中,每種語言都有自己的主要版本,可以獨立於其他語言遞增。然而,次要版本和修補程式版本仍然是耦合的。這讓我們可以在某些語言中引入破壞性變更,而無需在未遇到破壞性變更的語言中增加主要版本。例如,單一版本可能包含 protoc 版本 24.0、Java 執行階段版本 4.24.0 和 C# 執行階段版本 3.24.0。
此新版本控制方案的第一個實例是 Python API 的 4.21.0 版本,該版本接續前一個版本 3.20.1。同時發布的其他語言 API 則以 3.21.0 發布。
發布頻率
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 年第一季 | 2027 年 3 月 31 日 |
發布支援圖表
Protobuf C++ | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x | 3.21 | 3.21 | 3.21 | 3.21 | 3.21 | |||||||
4.x | 22.x-25.x | 4.22 | 4.23 | 4.24 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | |||
5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | 5.29 | 5.29 | 5.29 | ||||
6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
C++ 工具、平台和程式庫支援
Protobuf 致力於遵循基礎 C++ 支援政策中描述的工具、平台和程式庫支援政策。如需支援的特定版本,請參閱基礎 C++ 支援矩陣。
C#
protoc 版本可以從 Protobuf C# 次要版本號碼推斷。範例:Protobuf C# 版本 3.25.x 使用 protoc 版本 25.x。
未來計畫以斜體顯示,並且可能會變更。
發布支援日期
Protobuf C# | 發布日期 | 支援結束 |
---|---|---|
3.x | 2023 年 2 月 16 日 | 待定 |
發布支援圖表
Protobuf C# | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 22.x-33.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.30 | 3.31 | 3.32 | 3.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
C# 平台和程式庫支援
Protobuf 致力於遵循.NET 支援政策中描述的平台和程式庫支援政策。如需支援的特定版本,請參閱基礎 .NET 支援矩陣。
Java
Java 將以每年第一季進行主要版本變更為目標。
protoc 版本可以從 Protobuf Java 次要版本號碼推斷。範例:Protobuf Java 版本 3.25.x 使用 protoc 版本 25.x。
未來計畫以斜體顯示,並且可能會變更。
發布支援日期
Protobuf Java | 發布日期 | 支援結束 |
---|---|---|
3.x | 2023 年 2 月 16 日 | 2026 年 3 月 31 日* |
4.x | 2024 年 3 月 13 日 | 2027 年 3 月 31 日 |
5.x | 2026 年第一季* | 2028 年 3 月 31 日 |
注意: Protobuf Java 3.x 版本的維護支援視窗將為 24 個月,而不是主要版本系列中最後發布版本的典型 12 個月。未來的重大版本更新(5.x,計畫於 2026 年第一季推出)將採用改進的「滾動相容性視窗」,該視窗應可允許恢復為 12 個月的支援視窗。2025 年第一季將不會有主要版本變更。
發布支援圖表
Protobuf Java | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 22.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 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 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
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 | 2023 年 2 月 16 日 | 2026 年 3 月 31 日 |
4.x | 2025 年第一季 | 待定 |
發布支援圖表
Protobuf Objective-C | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 22.x-29.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.29 | 3.29 | 3.29 | 3.29 |
4.x | 30.x+ | 4.30 | 4.31 | 4.32 | 4.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
PHP
protoc 版本可以從 Protobuf PHP 次要版本號推斷。例如:Protobuf PHP 版本 3.25.x 使用 protoc 版本 25.x。
未來計畫以斜體顯示,並且可能會變更。
發布支援日期
Protobuf PHP | 發布日期 | 支援結束 |
---|---|---|
3.x | 2023 年 2 月 16 日 | 2025 年 3 月 31 日 |
4.x | 2024 年 3 月 13 日 | 待定 |
發布支援圖表
Protobuf PHP | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 22.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | |||
4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
PHP 平台和程式庫支援
Protobuf 致力於遵循 PHP 支援政策 中描述的平台和函式庫支援政策。有關支援的特定版本,請參閱 基礎 PHP 支援矩陣。
Python
protoc 版本可以從 Protobuf Python 次要版本號推斷。例如:Protobuf Python 版本 4.25.x 使用 protoc 版本 25.x。
未來計畫以斜體顯示,並且可能會變更。
發布支援日期
Protobuf Python | 發布日期 | 支援結束 |
---|---|---|
4.x | 2023 年 2 月 16 日 | 2025 年 3 月 31 日 |
5.x | 2024 年 3 月 13 日 | 2026 年 3 月 31 日 |
6.x | 2025 年第一季 | 待定 |
發布支援圖表
Protobuf Python | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4.x | 22.x-25.x | 4.22 | 4.23 | 4.24 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | |||
5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | 5.29 | 5.29 | 5.29 | ||||
6.x | 30.x+ | 6.30 | 6.31 | 6.32 | 6.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
Python 平台和程式庫支援
Protobuf 致力於遵循 Python 支援政策 中描述的平台和函式庫支援政策。有關支援的特定版本,請參閱 基礎 Python 支援矩陣。
Ruby
protoc 版本可以從 Protobuf Ruby 次要版本號推斷。例如:Protobuf Ruby 版本 3.25.x 使用 protoc 版本 25.x。
未來計畫以斜體顯示,並且可能會變更。
發布支援日期
Protobuf Ruby | 發布日期 | 支援結束 |
---|---|---|
3.x | 2023 年 2 月 16 日 | 2025 年 3 月 31 日 |
4.x | 2024 年 3 月 13 日 | 待定 |
發布支援圖表
Protobuf Ruby | protoc | 23Q1 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 22.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | |||
4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 |
圖例
作用中 | 具有新功能、相容變更和錯誤修正的次要和修補程式版本。 |
---|---|
維護 | 具有重大錯誤修正的修補程式版本。 |
生命週期結束 | 發布不受支援。使用者應升級至受支援的版本。 |
未來 | 預計發布。為規劃目的而顯示。 |
Ruby 平台和程式庫支援
Protobuf 致力於遵循 Ruby 支援政策 中描述的平台和函式庫支援政策。有關支援的特定版本,請參閱 基礎 Ruby 支援矩陣。
JRuby 並非官方支援,但我們會在盡力而為的基礎上,為最新版本的 JRuby 提供非官方支援,目標是使其與我們的最低 Ruby 版本或以上版本相容。