| RFC-0258:從 C++17 更新至 C++20 | |
|---|---|
| 狀態 | 已接受 |
| 區域 |
|
| 說明 | 將 Fuchsia 樹狀結構 C++ 版本從 C++17 更新至 C++20,並擴充 SDK 中正式支援的 C++ 版本集,納入 C++20。 |
| 問題 | |
| Gerrit 變更 | |
| 作者 | |
| 審查人員 | |
| 提交日期 (年-月-日) | 2024-08-01 |
| 審查日期 (年-月-日) | 2024-09-10 |
摘要
根據 RFC-0193:支援的 C++ 版本中列出的程序,這項 RFC 提案將 Fuchsia 樹狀結構 C++ 版本從 C++17 更新為 C++20,並擴充 SDK 中正式支援的 C++ 版本集,納入 C++20。
提振精神
根據 RFC-0193:支援的 C++ 版本,Fuchsia 平台和 SDK 僅支援 C++17。C++20 導入了許多新功能,大幅提升人體工學,但 Fuchsia 平台開發人員目前無法使用這些改良功能。
利害關係人
協助人員:davemoore@google.com
審查者:
- ianloic@google.com
- jamesr@google.com
- mcgrathr@google.com
社交化:Fuchsia C++ 使用者和工具鍊團隊討論。
需求條件
- 將 Fuchsia 樹狀結構 C++ 版本從 C++17 更新至 C++20。
- 允許樹狀結構內平台程式碼依附 C++20 功能。
非目標
- 讓 C++20 標準中的所有功能立即在 Fuchsia 中提供。
設計
Fuchsia 樹狀結構可以 C++17 或 C++20 模式編譯。這項變更會將 Fuchsia 樹狀結構使用的 C++ 版本從 C++17 改為 C++20,之後就無法再以 C++17 模式建構樹狀結構內 (或「平台」) 的程式碼。
實作
Fuchsia 樹狀結構使用的 C++ 標準是由建構引數控管。我們計畫提交變更,將 Fuchsia 樹狀結構的 C++ 版本從 C++17 更新為 C++20,但請 Fuchsia 開發人員在 RFC 獲得核准前,避免使用 C++20 功能,以便視需要回溯至 C++17。
現有的 CI/CQ 建構工具會以 C++20 模式建構 Fuchsia 樹狀結構。這些資源最終會關閉,並用於測試日後的 C++ 版本 (例如 C++23)。
效能
C++20 擴大了編譯時間評估的使用範圍,包括將許多標準容器的建構函式標示為 constexpr,這「可能」會在某些情況下提升執行階段效能,但目前尚未觀察到任何顯著差異。
人體工學
除了 stdcompat 程式庫中已提供的功能外,您還可存取所有 C++20 標準程式庫功能,減少樣板並提升 C++ 語言的可用性。
概念或協同程式等語言功能可以進一步提升人體工學,但這些功能在 Fuchsia 樹狀結構中的使用方式不在本 RFC 的範圍內,應由未來的 RFC 涵蓋。
回溯相容性
SDK 必須繼續支援 C++17。樹狀結構內 (或「平台」) 的程式碼並非 SDK API 介面的一部分,可以開始依附 C++20 功能,因此與 C++17 不相容。
安全性考量
不適用
隱私權注意事項
不適用
測試
我們有基本的 SDK 測試,會嘗試使用 C++17 和 C++20 編譯 SDK 中的所有 C++ 標頭,確保我們不會導入與任一版本不相容的程式碼,但這項測試不會找出 C++ 來源檔案中的問題。
為提升 SDK 測試涵蓋範圍,我們「應該」使用 C++17 和 C++20 編譯 SDK 中每個套件的測試,就像先前對 stdcompat 所做的一樣。
說明文件
SDK 說明文件將更新,以反映除了 C++17 之外,C++20 也正式支援;我們也會記錄 SDK 使用者可用的 C++20 功能支援限制。
Zircon 中的 C++ 將更新,涵蓋支援的 C++20 功能,以及使用這些功能的限制。
缺點、替代方案和未知事項
雖然我們一直嘗試透過 stdcompat 程式庫提供 C++20 標準程式庫功能子集,但實作其他功能需要大量投資,在某些情況下,如果沒有 C++20 語言支援,就無法實作。
既有技術和參考資料
Google 和 Chromium 已將 C++20 設為目標。SDK 已支援 C++20,而 Google 和 Chromium 等合作夥伴也依賴 C++20 功能,即使這些功能尚未正式支援。