我正在将 Rust 视为硬实时编程中 C/C++ 的替代品。我发现了两个可能的问题:
1) 如何避免调用 Rust 的 GC?我已经看到建议我可以通过简单地避免托管指针和非实时安全库(例如 Rust 的标准库)来做到这一点——这足以保证我的实时任务永远不会调用 GC 吗?
2) 如何将我的实时任务映射到操作系统线程?我知道 Rust 的标准库实现了 N:M 并发模型,但实时任务必须与一个 OS 线程直接对应。有没有办法产生这种类型的线程?
1) 如何避免调用 Rust 的 GC?我已经看到建议我可以通过简单地避免托管指针和非实时安全库(例如 Rust 的标准库)来做到这一点——这足以保证我的实时任务永远不会调用 GC 吗?
是的,避免@
将避免 GC。(Rust 目前实际上并没有实现 GC,所以现在所有代码都会自动避免它。)
2) 如何将我的实时任务映射到操作系统线程?我知道 Rust 的标准库实现了 N:M 并发模型,但实时任务必须与一个 OS 线程直接对应。有没有办法产生这种类型的线程?
std::task::spawn_sched(std::task::SingleThreaded, function)
(特殊格式将在#10095登陆时修复),例如
use std::task;
fn main() {
do task::spawn_sched(task::SingleThreaded) {
println("on my own thread");
}
}
也就是说,Rust 的运行时和标准库还没有为硬#[no_std]
实时编程设置,但是你可以使用( example )运行“runtimeless” ,这给你与 C/C++ 完全相同的情况,模语言差异和缺少标准库(尽管Rust 的 FFI意味着您可以相对轻松地调用 libc,并且rust-core项目被设计为一个最小的 stdlib,甚至不需要 libc 即可工作)。