| RFC-0193:支援的 C++ 版本 | |
|---|---|
| 狀態 | 已接受 |
| 區域 |
|
| 說明 | 從 SDK 中捨棄 C++14 支援,並說明日後如何決定及支援 C++ 版本。 |
| Gerrit 變更 | |
| 作者 | |
| 審查人員 | |
| 提交日期 (年-月-日) | 2022-07-29 |
| 審查日期 (年-月-日) | 2022-10-03 |
摘要
從 SDK 中捨棄 C++14 支援,並說明日後如何決定及支援 C++ 版本。
提振精神
C++ SDK 目前聲稱支援 C++14,但 Fuchsia 樹狀結構中沒有有效的測試,可防止與 C++14 不相容的程式碼進入 SDK。這會導致使用者中斷連線,並造成回溯。
Fuchsia 樹狀結構是以 C++17 建構而成。Fuchsia 樹狀結構中的許多程式庫和架構都依附於 C++17 功能,對於樹狀結構外的開發人員來說非常實用。特別是新的 FIDL C++ 繫結需要 C++17。
SDK 的使用者不再以 C++14 編譯,因此變更支援版本只需修改說明文件。
利害關係人
講師:cpu@google.com
審查人員:johngro@google.com、dschuyler@google.com、abarth@google.com
諮詢對象:yifeit@google.com、sebmarchand@google.com、phosek@google.com、 eieio@google.com、schottm@google.com、jamesr@google.com、gevalentino@google.com、 jyknight@google.com
設計
術語
C++ 版本是指 ISO C++ 標準的修訂版本。我們通常會使用 C++14、C++17、C++20 等簡稱。
「SDK C++ 版本」列出 Fuchsia SDK 支援的 C++ 版本,並記錄這些版本,這些版本會由 SDK 隨附的建構系統使用。目前這份清單包含 C++14 和 C++17。
捨棄 C++14
應更新 SDK 說明文件和 Zircon 中的 C++,反映 C++14 不再受支援。
Fuchsia Tree C++ 版本
在 Fuchsia 樹狀結構中,用於編譯在 Fuchsia 上執行的大部分程式碼的 C++ 版本,必須是 SDK C++ 版本。其他 C++ 版本「可能」會用於 Fuchsia 樹狀結構,適用於小型獨立程式碼集或僅限主機的程式碼,但我們不建議這麼做。
C++ 版本測試
您必須為每個 SDK C++ 版本建構並執行一組核心測試,做為 Fuchsia 提交佇列的一部分。這組測試包含 CTS 中的所有 C++ 測試,以及 C++ FIDL 繫結的 API 測試,但可能包含更多測試。
新增 C++ 版本
如要新增 SDK C++ 版本,請撰寫 RFC 提案並獲得核准。
只有 ISO C++ 委員會發布的 C++ 版本可以新增至 C++ 版本。
新增 SDK C++ 版本時,Fuchsia 建構作業必須更新,才能建構及執行上述 C++ 測試,並新增 C++ 版本。
移除 C++ 版本
您可以撰寫 RFC 提議移除 _SDK C++ 版本,並獲得核准。
移除 SDK C++ 版本時,必須從 SDK 說明文件移除,並應從 Fuchsia 建構系統移除。
實作
捨棄 C++14
這只是說明文件的變更。
C++ 版本測試
在捨棄 C++14 後,C++17 將成為唯一的 SDK C++ 版本。測試已使用 C++17 建構及執行。
如要新增其他版本,必須先更新 Fuchsia 建構系統,才能使用多個 C++ 版本建構及執行測試。
效能
不適用
人體工學
因為系統會針對每個支援的 C++ 版本測試所有變更,因此更新 SDK 中隨附的 C++ 程式碼會容易許多。
回溯相容性
2022 年 10 月,所有 Fuchsia 使用者都以 C++17 建構,因此沒有回溯相容性問題。
安全性考量
不適用
隱私權注意事項
不適用
測試
請參閱上述說明。
說明文件
SDK 說明文件和 Zircon 中的 C++ 將更新,反映 C++14 不再受支援。
這份 RFC 是日後新增及移除 C++ 版本的政策文件。