impl-simple-traits
路径:
components/crate_interface/test_crates/impl-simple-traits类型:库 crate /crate_interface稳定测试矩阵的实现端资产 工作区定位:components/crate_interface/test_crates独立测试工作区中的实现侧样例库 版本:0.1.0文档依据: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/test-simple/src/main.rs、components/crate_interface/test_crates/run_tests.sh、components/crate_interface/.github/workflows/ci.yml
impl-simple-traits 的真实职责很单一:为 define-simple-traits 中定义的接口提供一组确定性实现,并通过 #[impl_interface] 把这些实现导出为可链接的符号,供 test-simple 在最终二进制里调用。它不是 ArceOS、StarryOS 或 Axvisor 的正式运行时组件,而是 crate_interface 多 crate 稳定测试矩阵中的“实现端”测试资产。
架构设计
1.1 真实定位
从工作区组织上看,这个 crate 被放在 components/crate_interface/test_crates 子工作区中。components/crate_interface/Cargo.toml 又显式把 test_crates 排除在 crate_interface 包内工作区之外,而仓库根 Cargo.toml 再把它纳入总工作区统一构建。这说明它的定位不是 crate_interface 库本体的一部分,而是与库本体并行维护的回归测试资产。
它在测试矩阵里的职责是“实现端”而不是“定义端”或“消费端”:
define-simple-traits负责定义接口。impl-simple-traits负责提供实现并导出符号。test-simple负责把定义侧与实现侧链接到一起并做断言。
1.2 实现矩阵
src/lib.rs 中的 4 个公开实现类型分别覆盖 crate_interface 稳定路径上的 4 个关键能力:
| 实现类型 | 对应接口 | 关键行为 | 主要验证点 |
|---|---|---|---|
SimpleImpl | SimpleIf | 返回 12345、a * b + 10、"SimpleImpl" | 最基础的跨 crate 定义/实现/调用分离 |
NamespacedImpl | NamespacedIf | 返回 999 | namespace 参与符号隔离 |
CallerImpl | CallerIf | add_one(x) = x + 1,multiply(a, b) = a * b | gen_caller 生成的辅助函数与 call_interface! 命中同 一实现 |
AdvancedImpl | AdvancedIf | process(input) = input * 2 + 100 | namespace + gen_caller 的组合路径 |
这些返回值都刻意保持简单、稳定、可一眼识别,目的不是表达业务语义,而是提升测试可观测性。
1.3 符号导出模型
这个 crate 的核心不是“定义了几个结构体”,而是“每个 impl 都带着 #[impl_interface]”。根据 crate_interface README 的设计,#[impl_interface] 会把 trait 方法导出成统一的符号名,调用方并不直接依赖实现类型本身,而是依赖这些导出符号。
因此这里的公开类型主要承担两种职责:
- 作为
#[impl_interface]的实现载体。 - 作为
test-simple中的链接锚点,确保实现 crate 被最终二进制显式带入。
test-simple/src/main.rs 里专门通过 std::any::type_name::<...>() 引用这些类型,目的不是实例化对象,而是防止链接阶段把实现侧代码优化掉。
1.4 与正式运行时组件的边界
这个 crate 有几个边界必须明确:
- 它不是系统主线可复用的接口实现库。
- 它不维护状态、不做初始化、不承载业务逻辑。
- 它默认每个接口在同一最终二进制里只有一份实现。
- 它的实现值首先服务测试辨识度,而不是功能正确性之外的含义。
核心功能
功能概览
- 为稳定路径的接口样例导出强符号实现。
- 覆盖基础调用、命名空间调用、
gen_caller调用和组合路径。 - 让
test-simple能在 stable Rust 下验证真实的跨 crate 链接闭环。 - 作为
crate_interface“实现端可以独立存在”的回归样本。
2.2 调用闭环
这个 crate 在测试矩阵中的调用链可以概括为:
define-simple-traits 定义 trait
impl-simple-traits 用 #[impl_interface] 导出实现符号
test-simple 引用实现类型以确保链接
call_interface! 与生成的 caller 命中这些导出符号
真正被验证的是链接期符号绑定,而不是对象方法派发。
边界说明
impl-simple-traits 不是“供运行时直接依赖的一组 接口实现”,而是 crate_interface 稳定测试矩阵中的实现端测试资产;这里公开的 SimpleImpl、CallerImpl 等类型本质上是符号导出和链接观测的载体。
依赖关系
直接依赖
| 依赖 | 作用 |
|---|---|
crate_interface | 提供 #[impl_interface] 过程宏 |
define-simple-traits | 提供待实现的接口定义 |
3.2 测试关系
| 角色 | 对象 | 说明 |
|---|---|---|
| 定义侧 | define-simple-traits | 负责声明接口与可选 caller |
| 实现侧 | impl-simple-traits | 负责导出实现符号 |
| 消费侧 | test-simple | 负责链接实现并断言结果 |
| 脚本入口 | run_tests.sh simple | 稳定路径的一键执行入口 |
| CI 入口 | cargo run -p test-simple | 在 crate_interface CI 中持续回归 |