define-simple-traits 技术文档
路径:
components/crate_interface/test_crates/define-simple-traits类型:库 crate /crate_interface多 crate 测试矩阵中的定义端测试资产 Rust 通道:stable 发布属性:publish = false文档依据:Cargo.toml、src/lib.rs、components/crate_interface/README.md、components/crate_interface/Cargo.toml、仓库根Cargo.toml、components/crate_interface/test_crates/Cargo.toml、components/crate_interface/test_crates/impl-simple-traits/src/lib.rs、components/crate_interface/test_crates/test-simple/src/main.rs、components/crate_interface/test_crates/run_tests.sh
define-simple-traits 位于 components/crate_interface/test_crates 独立工作区中,在 components/crate_interface/Cargo.toml 和仓库根 Cargo.toml 里都被显式排除,不参与主工作区的常规构建与发布。它的职责不是给 ArceOS、StarryOS 或 Axvisor 提供正式运行时接口,而是为 crate_interface 提供稳定版多 crate 验收测试中的“定义端”样例 。
1. 真实定位与架构设计
1.1 为什么单独做成定义端 crate
crate_interface README 的核心模型是“在一个 crate 中定义接口、在另一个 crate 中实现、在第三个 crate 中调用”。define-simple-traits 就是这条链路里的第一段:
| 角色 | crate | 真实职责 |
|---|---|---|
| 定义端 | define-simple-traits | 用 #[def_interface] 声明接口和可选调用辅助函数 |
| 实现端 | impl-simple-traits | 用 #[impl_interface] 为接口导出实现符号 |
| 调用与验收端 | test-simple | 把定义端与实现端链接进最终二进制,并执行断言 |
这种拆分不是目录偏好,而是测试语义的一部分。只有把定义、实现、调用拆到不同 crate,才能真实验证 README 所描述的跨 crate 接口模型是否仍然成立。
1.2 接口矩阵覆盖了哪些能力
src/lib.rs 只 定义了四组 trait,但它们分别固定住了稳定版主路径最关键的四个宏分支:
| 接口 | 宏配置 | 覆盖目标 |
|---|---|---|
SimpleIf | #[def_interface] | 验证最基础的跨 crate 定义、实现和调用路径 |
NamespacedIf | namespace = SimpleNs | 验证接口区分依赖命名空间而非模块路径 |
CallerIf | gen_caller | 验证生成的辅助调用函数与 call_interface! 一致 |
AdvancedIf | gen_caller, namespace = AdvancedNs | 验证“命名空间 + 调用辅助函数”组合路径 |
这些接口都刻意保持极简:只有无接收者的关联函数,没有泛型、没有状态、没有默认实现。这正对应 crate_interface README 中对接口形态的约束。
1.3 这份定义集刻意不承担什么
这个 crate 有意保持“定义薄、行为少、断言强”的风格:
- 不提供默认实现,不覆盖
weak_default分支。 - 不持有运行时状态,也不承担初始化、注册或资源管理。
- 不模拟真实业务协议,只提供足够暴露符号命名和调用约定问题的样例。
- 不追求外部 API 稳定性;接口名字和返回值首先服务测试覆盖面。