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

Posted

技术标签:

【中文标题】如何在 Rust 中进行实时编程?【英文标题】:How do I do realtime programming in Rust? 【发布时间】:2013-10-26 22:58:51 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

是的,避免 @ 将避免 GC。 (Rust 目前实际上并没有实现 GC,所以现在所有代码都会自动避免它。)

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

@987654321@(@987654322@, function)(当#10095登陆时,特殊格式将被修复),例如

use std::task;
fn main() 
    do task::spawn_sched(task::SingleThreaded) 
        println("on my own thread");
    

也就是说,Rust 的运行时和标准库还没有为 hard-实时编程设置,但您可以使用 #[no_std] (example) 运行“runtimeless”你和 C/C++ 完全一样的情况,模语言差异和缺乏标准库(虽然Rust's FFI 意味着你可以相对容易地调用 libc,而rust-core 项目被设计为一个最小的 stdlib,它不'甚至不需要 libc 才能工作)。

【讨论】:

我对@9​​87654331@的理解是它适用于整个箱子。我可以将 #[no_std] crate 中的实时代码编译到库中,然后将其与我的应用程序的其余部分链接,这样我就可以将 Rust 的运行时和标准库用于非实时代码吗? 它是板条箱范围的;是的,这可能是可能的,但我从未尝试过。 谢谢。我继续学习了足够多的 Rust 来测试它,并且它有效。如果我认为它会这么简单,我早就自己测试了。

以上是关于如何在 Rust 中进行实时编程?的主要内容,如果未能解决你的问题,请参考以下文章

C 还是 Rust:选择哪个用于硬件抽象编程

2023年Rust发展如何?

Rust:一个不再有 C/C++ 的,实现安全实时软件的未来

硬核!Rust异步编程方式重大升级:新版Tokio如何提升10倍性能详解

Rust 学习总结—— 初识 Rust,作为新势力它的前景如何?

如何在 Rust 中修复“.. 在循环的上一次迭代中可变地借用”?