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

     2023-02-16     269

关键词:

【中文标题】如何在 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 Diesel 中使用时间戳和间隔进行算术运算

】如何在RustDiesel中使用时间戳和间隔进行算术运算【英文标题】:HowtodoarithmeticwithtimestampsandintervalsinRustDiesel【发布时间】:2020-05-1606:24:47【问题描述】:我一直在尝试使用过滤器表达式构建柴油查询,这些表达式对时间戳和时... 查看详情

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

】如何在Rust中修复“..在循环的上一次迭代中可变地借用”?【英文标题】:Howtofix"..wasmutablyborrowedhereinthepreviousiterationoftheloop"inRust?【发布时间】:2021-05-1522:55:41【问题描述】:我必须对键进行迭代,通过键在HashMap中找... 查看详情

如何获取用于在我的 Rust Tonic 服务中进行身份验证的客户端证书?

】如何获取用于在我的RustTonic服务中进行身份验证的客户端证书?【英文标题】:HowtoobtainclientcertificateusedtoauthenticateinmyRustTonicservice?【发布时间】:2021-06-1713:11:32【问题描述】:在我的RustTonic设置中,我在客户端和服务器之间... 查看详情

c还是rust:选择哪个用于硬件抽象编程

...选择。通常会将其与C的抽象级别相比较。本文介绍了Rust如何通过多种方式处理按位运算,并提供了既安全又易于使用的解决方案。在系统编程领域,你可能经常需要编写硬件驱动程序或直接与内存映射设备进行交互,而这些交... 查看详情

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

https://www.infoq.cn/article/dgKDBiPl7KID0dyaE7Wl?utm_source=related_read&utm_medium=articleRust 作为新兴编程语言深受Haskell和OCaml等函数式编程语言的影响,使得它在语法上与C++类似,但在语义上则完全不同。Rust是静态类型语言,同时具有完... 查看详情

如何在 Rust 中运行任何测试之前运行设置代码?

】如何在Rust中运行任何测试之前运行设置代码?【英文标题】:HowtorunsetupcodebeforeanytestsruninRust?【发布时间】:2019-09-1907:39:04【问题描述】:我有一个Rust应用程序(一个简单的解释器),需要在环境可用之前进行一些设置(初... 查看详情

如何在 Rust 中传递对可变数据的引用?

】如何在Rust中传递对可变数据的引用?【英文标题】:HowdoIpassareferencetomutabledatainRust?【发布时间】:2014-05-0921:41:25【问题描述】:我想在堆栈上创建一个可变结构并从辅助函数中对其进行变异。#[derive(Debug)]structGamescore:u32,fnaddPo... 查看详情

2023年rust发展如何?

1.引言Rust是一种系统编程语言,它注重安全、并发和内存效率。自2010年首次发布以来,Rust一直在快速发展,吸引了越来越多的开发者加入其社区。Rust语言的设计目标是提供一种安全、并发和实用的语言,它可以满足系统编程的... 查看详情

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

前言在StackOverflow2020调查中,Rust被选为最受欢迎的编程语言第一名,这要归功于86%的开发人员表示他们会继续使用它。对于语言创造者来说,这并不是什么新鲜事——Rust自2016年以来一直在这项调查中获胜。在Tiobe指... 查看详情

如何在 Python 中进行实时语音活动检测?

】如何在Python中进行实时语音活动检测?【英文标题】:HowcanIdoreal-timevoiceactivitydetectioninPython?【发布时间】:2020-07-0500:23:53【问题描述】:我正在对录制的音频文件执行语音活动检测,以检测波形中的语音与非语音部分。分类... 查看详情

如何在 android 实时通话期间以编程方式发送 Dtmf 音?

】如何在android实时通话期间以编程方式发送Dtmf音?【英文标题】:howtosendDtmftoneprogrammaticallyduringalivecallinandroid?【发布时间】:2016-01-1310:17:18【问题描述】:我想在我的应用程序中以编程方式发送DTMF音调。在搜索时我找到了一... 查看详情

你如何在 Substrate 特定类型和 Rust 原始类型之间进行转换?

】你如何在Substrate特定类型和Rust原始类型之间进行转换?【英文标题】:HowdoyouconvertbetweenSubstratespecifictypesandRustprimitivetypes?【发布时间】:2019-09-2813:41:45【问题描述】:使用Substrate区块链框架,我如何在Substrate特定类型和Rust原... 查看详情

如何使用套接字编程在两个 android 手机之间创建实时音频流..?

】如何使用套接字编程在两个android手机之间创建实时音频流..?【英文标题】:howtocreateliveaudiostreamingbetweentwoandroidmobilesusingsocketprogramming..?【发布时间】:2013-01-0104:01:59【问题描述】:我正在尝试开发一个android应用程序,该应... 查看详情

如何在 div 标签中进行“实时”文本更改 [重复]

】如何在div标签中进行“实时”文本更改[重复]【英文标题】:Howcanimakea"Realtime"textchangeindivtag[duplicate]【发布时间】:2020-08-1309:29:20【问题描述】:所以,我有这个示例代码:<textareaid="input"onkeydown="pressed()"></textarea... 查看详情

如何在 Xcode 中应用 Deeplab V3 进行实时分割?

】如何在Xcode中应用DeeplabV3进行实时分割?【英文标题】:HowtoapplyDeeplabV3inXcodeforrealtimesegmentation?【发布时间】:2019-09-3005:41:48【问题描述】:其实我是swift和DeeplabV3的初学者。我真的不知道如何在Xcode上集成deeplab。我只想在ios中... 查看详情

rust内存管理(代码片段)

...堆上分配的内存(可以理解为 malloc 出来的内存)进行管理,不外乎两种方式:使用者在代码中显示调用函数,回收这部分内存;或者引入自动的垃圾 查看详情

rust编程语言〇

...程语言〇Rust官方:rust官方支持的环境我这里使用idea进行配置idea安装Rust插件需要安装两个插件intellij-rust和intellij-toml,intellij-rust是Rust语言插件,intellij-toml是为Toml语言的插件,是为cargo的配置文件cargo.toml使用。安装方... 查看详情

如何在 c# mvc 代码中进行实时搜索后使用值更新无序列表?

】如何在c#mvc代码中进行实时搜索后使用值更新无序列表?【英文标题】:HowdoIupdateanUnorderedListwithvaluesafteraLivesearchinc#mvccode?【发布时间】:2021-10-1808:25:15【问题描述】:我想在文本框中输入内容时进行实时搜索以过滤结果。页... 查看详情