这是关于在 QEMU 中使用 Rust 的路线图的邮件,主要内容如下:
- 现状(Status in QEMU 9.2):使用
--enable-rust
编译的 QEMU 在所有支持的构建平台上都能通过 CI 和单元测试,但默认不启用 Rust 且不检查其存在。目前正在研究简单设备,Zhao Liu 正在将 HPET 设备转换为 Rust,且建议在 FFI 抽象准备好之前不要添加其他设备。 - 构建系统(Build system):该系列提供了对 clippy、rustfmt 和 rustdoc 的访问,方便集成工具。下一步计划将 clippy 和 rustfmt 集成到 Meson 中,将 rustdoc 测试集成到“make check”中,长期来看,希望 Meson 能提供类似 Cargo 的功能。
- pl011 设备的功能对等(Feature parity for pl011 device):Rust 版本的 pl011 缺少一些最近的提交,Philippe 正在将它们移植到 Rust 中,同时还在实现流控制和更好地使用 PL011 FIFO,但这部分在 Rust 中的实现因缺少字符设备绑定而受阻,日志和跟踪功能也缺失,但不影响默认启用
--enable-rust
。 - 避免未定义行为(Avoiding undefined behavior):目前 Rust in QEMU 代码存在不遵守不变量和创建无效引用的问题,第一部分通过使用适当的内部可变性类型来解决,第二部分计划使用 Linux 的 pinned-init crate,但目前仅支持 nightly Rust。
- 安全的 QOM 类定义(Safe QOM class definitions):通过引入 ClassInitImpl trait 来初始化 QOM 类的方法,简化了从安全的 Rust 代码访问 QOM 的任务,目前正在征求对第一部分的审查,同时认为过程宏仍然是一个有价值的工具。
- QOM 方法调用(QOM method calls):基于 glib-rs 的 IsA trait 实现了能够调用 QOM 方法的代码,相关的 IsA trait 允许类型安全的编译时检查转换,简化了方法调用的实现。
- 回调(Callbacks):这是最不成熟的“紧急”更改,目前只有一个简单的 100% Rust 示例,HPET 中的定时器数组使回调更具挑战性,需要有人研究更好的方案。
- 跟踪/日志(Tracing/logging):跟踪和日志功能尚未支持,跟踪部分不清楚有多少 C 代码可以重用和多少 Rust 代码可以自动生成,纯 Rust 实现很有趣,但需要定义编码风格,日志是一个小组件,是定义 C 到 Rust 转换编码风格的机会。
- 数据结构互操作性(Data structure interoperability):关于将 QEMU 的 Error 对象转换为 Rust 的 Error trait 及反之的工作,有两种不同的方法,需要更多人参与设计,目前作者不打算进行相关工作。
- 近期 Rust 的预期功能(Features expected from recent rust):QEMU 支持 rustc 1.63.0 及以上版本,但缺少一些新功能,预计在停止支持 Debian bookworm 后将最小支持版本提升到 1.75.0,同时 QEMU 还支持 0.60.x 版本的 bindgen,将在不需要支持旧版本时采用新的选项。
邮件还提供了回复邮件的方法和相关链接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。