更改 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>
后端的更改
- 如果生成的代码已更改,请更新 bindings 文档。
- 更新绑定教程以反映当前的最佳做法和模式。
- 添加在 build 中编译和运行的示例代码(例如 //examples/fidl/go/fidl_packages/fidl_test.go)。
- 更新所有相关指南:
- 如需使用此功能的指导,请参阅 FIDL API 评分准则。
- 例如,在 C++ 传输类型中更改内存分配 API 时,应更新 C++ 传输域对象内存所有权指南。
- 我们还发现,向 API 委员会介绍新功能是一种不错的做法,并向委员会成员解释如何根据改进后的 API 审核 API。
- 如果更改绑定 API,请更新 GIDL 后端以使用更新后的 API。
- 如果更改行为或添加动态功能,请更新客户端和服务器动态测试套件。
FIDL 传输格式的变更
- 更新绑定以支持新的传输格式。
- 更新有线格式规范,以记录新的有线格式。
- 更新了测量带,以支持以新的导线格式计算尺寸。
- 更新 fidl-codec 以支持新的有线格式编码/解码。
- 更新必须手动编码/解码 FIDL 的目标(以下列表和原因已于 2023 年 2 月审核):
- userboot:作为第一个用户空间进程,它无法使用可变数据段、RELRO 和线程本地存储空间。缺少 RELRO 会导致常量/静态变量的初始化函数包含非 NULL 指针值,这会排除包括 FIDL 绑定在内的许多库。此问题将通过 https://fxbug.dev/42072759 解决。
- ldmsg:C 库用于在进程启动期间加载库。由于排错程序 ABI 要求,它无法使用全面的 FIDL 绑定。此问题将通过 https://fxbug.dev/42072830 解决。
- libc sanitizers/debugdata:排错程序支持库本身无法使用通过排错程序构建的函数。此问题将由 https://fxbug.dev/42072760 解决。
水平测试要求
将覆盖范围扩大到: