| 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 进行编译,因此更改支持的版本只需更改文档即可。
利益相关方
Facilitator: 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++ 版本是已记录为受 Fuchsia SDK 支持且由作为 SDK 一部分随附的 build 系统使用的 C++ 版本的列表。该列表目前包含 C++14 和 C++17。
舍弃 C++14
应更新 SDK 文档和 Zircon 中的 C++,以反映 C++14 不再受支持。
Fuchsia 树 C++ 版本
用于编译 Fuchsia 树中在 Fuchsia 上运行的大部分代码的 C++ 版本必须是 SDK C++ 版本。其他 C++ 版本可能用于 Fuchsia 树中的小型隔离代码库或仅限主机的代码,但不建议这样做。
C++ 版本测试
必须为每个 SDK C++ 版本构建并运行一组核心测试,作为 Fuchsia 提交队列的一部分。这组测试包括 CTS 中的所有 C++ 测试和 C++ FIDL 绑定的 API 测试,但可能包含更多测试。
添加 C++ 版本
您可以通过编写 RFC 来提议添加新的 SDK C++ 版本,并获得批准。
只有由 ISO C++ 委员会发布的 C++ 版本才能添加到 C++ 版本中。
在添加 SDK C++ 版本的过程中,必须更新 Fuchsia build,以便使用添加的 C++ 版本构建和运行上述 C++ 测试。
移除 C++ 版本
可以通过编写 RFC 来提议移除 _SDK C++ 版本_并获得批准,从而移除这些版本。
移除 SDK C++ 版本时,必须从 SDK 文档中移除该版本,并且应从 Fuchsia build 系统中移除该版本。
实现
舍弃 C++14
这只是文档变更。
C++ 版本测试
在放弃 C++14 后,C++17 将成为唯一的 SDK C++ 版本。测试已使用 C++17 构建并运行。
在添加其他版本之前,需要更新 Fuchsia 构建系统,以允许使用多个 C++ 版本构建和运行测试。
性能
不适用
工效学设计
由于每次更改都会针对每个受支持的 C++ 版本进行测试,因此更新 SDK 中随附的 C++ 代码会容易得多。
向后兼容性
所有当前的(截至 2022 年 10 月)Fuchsia 用户都使用 C++17 进行构建,因此不存在向后兼容性问题。
安全注意事项
不适用
隐私注意事项
不适用
测试
请参阅上文。
文档
我们将更新 SDK 文档和 Zircon 中的 C++,以反映 C++14 不再受支持。
此 RFC 用作未来添加和移除 C++ 版本的政策文档。