RFC-0193:支援的 C++ 版本

RFC-0193:支援的 C++ 版本
狀態已接受
區域
  • 建構
  • 開發人員
  • 工具鏈
說明

可從 SDK 捨棄 C++14 支援,並闡明日後將如何決定及支援 C++ 版本。

變更
  • 705630
作者
審查人員
提交日期 (年/月)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。

已經不再以 C++14 形式編譯 SDK 的任何使用者,因此變更支援的版本只需變更說明文件即可。

相關人員

講師: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++ 版本是一份 C++ 版本清單,這些 C++ 版本已由 Fuchsia SDK 記錄為支援,並供做為 SDK 一部分的建構系統使用。該清單目前包含 C++14C++17

捨棄 C++14

為了反映系統不再支援 C++14,SDK 說明文件Zircon 中的 C++ SHALL 即將更新。

Fuchsia Tree C++ 版本

在 Fuchsia 樹狀結構中,用於編譯大多數程式碼的 C++ 版本必須是 SDK C++ 版本。其他 C++ 版本可能用於 Fuchsia 樹狀結構,用於小型的獨立程式碼集或僅限主機的程式碼,但我們不建議這麼做。

C++ 版本測試

「必須」為每個 SDK C++ 版本建構並執行一組核心測試,這是 Fuchsia 修訂佇列的一部分。這組測試包含 C++ 針對 C++ FIDL 繫結的 CTS 和 API 測試中的所有 C++ 測試,但可能包含更多測試。

新增 C++ 版本

您可以編寫 RFC 來新增 SDK C++ 版本,藉此取得該版本並獲得核准。

只有 ISO C++ 修訂版本發布的 C++ 版本可以新增至 C++ 版本。

新增 SDK C++ 版本時,必須更新 Fuchsia 版本,才能使用新增 C++ 版本來建構及執行上述 C++ 測試。

移除 C++ 版本

_SDK C++ version_s 可以編寫 RFC 提議將其移除並獲得核准。

移除 SDK C++ 版本時,必須從 SDK 說明文件中移除該版本,且應從 Fuchsia 建構系統中移除。

實作

捨棄 C++14

這只是說明文件變更。

C++ 版本測試

捨棄 C++14 後,C++17 將是唯一 SDK C++ 版本。測試都已透過 C++17 建構並執行。

您必須先更新 Fuchsia 建構系統,才能新增其他版本,以便使用多個 C++ 版本建構及執行測試。

效能

人體工學

更新 SDK 中隨附的 C++ 程式碼會更簡單,因為每項變更都會依據每個支援的 C++ 版本進行測試。

回溯相容性

目前 (2022 年 10 月) 的 Fuchsia 使用者使用 C++17 進行建構,因此沒有回溯相容性問題。

安全性考量

隱私權注意事項

測試

請參閱上述說明。

說明文件

我們將更新 SDK 說明文件Zircon 中的 C++,以反映不再支援 C++14。

這個 RFC 可做為日後新增及移除 C++ 版本的政策說明文件。

缺點、替代方案和未知

先前的圖片和參考資料