NiQin (blog: 泥芹) shared the aphorism --
I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all. -- 《圣经》

[Rust] 为什么我们应当将 Rust 用于嵌入式开发?

💥 内容涉及著作权,均归属作者本人。若非作者注明,默认欢迎转载:请注明出处,及相关链接。

Summary: 因 Rust 语言具有较少的内存管理问题、高性能、跨平台支持、跨平台支持,以及丰富的生态系统,在嵌入式开发方面,Rust 非常具有优势。程序员进行低层次控制时,语言自身和编译器确保了内存安全。此外,Rust 的可移植性和互操作性,更符合嵌入式系统开发的重要需求,使得 Rust 语言更值得嵌入式系统开发者选择。

Topics: rust rust-embedded rust-嵌入式

笔者最近在了解嵌入式 Rust 开发方面的知识,网络搜索中,阅读到了 Pawan Bisht 于 2021 年 5 月 4 日发表在 knoldus 博客的文章 Why Rust for Embedded Development?。此文阐述了将 Rust 用于嵌入式的诸多优势,特此分享。

Rust 是一门系统编程语言,专注于三个要素:安全性、并发性,以及高性能。在语法上,Rust 类似于 C++,但具有内存安全性。

今天,我们将尝试理解:为什么我们应当将 Rust 用于嵌入式开发?以及在嵌入式开发领域,Rust 比其它编程语言更合适、更重要的几个原因。

rust-embedded

较少的内存管理问题

众所周知,70% 的安全漏洞,都是由于内存错误而造成的。在防止内存安全问题方面,Rust 语言自身有其机制发挥着重要作用。Rust 语言中,有一个名为借用检查器(borrow checker)的组件,该组件旨在强制执行内存和资源的所有权(ownership),确保在编译时,捕获对内存的任何滥用。Rust 迫使开发者思考,让开发者意识到他们到底在做什么。

以前的开发中,面临的问题是:开发人员要么可以获得低层次的控制,要么可以获得更安全的权限。

例如:在 C/C++ 中,当程序员进行低层次的控制时,必须多加谨慎,他们必须考虑很多事情,以确保内存安全。

但是,在 Rust 出现之后,程序员进行低层次控制时,语言自身和编译器确保了内存安全。

高性能

Rust 语言中,性能提升的主要原因之一是:没有垃圾收集器。在编译时,确定何时不再需要内存,并且清理内存。与其它编程语言不同,Rust 没有运行时(runtime)检查。也就是说,Rust 所有的检查,都仅在编译时验证。

因为我们可以直接访问硬件和内存,所以 Rust 是嵌入式和裸机式(bare-metal)开发的理想程序设计语言。并且可以对我们的程序进行优化,使之接近机器硬件的最大理论性能。

跨平台支持

使用 Rust,我们可以在各种操作系统上,轻松构建完美工作的跨平台解决方案。此外,在 Rust 中有一些 web 框架可用,我们可以编写前端应用程序,如 Rocket、Actix 等。

丰富的生态系统

在软件的生产环境中,需要更多方面的因素,以保持其质量。Rust 具有丰富的生态系统:软件包管理器 Cargo、软件包社区站点 crates.io、文档中心站点 doc.rs 等等。当然还有更多生态工具,包括 Clippy,其提供的编译器扩展工具 lint 和 rustfmt,可自动进行语法检查、代码分析,以及格式化代码。

此外,Rust 还有一些官方和非官方的帮助渠道,比如聊天室、用户论坛、reddit 网站的 Rust 子站点、Stack Overflow 和其开设的 Rust 交谈频道。类似其它技术,Rust 也有许多全球交流研讨会议,如 RustConf、Rust Belt Rust、RustFest、RustCon Asia 等等。因此,我们可以说,Rust 有一个充满活力和受欢迎的社区。

好吧!我们已经介绍了使用 Rust 进行嵌入式开发的部分优点。现在我们来讨论:Rust 能否满足嵌入式系统的一些需求?

上述优势分析,是关于在嵌入式开发中,使用 Rust 的原因。然而,嵌入式开发中还有一些条件,使得 Rust 语言更值得选择。

可移植性

简而言之,可移植性即是“系统独立性(system Independence)”。在嵌入式系统中,如果一个产品能够在不同的环境中运行,那么,它可以被称为便携式产品。实现可移植性的一种方法,是通过硬件抽象层(HAL,Hardware Abstraction Layer)。

硬件抽象,是指软件中的一组类和例程,用于模拟某些特定于平台的细节。换句话说,硬件抽象提供了对硬件资源的直接访问。

那么,Rust 是如何满足这种重要需求的呢?在 Rust 中,具有嵌入式硬件抽象层(embedded-hal),其是一组 traits,定义了硬件抽象层(HAL)的:实现、驱动程序、应用程序,以及固件)之间的实现契约。

互操作性

软件的互操作性,是为了有效地交换和处理信息,而相互通信的能力。

Rust 语言实现了在和 C 语言的互操作性。关于此互操作方式,Rust 标准库 stdlib 中有两个专用的模块:std::ffistd::os::raw。另外,Rust 还支持与其它构建系统的互操作性。目前,RTOSs 正在进行中。

谢谢您的阅读!


Related Articles

  1. [WebAssembly] yew SSR 服务器端渲染
  2. [Rust] async-std 创建者对于最近“项目是否已死?”,移除对其支持等的答复
  3. [Rust] Rust 1.56.0 版本和 Rust 2021 版次发布,新特性一览,及项目的迁移、升级
  4. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 博客应用的体验报告
  5. [Rust] Rust 官方周报 399 期(2021-07-14)
  6. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(5)- 构建 HTTP 请求、与外部服务器通信的两种方法
  7. [Rust] Rust 官方周报 398 期(2021-07-07)
  8. [Rust] Rust 官方周报 397 期(2021-06-30)
  9. [Rust] Rust 官方周报 396 期(2021-06-23)
  10. [Rust] Rust 官方周报 395 期(2021-06-16)
  11. [Rust] Rust 1.53.0 明日发布,关键新特性一瞥
  12. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(3)- rhai 脚本、静态/资源文件、环境变量等
  13. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(2)- 获取并解析 GraphQL 数据
  14. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(1)- crate 选择及环境搭建
  15. [Rust] Rust 官方周报 394 期(2021-06-09)
  16. [Rust] Rust web 前端库/框架评测,以及和 js 前端库/框架的比较
  17. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(4)- 获取 GraphQL 数据并解析
  18. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(3)- 资源文件及小重构
  19. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(2)- 组件和路由
  20. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(1)- 起步及 crate 选择
  21. [Rust] Rust 官方周报 393 期(2021-06-02)
  22. [Rust] Rust 官方周报 392 期(2021-05-26)
  23. [Rust] Rust 中,对网址进行异步快照,并添加水印效果的实践
  24. [Rust] Rust 官方周报 391 期(2021-05-19)
  25. [Rust] Rust,风雨六载,砥砺奋进
  26. [Rust] 为什么我们应当将 Rust 用于嵌入式开发?
  27. [Rust] Rust 官方周报 390 期(2021-05-12)
  28. [Rust] Rust + Android 的集成开发设计
  29. [Rust] Rust 1.52.1 已正式发布,及其新特性详述
  30. [Rust] 让我们用 Rust 重写那些伟大的软件吧
  31. [Rust] Rust 1.52.0 已正式发布,及其新特性详述
  32. [Rust] Rust 官方周报 389 期(2021-05-05)
  33. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(4) - 变更服务,以及小重构
  34. [Rust] Rust 1.52.0 稳定版预发布测试中,关键新特性一瞥
  35. [Rust] Rust 生态中,最不知名的贡献者和轶事
  36. [Rust] Rust 基金会迎来新的白金会员:Facebook
  37. [Rust] Rustup 1.24.1 已官宣发布,及其新特性详述
  38. [Rust] Rust 官方周报 388 期(2021-04-28)
  39. [Rust] Rust 官方周报 387 期(2021-04-21)
  40. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(4)- 变更服务,以及第二次重构
  41. [Rust] Rustup 1.24.0 已官宣发布,及其新特性详述
  42. [Rust] basedrop:Rust 生态中,适用于实时音频的垃圾收集器
  43. [Rust] Rust 编译器团队对成员 Aaron Hill 的祝贺
  44. [Rust] Jacob Hoffman-Andrews 加入 Rustdoc 团队
  45. [机器人] 为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐
  46. [Rust] rust-lang.org、crates.io,以及 docs.rs 的管理,已由 Mozilla 转移到 Rust 基金会
  47. [Rust] Rust 官方周报 386 期(2021-04-14)
  48. [Rust] Rust 编译器(Compiler)团队 4 月份计划 - Rust Compiler April Steering Cycle
  49. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(3) - 重构
  50. [Rust] 头脑风暴进行中:Async Rust 的未来熠熠生辉
  51. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(2) - 查询服务
  52. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务 - 起步及 crate 选择
  53. [Rust] Rust 2021 版本特性预览,以及工作计划
  54. [Rust] Rust 用在生产环境的 42 家公司
  55. [Rust] 构建最精简的 Rust Docker 镜像
  56. [Rust] Rust 官方周报 385 期(2021-04-07)
  57. [Rust] 使用 Rust 做异步数据采集的实践
  58. [Rust] Android 支持 Rust 编程语言,以避免内存缺陷
  59. [Rust] Android 平台基础支持转向 Rust
  60. [Rust] Android 团队宣布 Android 开源项目(AOSP),已支持 Rust 语言来开发 Android 系统本身
  61. [Rust] RustyHermit——基于 Rust 实现的下一代容器 Unikernel
  62. [Rust] Rustic:完善的纯粹 Rust 技术栈实现的国际象棋引擎,多平台支持(甚至包括嵌入式设备树莓派 Raspberry Pi、Buster)
  63. [Rust] Rust 迭代器(Iterator trait )的要诀和技巧
  64. [Rust] 使用 Rust 极致提升 Python 性能:图表和绘图提升 24 倍,数据计算提升 10 倍
  65. [Rust] 【2021-04-03】Rust 核心团队人员变动
  66. [Rust] Rust web 框架现状【2021 年 1 季度】
  67. [Rust] Rust 官方周报 384 期(2021-03-31)
  68. [Rust] Rust 中的解析器组合因子(parser combinators)
  69. [生活] 毕马威(KPMG)调查报告:人工智能的实际采用,在新冠疫情(COVID-19)期间大幅提升
  70. [Python] HPy - 为 Python 扩展提供更优秀的 C API
  71. [Rust] 2021 年,学习 Rust 的网络资源推荐(2)
  72. [Rust] 2021 年,学习 Rust 的网络资源推荐
  73. [生活] 况属高风晚,山山黄叶飞——彭州葛仙山露营随笔
  74. [Rust] Rust 1.51.0 已正式发布,及其新特性详述
  75. [Rust] 为 Async Rust 构建共享的愿景文档—— Rust 社区的讲“故事”,可获奖
  76. [Rust] Rust 纪元第 382 周最佳 crate:ibig 的实践,以及和 num crate 的比较
  77. [Rust] Rust 1.51.0 稳定版本改进介绍
  78. [Rust] Rust 中将 markdown 渲染为 html
  79. [生活] 国民应用 App 的用户隐私数据窥探
  80. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(3)- 重构
  81. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(2)- 查询服务
  82. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(1)- 起步及 crate 选择
  83. [Rust] Rust 操控大疆可编程 tello 无人机

Topics

rust(83)

graphql(17)

rust-官方周报(17)

webassembly(16)

wasm(10)

async-graphql(9)

yew(9)

tide(8)

rust-官方博客(8)

rust-web(7)

this-week-in-rust(6)

mysql(5)

actix-web(5)

rbatis(5)

android(4)

mongodb(3)

json-web-token(3)

jwt(3)

cargo(3)

技术延伸(3)

rust-wasm(3)

trunk(3)

handlebars(3)

rhai(3)

用户隐私(2)

学习资料(2)

python(2)

ai(2)

人工智能(2)

postgresql(2)

rust-compiler(2)

rust-基金会(2)

rust-foundation(2)

rustup(2)

rust-toolchain(2)

rust-工具链(2)

rust-游戏开发(2)

rust-区块链(2)

rust-2021(2)

graphql-client(2)

surf(2)

rust-game(2)

async-std(2)

tello(1)

drone(1)

无人机(1)

隐私数据(1)

markdown(1)

html(1)

crate(1)

async(1)

异步(1)

旅游(1)

不忘生活(1)

葛仙山(1)

hpy(1)

python-扩展(1)

正则表达式(1)

解析器组合因子(1)

组合器(1)

regular-expression(1)

parser-combinator(1)

regex(1)

官方更新(1)

rust-工作招聘(1)

rust-技术资料(1)

rust-周最佳-crate(1)

rust-web-框架(1)

rust-web-framework(1)

rust-核心团队(1)

rust-core-team(1)

rust-language-team(1)

pyo3(1)

rust-python-集成(1)

python-性能改进(1)

迭代器(1)

iterator-trait(1)

国际象棋(1)

chess(1)

游戏引擎(1)

game-engine(1)

虚拟化(1)

unikernel(1)

rustyhermit(1)

linux(1)

virtualization(1)

sandboxing(1)

沙箱技术(1)

数据采集(1)

异步数据采集(1)

docker(1)

镜像(1)

生产环境(1)

rust-评价(1)

rust-2021-edition(1)

rust-2021-版本(1)

graphql-查询(1)

vision-doc(1)

愿景文档(1)

代码重构(1)

steering-cycle(1)

方向周期(1)

隐私声明(1)

机器人(1)

robotics(1)

rustdoc(1)

rust-编译器(1)

实时音频(1)

real-time-audio(1)

变更服务(1)

mutation(1)

查询服务(1)

query(1)

rust-贡献者(1)

rust-轶事(1)

rust-稳定版(1)

rust-预发布(1)

rust-测试(1)

安全编程(1)

可信计算(1)

安全代码(1)

secure-code(1)

rust-android-integrate(1)

rust-embedded(1)

rust-嵌入式(1)

rust-生产环境(1)

rust-production(1)

网页快照(1)

网页截图(1)

水印效果(1)

图片水印(1)

yew-router(1)

css(1)

web-前端(1)

wasm-bindgen(1)

区块链(1)

blockchain(1)

dotenv(1)

标识符(1)

rust-1.53.0(1)

rusthub(1)

rust-1.56.0(1)

rust-项目升级(1)

异步运行时(1)

ssr(1)

tokio(1)

warp(1)

reqwest(1)


Elsewhere

- Open Source
  1. github/zzy
  2. github/sansx
- Learning & Studying
  1. Rust 学习资料 - 泥芹