如何在Rust中进行实时编程?

cro*_*alk 5 real-time rust

我正在将Rust视为硬实时编程中C/C++的替代品.我发现了两个可能的问题:

1)如何避免调用Rust的GC?我已经看到了一些建议,我可以通过简单地避免托管指针和非实时安全库(例如Rust的标准库)来实现这一点 - 这是否足以保证我的实时任务永远不会调用GC?

2)如何将实时任务映射到OS线程?我知道Rust的标准库实现了N:M并发模型,但实时任务必须直接与一个OS线程对应.有没有办法产生这种类型的线程?

huo*_*uon 5

1)如何避免调用Rust的GC?我已经看到了一些建议,我可以通过简单地避免托管指针和非实时安全库(例如Rust的标准库)来实现这一点 - 这是否足以保证我的实时任务永远不会调用GC?

是的,避免@会避免使用GC.(Rust目前实际上没有实现GC,因此所有代码现在都会自动避免它.)

2)如何将实时任务映射到OS线程?我知道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");
    }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,Rust的运行时和标准库还没有为实时编程设置(但是),但你可以使用#[no_std](例子)运行"无运行" ,它给你的情况与C/C++完全相同,模数语言差异和缺少标准库(虽然Rust的FFI意味着你可以相对容易地调用libc,而rust-core项目被设计成一个甚至不需要libc工作的最小stdlib).