RFC-0258:從 C++17 更新至 C++20

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 功能,即使這些功能尚未正式支援。