RFC-0258:從 C++17 更新至 C++20 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 從 C++17 更新為 C++20,並將 SDK 中正式支援的 C++ 版本擴充至包含 C++20。 |
問題 | |
Gerrit 變更 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2024-08-01 |
審查日期 (年-月-日) | 2024-09-10 |
摘要
按照 RFC-0193:支援的 C++ 版本中所述的程序,此 RFC 建議從 C++17 更新為 C++20,做為 Fuchsia 樹狀結構的 C++ 版本,並擴充 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 功能。
非目標
- 讓 Fuchsia 立即提供 C++20 標準的所有功能。
設計
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
,這可能會在某些情況下改善執行階段效能,但到目前為止,我們並未觀察到任何明顯差異。
Ergonomics
除了 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 測試涵蓋率,我們應為 SDK 中包含的每個套件編譯測試,使用 C++17 和 C++20,就像我們為 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 功能,即使這些功能尚未在文件中列為正式支援。