为什么使用 Rust over C++ 进行 IoT 解决方案开发

news2024/11/13 10:40:48

物联网已成为我们日常生活中不可或缺的一部分,设备也越来越智能。随着该领域的扩展,迫切需要保证这些支持软件的设备的安全性、生产力和效率。因此,Rust 编程语言正在成为 IoT 设备开发人员仅次于 C++ 的第二大热门选择。本文将探讨为什么 Rust 正在成为嵌入式 IoT 开发的首选,以及如何在该领域有效地使用它。

在 IoT 开发中,C++ 一直是 IoT 和嵌入式系统的首选解决方案。此外,这种语言拥有经验丰富的开发社区,并被世界各地的工程师广泛使用。然而,最近,Rust 开始发挥作用并展示了它的潜力。因此,我们决定探讨为什么开发人员一直倾向于使用 Rust 进行嵌入式编程,而不是久经考验的 C++。

Rust 软件开发服务的历史

Rust 是一种现代系统编程语言,最初是由 Mozilla 和更广泛的开发社区概念化的。它专为安全、快速和并行的应用程序开发而设计,消除了与嵌入式解决方案和定制物联网开发相关的潜在内存和安全挑战。自 2006 年问世以来,Rust 语言经历了许多变化和改进,最终在 2010 年作为开源生态系统推出。

除了开发社区之外,Microsoft、Google、Amazon、Facebook、Intel 和 GitHub 等大公司也支持 Rust 并为其提供资金,以促进其开发和使用。这无疑加速了它的增长并增加了它的使用吸引力。

Rust 与 C++ 的困境:为什么每个人都在嵌入式系统创建中从 C++ 转向 Rust

Rust 和 C++ 编程语言是实现高性能应用程序开发的强大工具。对于嵌入式 IoT 应用程序,除了基础软件之外,还有几个关键因素会影响开发速度、安全性和可靠性。以下是前 5 个最重要的因素:

1. 安全和内存管理

Rust 的一个突出特点是它的编译时安全系统。这可确保在编译阶段检测并解决许多与内存相关的问题,例如内存泄漏和缓冲区溢出,从而获得更可靠和可维护的代码。Rust 采用独特的所有权系统,并移动了能够熟练处理对象生命周期的语义,从而减少了数据访问冲突。但是,这种独特性可能会提高进入门槛,尤其是对于新开发人员,他们可能会发现这些技术有些非常规。

C++ 语言也提供内存控制,但它需要更仔细的编程。如果处理不当,它很容易出现内存泄漏和不安全数据访问等陷阱。

2. 性能

Rust 的目标是在 C++ 性能方面具有竞争力。Rust 编译器生成高效的机器代码,并且由于系统类型安全,Rust 可以预测性地优化代码。

C++ 还保护了高性能并提供了广泛的优化工具。

3. 代码语法和可读性

Rust 提供最先进且干净的语法,有助于创建可读和可理解的代码。Rust 模板系统 (traits) 使代码更具表现力、易读且易于扩展。

C++ 具有历史语法,对于某些开发人员来说,这可能不太直观和可读。

4. 集成和多任务处理

Rust 提供了一种通过外部函数接口 (FFI) 与 C 和 C++ 集成的便捷方式,这使得移植现有项目变得更加容易,但仍需要额外的工作。Rust 的任期和类型系统排除了 “数据竞争”,有助于创建安全的多任务应用程序。Rust 还支持开箱即用的线程和竞争性多任务处理。

C++ 还提供多任务处理,但可以毫不费力地与 C 代码集成。

5. 生态系统和社区

Rust 有一个活跃且快速增长的开发社区。Cargo–Rust 的依赖项和构建管理系统使开发更加方便和可预测。

C++ 还拥有一个庞大且经验丰富的社区以及一个广泛的库和工具生态系统,其数量超过 Rust。

正如我们所看到的,Rust 为 IoT 应用程序开发人员提供了高级安全功能,可以防止许多常见错误并产生更可靠、更清晰的代码。它还受益于积极的社区支持,并利用 Cargo 系统进行高效的依赖项管理和编译。同时,Rust 提供了许多工具和开箱即用的库,它们的结果可与 C++ 相媲美,但工作量和代码要少得多。然而,Rust 在生态系统成熟度、C 集成和 Rust 软件开发初学者的可访问性方面仍然落后于 C++。

西格马

使用 Rust 进行物联网设备开发的真实案例:幼儿智能监控系统

Sigma Software 团队作为技术合作伙伴参与,帮助开发一款产品,为父母简化各种托儿程序。也就是说,我们将为连接到 ESP32-S3 MCU 的婴儿监护设备构建软件。

我们的团队一直在寻找最合适的解决方案,为我们提供成功交付所需的一切:多任务处理功能、安全的编码环境以及与网络、麦克风和扬声器连接的接口。我们看到了 Rust 满足这些要求的潜力,因为它有一个强大的生态系统,使我们能够毫不费力地集成所需的功能。尽管我们选择 Rust 作为主要工具,但我们还使用外部函数接口 (FFI) 有效地集成了特定的 C 和 C++ 库。

因此,从项目启动到发布测试版,我们只用了六个月的时间。一个月后,该解决方案已经上市并可供购买。在接下来的半年里,我们完善并扩展了其功能,包括远程控制、制度规划以及顺利集成到用户现有生态系统中的选项。功能扩展进行得很顺利,没有太多努力,也没有留下代码的味道,从而将重构的需求减少到最低限度。

该项目由三名开发人员在短短一年多内完成,已覆盖 5,000 多个家庭,突显了 Rust 在物联网开发中的可行性。

C++ 与 Rust:最后的思考

与 C++ 不同,在嵌入式系统创建中使用 Rust 有一个学习曲线。是的,这需要在项目开始时花费更多时间,因为开发人员需要学习该语言的创新和功能。是的,查找、优化或部分移植必要的库以用于特定解决方案将需要更长的时间。但结果是美观且可读性强的代码,可以快速扩展。因此,嵌入式 IoT 应用需要一种高效、安全和轻量级的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《机器学习》周志华-CH7(贝叶斯分类)

7.1贝叶斯决策论 对分类任务而言,在所有相关概率已知的理想情形下,贝叶斯决策论考虑如何基于这些概率核误判损失来选择最优的类别标记。 R ( x i ∣ x ) ∑ j 1 N λ i j P ( c j ∣ x ) \begin{equation} R(x_{i}|x)\sum_{j1}^{N}\lambda_{ij}P(c_{j}…

【C++】vector详解,模拟实现

目录 1. vector的介绍 2. vector的使用 2.1 构造函数 2.2 遍历方式 2.3 reserve与resize 2.4 shrink_to_fit 2.5 insert,erase,find 3. vector模拟实现 3.1 初始结构 3.2 析构函数 3.3 获取容量和元素个数 3.4 扩容reserve 3.5 resize改变…

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介: 最新简洁大方的自动发卡网站源码,它就是鲸发卡v11.61系统源码,它是修复版。 说到鲸发卡系统,鲸发卡系统在发卡圈很多人都知道的,它是市面最好发卡系统之一,操作起来简单得很,界面也…

【数据结构】排序算法---快速排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 递归版本代码实现5.1 hoare版本5.2 挖坑法5.3 lomuto前后指针 6. 优化7. 非递归版本代码实现结语 1. 定义 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 O ( n l o g n ) Ο(nlogn) …

在 Windows 上恢复已删除的 PDF 文件的最佳方法

如果您不小心删除了 PDF 文件或由于系统突然崩溃而无法再找到它们,本指南介绍了恢复已删除文件的最佳方法。 帖子中列出的方法简单、有效且可行。我们在列出它们之前对其进行了测试。 什么是 PDF,Adobe 将未保存的 PDF 存储在哪里? 自从 Ad…

数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)

目录 一、安装所需的python包二、采用K-NN算法进行缺失值填充2.1可直接运行代码2.2以某个缺失值数据进行实战2.2.1代码运行过程截屏:2.2.2填充后的数据截屏: 三、K 近邻算法 (K-Nearest Neighbors, KNN) 介绍3.1 K 近邻算法定义3.2 K 近邻算法的基本思想…

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件(目录)复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…

六、二分搜索-算法总结

文章目录 六、二分搜索6.1 简介6.2 典型实例 -- 二分查找6.2 模板6.3 常见题目6.3.1 搜索插入位置6.3.2 搜索二维矩阵6.3.3 寻找旋转排序中数组中的最小值6.3.4 寻找旋转排序数组中的最小值 II6.3.5 搜索旋转排序数组6.3.6 搜索旋转排序数组 II 总结 六、二分搜索 6.1 简介 给…

Java或者前端 实现中文排序(调API的Demo)

目录 前言1. 前端2. Java 前言 前端 Vue 中的中文排序通常使用 JavaScript 提供的 localeCompare 方法来比较中文字符串 Java 后端可以使用 Collator 类来实现中文排序 1. 前端 在 Vue 中&#xff0c;使用 localeCompare 来实现中文字符串的排序&#xff1a; <template&…

Skyeye 云智能制造 v3.14.5 发布,ERP 商城

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

SAM 2: Segment Anything in Images and Videos

SAM2: 在图像和视频中分割任何内容 作者 Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu 等 (Meta FAIR) 论文&#xff1a;SAM2: Segment Anything in Images and Videos项目代码&#xff1a;GitHub Repository互动演示&#xff1a;Demo 摘要 SAM2 是一个用于处…

基于51单片机的锅炉温度控制系统PID调节proteus仿真

地址&#xff1a; https://pan.baidu.com/s/17oMgAnUBUKKEVnv5hNRQmQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

招聘数据分析师,HR会考察候选人哪些方面?

数据分析是必须具备深厚的专业技能底蕴&#xff0c;这是最基本的要求&#xff0c;其中包括对数据分析工具和编程语言的精通&#xff0c;以及对数据库管理的实验操作。 在数据分析师的招聘过程中&#xff0c;必须要注重对方掌握的知识&#xff0c;比如数据挖掘数据可视化等先进…

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的&#xff0c;因为压根就不是一个规则。但是他们在内存中…

详解:Tensorflow、Pytorch、Keras(搭建自己的深度学习网络)

这是一个专门对Tensorflow、Pytorch、Keras三个主流DL框架的一个详解和对比分析 一、何为深度学习框架&#xff1f; 你可以理解为一个工具帮你构建一个深度学习网络&#xff0c;调用里面的各种方法就能自行构建任意层&#xff0c;diy你想要的DNN&#xff0c;而且任意指定学习…

揭秘!当业务方需求模糊,产品经理如何施展‘化雾为金’的神奇策略!

引言 在产品管理的实践中&#xff0c;产品经理经常会遇到业务方无法清晰表达需求的情况。这可能是由于业务方对问题的理解不够深入&#xff0c;或者缺乏将业务需求转化为产品需求的经验。作为资深产品经理&#xff0c;我们需要采取一系列策略来应对这一挑战&#xff0c;确保产…

Solid Converter PDF9.1安装教程

软件介绍 Solid Converter PDF是一套专门将PDF文件转换成word的软件&#xff0c;除了转换成word文件外&#xff0c;还可以转换成RTF以及Word XML文件。除此之外&#xff0c;它还有一个图片撷取功能&#xff0c;可以让我们]将PDF档里的图片撷取出来&#xff0c;以及将PDF档里的…

word文档的读入(8)

如何读取答题卡中的选择题答案&#xff0c;并把所有的信息导入到Excel表格中&#xff5e; 在初始化了字典中的字段并获取了标准答案和学生答案后&#xff0c;现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分&#xff0c;答案正确时&…

C++11 右值引用完美转发

前言 上一期介绍了C11的基础新特性&#xff0c;这一期开始我们继续来介绍C11的新特性&#xff01; 目录 前言 一、右值引用和移动语义 1.1左值和左值引用 1.2右值和右值引用 1.3左值引用vs右值引用 1.4右值引用的使用场景和意义 左值引用的使用场景 左值引用的缺陷 …

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年&#xff0c;是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块&#xff0c;业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…