axvisor_api_proc
路径:
virtualization/axvisor_api_proc类型:过程宏库 分层:组件层 / 编译期 API 生成辅助 版本:0.1.0文档依据:当前仓库源码、Cargo.toml、README.md、src/lib.rs、src/items.rs、virtualization/axvisor_api/src/lib.rs、virtualization/axvisor_api/src/test.rs
axvisor_api_proc 不是运行时 API 库,而是 axvisor_api 背后的过程宏辅助 crate。它的职责是把一组带 extern fn 语法标记的模块,展开成可调用的 API 包装函数和对应的 crate_interface trait/impl 胶水代码。因此它属于“编译期 glue”,而不是 Hypervisor 子系统本体。
架构设计
设计定位
这个 crate 解决的是 Axvisor API 组织方式问题:
- 如何让“定义 API 的模块”写起来像普通 Rust 模块
- 如何让“实现这些 API 的模块”在另一个位置编写
- 如何在编译期自动生成跨模块绑定代码
其公开入口只有两个属性宏:
#[api_mod]#[api_mod_impl(path)]
这说明它的本质是一套模块级 API DSL,而不是运行时组件。
1.2 语法模型
src/items.rs 定义了宏要解析的核心语法节点:
| 类型 | 作用 |
|---|---|
ItemApiFn<T> | 表示一个 API 函数;定义态用 ;,实现态用 Block |
ApiModItem<T> | 模块中的条目,区分普通 item 和 API 函数 |
ItemApiMod<T> | 带有 API 语义的模块定义 |
ItemApiModDef | #[api_mod] 使用的定义态模块 |
ItemApiModImpl | #[api_mod_impl] 使用的实现态模块 |
这里最关键的设计是:
- API 函数用
extern fn ...;或extern fn ... { ... }作为标记 - 普通 item 则原样保留
这样宏就能在一个模块里同时容纳:
- 类型别名
use/pub use- 普通辅助函数
- 真正需要跨组件绑定的 API 函数