物联网已成为我们日常生活中不可或缺的一部分,设备也越来越智能。随着该领域的扩展,迫切需要保证这些支持软件的设备的安全性、生产力和效率。因此,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 应用需要一种高效、安全和轻量级的解决方案。