对 FIDL 的更改通常会产生大量下游影响。本文档提供了更改 FIDL 时应考虑的事项清单。请注意,并非核对清单中的所有元素都适用于每项更改,但它们至少应该有助于开发者仔细检查其更改是否完整。
对 fidlc 编译器所做的更改
此核对清单适用于影响 FIDL 本身的更改,例如语法或语义更改。
- 更新规格。
- 更新关联的工具。
- 更新 FIDL 文件。对于语法更改,请更新现有 FIDL 源代码,包括:
- 树内(以及树外,如果需要)的实际 FIDL 源文件。
- 在测试源代码中指定为字符串的 FIDL 源代码,例如编译器单元测试和 fidlgen 端到端测试。
- 文档中的 FIDL 代码段。
- 确保处理与属性的互动。
- 例如,该功能是否需要新的展示位置?
- 更新集成测试
- 对于较大的语言功能,可能值得在现有集成测试中添加测试覆盖率。例如,通过兼容性测试确保跨绑定一致性,或通过源代码兼容性测试确保可转换性。
- 具体针对解析器更改:
- 更新
span_tests,以确保解析的 span 正确无误,而不仅仅是解析成功
- 更新
- 对于原始 AST 更改:
- 确保 AST 的更新也会传播到原始 AST 树访问器及其下游用户。例如,向节点添加新字段时,可能应该同时更改访问者,以便访问该新字段。
- 对于语义更改:
- 在修改表时,更新特定于功能的单元测试(例如
table_tests),或创建新的测试文件。
- 在修改表时,更新特定于功能的单元测试(例如
对 FIDL 的更改预计会级联到后端,以更新所有 Fuchsia FIDL 团队拥有的绑定,即 Rust、Go、Dart、HLCPP、New C++(自然和有线)。
对 JSON IR 的更改
- 确保 IR 黄金标准中的更改反映了该更改。
- 更新 JSON 架构。
- 更新所有 JSON 使用方,包括:
对 fidlgen_<lang> 后端的更改
- 如果生成的代码发生了变化,请更新绑定文档。
- 更新了绑定教程,以反映当前的最佳实践和模式。
- 纳入在 build 中编译和运行的示例代码(例如 //examples/fidl/rust/fidl_crates/src/main.rs)。
- 更新所有相关指南:
- FIDL API 准则,了解如何使用此功能。
- 例如,在更改 C++ 传输类型中的内存分配 API 时,应更新 C++ 传输网域对象内存所有权指南。
- 我们还发现,向 API 委员会进行演示是一种很好的做法,可以宣传新功能,并向委员会成员说明如何根据演变情况审核 API。
- 如果更改绑定 API,请更新 GIDL 后端以使用更新后的 API。
- 如果更改行为或添加动态功能,请更新客户端和服务器动态测试套件。
对 FIDL 线上传输格式的更改
- 更新绑定以支持新的线上传输格式。
- 更新线上传输格式规范,以记录新的线上传输格式。
- 更新 measure-tape,以支持采用新传输格式的大小计算。
- 更新 fidl-codec,以支持采用新传输格式进行编码/解码。
- 更新必须手动编码/解码 FIDL 的目标(以下列表和原因已于 2023 年 2 月审核):
- userboot:作为第一个用户空间进程,它无法使用可变数据段、RELRO 和线程本地存储。缺少 RELRO 会排除其初始化程序包含非 NULL 指针值的 const 全局/静态变量,这会排除许多库,包括 FIDL 绑定。https://fxbug.dev/42072759 将解决此问题。
- ldmsg:由 C 库在进程启动期间用于加载库。由于排错程序 ABI 要求,它无法使用成熟的 FIDL 绑定。https://fxbug.dev/42072830 将解决此问题。
- libc 排错程序/debugdata:排错程序支持库本身无法使用通过排错程序构建的函数。此问题将通过 https://fxbug.dev/42072760 解决。
泛用型测试要求
为以下设备添加保障方案: