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

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++14C++17C++20 等简写形式来引用它。

SDK C++ 版本是指 C++ 版本列表,这些版本已记录为 Fuchsia SDK 支持的版本,并且会被随 SDK 一起分发的构建系统使用。该列表目前包括 C++14C++17

弃用 C++14

SDK 文档Zircon 中的 C++ 应更新,以反映不再支持 C++14。

Fuchsia Tree C++ 版本

用于编译 Fuchsia 树中在 Fuchsia 上运行的大多数代码的 C++ 版本必须是 SDK C++ 版本。在 Fuchsia 树中,可以使用其他 C++ 版本来处理小型隔离型代码库或仅主机代码,但不鼓励这样做。

C++ 版本测试

必须为每个 SDK C++ 版本构建并运行一组核心测试,作为 Fuchsia 提交队列的一部分。这组测试包括 CTS 中的所有 C++ 测试以及针对 C++ FIDL 绑定的 API 测试,但可能还包含更多测试。

添加 C++ 版本

您可以编写 RFC 来提议添加新的 SDK C++ 版本,并获得批准。

只有 ISO C++ 委员会发布的 C++ 版本才能添加到 C++ 版本中。

在添加 SDK C++ 版本时,必须更新 Fuchsia build,以便使用添加的 C++ 版本构建和运行上述 C++ 测试。

移除 C++ 版本

如需移除 _SDK C++ 版本_,您可以编写 RFC 来提出移除建议并获得批准。

移除 SDK C++ 版本时,必须从 SDK 文档中移除该版本,并且应从 Fuchsia build 系统中移除该版本。

实现

弃用 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++ 版本的政策文档。

缺点、替代方案和未知情况

在先技术和参考文档