为什么物联网领域使用Rust的项目越来越多?

2023-05-16

不看这几篇好文,就别说自己了解物联网

 

1. 概述        

     

        Rust是由Mozilla员工Graydon Hoare于2006年作为个人项目而创造,Mozilla于2009年开始赞助该项目。2012年,第一个Rust编译器发布,2015年第一个Rust1.0稳定版本发布,目前,Rust已加发展到1.51版本。

       2021年2月8日,Rust基金会成立,Rust商标及所有权移交给基金会。基金会创始白金成员包括亚马逊、微软、谷歌、华为和Mozilla,白金会员Facebook。

截止到2021年5月,Rust在TOIBE编程语言排行榜上排名24%,占比0.66%。

 

2. Rust功能

2.1. 语言主要特性

  • 类型推导

Rust支持表达式类型推断,可根据代码自动推动表达式类型。

举例:

let a = 1;  //a是i32类型
let x = 9.0;  //x是f64类型

 

  • 零成本抽象

Rust中增加抽象定义,不会影响运行性能。

 

  • 模式匹配

通过match关键字,可以很方便的对变量的值、范围、部分内容等进行匹配操作,支持匹配数字、字符串、函数调用等,支持逻辑与或匹配。匹配的作用可以简单理解为C语言的Switch语法功能的增强。

举例:

    let a = 3;
    match a {
        1 => println!("a is 1"),
        2...5 => println!(" 2<=a<=5"),
        6 | 8 => println!(" a=6 or a=8"),
        _ => println!("其它")
    }

  • 所有权

内存所有权是Rust内存安全的核心基础。内存在一个时刻,所有权只能属于一个变量,超出作用域后,会被自动释放。所有权支持转移和借用。该机制可以有效解决空指针、野指针、内存泄漏、内存重复释放等内存问题。

举例:

    let a = vec![1, 2, 3,4, 5];
    ...
    let b = a;  //所有权转移到b,通过a无法再访问

 

  • 错误处理

Rust支持统一并简洁的错误处理方式。错误码统一,且支持同时返回值及错误码。

Rust将错误区分未可恢复错误及不可恢复错误,支持可恢复错误传递。

举例:

use std::fs::File;

fn main() {
    let f = File::open("hello.txt");

    let f = match f {
        Ok(file) => file,   // 成功处理
        Err(error) => println!("Problem opening the file: {:?}", error),  //错误处理
    };
    panic!("run here panic!"); // 不可恢错误
}

  • 切片(Slice)

切片是指对数据的部分引用,比如数组、字符串等。与python等语言的切片功能类似。

举例:

    let s = String::from("hello world");

    let hello = &s[0..5];
    let world = &s[6..11];

 

  • 泛型

类似于C++中的模板(Templete),可用于实现对通用类型的操作,有效提到代码抽象度,减少代码量。

举例:

fn max<T>(array: &[T]) -> T {
    let mut mi = 0;
    let mut i = 1;
    while i < array.len() {
        if array[i] > array[mi] {
            mi = i;
        }
        i += 1;
    }
    array[mi]
}


fn main() {
    let a = [1, 3, 9, 7];
    println!("max = {}", max(&a));
    let b = [2.0, 4.1, 10.2, 8.3];
    println!("max = {}", max(&b));
}

 

  • 特征(Trait)

Trait是对接口的抽象,可以指定接口的规则、默认接口实现,可以被继承、重载,可以与泛型结合使用,可以作为参数传递,也可以作为函数返回值。

举例:

pub struct NewsArticle {
    pub headline: String,
    pub location: String,
    pub author: String,
    pub content: String,

}


impl Summary for NewsArticle {
    fn summarize(&self) -> String {
        format!("{}, by {} ({})", self.headline, self.author, self.location)
    }
}

 

  • 运算符重载

与C++的运算符重载功能类似。Rust通过Trait实现运算符重载功能。

Rust只支持有限形式的运算符重载。

 

  • 闭包(Closure)

Rust的闭包与Java、Go、Python、Swift等语言中闭包概念类似,类似于这些语言中的Lambda表达式或者匿名函数。闭包通常不需要定义类型,支持对入参及返回值类型的推导。闭包支持绑定到变量中使用。闭包中支持使用外部变量。

举例:

let fv = n*4 + 1;

fv(10);

 

  • 迭代(iterator)

用于对变量集合的循环遍历,与其它语言中的迭代器概念类似。

上面仅描述了rust语言的部分主要特性,完整介绍参见 https://doc.rust-lang.org/book/

 

2.2 Rust程序组成形式

一个Rust程序可以由Module、Carte、Package组成。Module是代码逻辑层面的封装,可以将实现一个功能的所有代码放在一个Module中,比如网络Module、文件系统Module等。Carte是二进制可执行程序或者库,是rust中的基本编译单元。Package将多个carte打包在一起。

 

2.3 编译构建

Rust使用rustc编译代码,编译过程中会自动进行类型检查

rustc编译依赖LLVM(Windows环境依赖MSVC),在嵌入式环境,还依赖于嵌入式交叉编译工具链。

 

2.4 Cargo

Rust使用Cargo进行系统构建、代码检查及包(crate)管理,同时也可以从crate.io上下载或者更新crate到本地。

 

3. Rust优势与劣势

Rust是一门赋予每个人构建可靠且高效软件能力的语言[1]。他的优势和劣势非常明显。

 

3.1 Rust优势

Rust具备系统级语言的高性能,同时也具备一些现代动态语言的功能。

 

3.1.1 高性能

Rust语言具备C/C++等语言的高性能。

Rust运行速度快,内存利用率高,占用资源少,没有垃圾回收及运行时,可以内嵌汇编,可以与其它语言混合编程,可以像C/C一样作为系统级语言,用于操作系统、硬件驱动、嵌入式设备等的开发。

 

3.1.2 安全可靠

Rust相比C/C++更安全可靠。

Rust通过所有权机制保证内存安全。

Rust具备丰富类型的强类型系统,编译时编译器可以做更多的类型检查,将错误在编译阶段提前暴露出来,而不是等到运行时。

Rust通过unsafe关键词将不安全的代码与安全代码隔离开。

 

3.1.3 支持现代高级语言特性

Rust支持泛型、闭包、迭代、切片、函数式编程、错误处理等特性。

 

3.2 Rust劣势

3.2.1 语言复杂

Rust的语法相对比较复杂,强类型、内存所有权、unsafe机制等对于初学者上手比较困难。

 

3.2.2 库较少

Rust目前官方及第三方库较少,相关开源代码较少,很多库需要借用c语言库,或者自己重新写,对于构建复杂系统难度较高。

 

3.2.3 不够稳定

Rust语言时间较短,一直处于快速发展中。

 

4. Rust在物联网上的应用与发展

Rust性能高,占用资源少,可移植性好,支持嵌入式开发,且可集成到现有的C代码中,因此在物联网设备上,也可以使用Rust来开发。目前已加有一些公司在使用Rust实现RTOS系统、bootloader、传感器驱动、网络协议栈等。

 

4.1 硬件

Rust支持的嵌入式硬件设备范围从8bit单片机到64位4核Cortex-A53的树莓派。

Rust支持对外设、中断、异常、IO、内存、寄存器的操作,并提供了对应的库(Crat)。

详细文档见:

https://doc.rust-lang.org/stable/embedded-book/start/index.html

Rust目前已支持ARM、RISC-V,MIPS。目前已有几十款MCU,上百种硬件驱动支持rust,详见:

https://github.com/rust-embedded/awesome-embedded-rust

 

4.2 嵌入式运行环境

1)hosted环境

在这种环境下运行时,设备上已经运行了一个操作系统,并且提供了POSIX、文件系统、网络、内存管理、线程管理等系统接口。Rust的标准库会依赖这些接口已支撑rust程序的运行,与在PC机上运行类似。

2)bare metal环境

这种环境,设备本身没有操作系统,由rust程序直接在裸机上运行。此时需要使用no_std库。同时通过libcore获得与硬件平台无关的代码,并去掉嵌入式环境中不常用的功能,比如去掉动态内存分配器等。

使用该模式,可以编译启动代码、内核等。

 

4.3 支持rust的嵌入式/物联网项目

详见 https://github.com/rust-embedded/awesome-embedded-rust

 

4.3.1 RTOS

  • Drone OS

支持Rust实时应用的嵌入式操作系统。

  • FreeRTOS.rs

基于FreeRTOS的rust适配层

  • FreeRTOS-rust

基于FreeRTOS.rs,增加了rust的改造,比如main的入口使用rust实现,FreeRTOS调度从rust启动等。

  • Tock

支持在MCU上多应用并发运行的嵌入式操作系统,内核及驱动使用Rust编写。

 

4.3.2 协议栈

  • runmqtt

使用rust实现的mqtt协议

  • rubble

使用rust实现的蓝牙ble协议栈

 

4.3.3 其它

  • internet-of-streams

使用rust创建的iot无线传感器平台。

  • rust-raspberrypi-OS-tutorials

基于rust和树莓派硬件的嵌入式操作系统开发指导

  • boa

使用rust实现的嵌入式JS引擎。

  • rust_sqlite

使用rust实现的sqlite。

  • OpenSK

谷歌开发的基于Tock OS的FIDO2蓝牙认证应用,目前支持Nordick nrf52840芯片。

 

参考

[1]: 参考 https://www.rust-lang.org/zh-CN

 

更多精品好文

 

物联网中也能使用区块链技术?面向IoT的区块链基础架构IoTeX

开源硬件的前世今生

物联网碎片化的一些思考

边缘计算在物联网行业的应用

物联网太难 ? 不妨试试用Python来开发

5G会给物联网行业带来哪些变化?

必须要了解的物联网安全知识

ARMv9能给ARM带来新一轮腾飞吗?(安全篇)

ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)

国产物联网操作系统的出路在哪里?

RISC-V架构能否引领物联网时代?

物联网到底为什么这么火?

谁才是物联网连接技术中的王者?

物联网平台大量出现能否将行业带入爆发式发展

脚本语言适合物联网开发吗

从“嵌入式”到“物联网”的四大转变

物联网发展新趋势

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么物联网领域使用Rust的项目越来越多? 的相关文章

随机推荐

  • AliOS Things 3.3.0:HaaS EDU K1快速开始

    具体操作分为三步 xff1a 搭建开发环境创建工程开发及调试 1 搭建开发环境 Visual Studio Code Visual Studio Code 下称VS Code 是一款广泛使用的IDE工具 AliOS Things 3 3的开
  • 物联网发展新趋势

    一 背景和现状 物联网已经经历超过十年的发展时期 xff0c 尤其是最近几年 xff0c 物联网各个领域需求旺盛 xff0c 各式应用场景愈加丰富 xff0c 技术和应用创新层出不穷 xff0c 发展速度越来越快 根据GSMA发布的 The
  • 从“嵌入式”到“物联网”的四大转变

    经过几十年发展 xff0c 嵌入式技术已经用在了我们生活中的方方面面 xff0c 但是嵌入式始终都带有小众 xff0c 专业性强的属性 xff0c 让很多非嵌入式领域的同学望而却步 近十几年的发展 xff0c 物联网快速崛起覆盖了越来越多领
  • 脚本语言适合物联网开发吗

    序言 物联网在今天已经不是一个新词汇 xff0c 尤其是 物 这么接地气的东西 xff0c 在互联网深入到各行各业时 xff0c 自然而然会结合在一起 xff0c 形成物联网 这个 物 xff0c 就是千奇百怪 多种多样的嵌入式硬件 边缘硬
  • 物联网平台大量出现能否将行业带入爆发式发展

    最近今年物联网产业发展迅速 xff0c 作为物联网产业链关键环节 xff0c 物联网平台具有重要作用 中国物联网平台提供商大致有运营商 云计算厂商 互联网巨头 初创公司等 xff0c 比如阿里云 xff0c 华为 xff0c 腾讯 xff0
  • 谁才是物联网连接技术中的王者?

    1 简介 本文介绍了物联网连接技术的现状 xff0c 分析各个细分领域的佼佼者或者王者 2 背景 近些年物联网市场保持持续增长 xff0c 根据IOT ANALYTICS的数据 xff0c 2020年物联网的连接设备超过了120亿个 xff
  • 物联网到底为什么这么火?

    物联网概念自上世纪90年代提出至今已有近30年的历史 xff0c 与互联网 移动互联网的对比来看 xff0c 物联网的发展并不快 xff0c 整个物联网行业一直未能像互联网 移动互联网一样快速的规模化 xff0c 这背后的原因或者制约物联网
  • 国产物联网操作系统的出路在哪里?

    不看这几篇好文 xff0c 就别说自己了解物联网 一 背景和现状 物联网操作系统作为操作系统的一个分支领域已经有了数十年的历史 xff0c 作为应用领域最为宽广 设备数量最为巨大的应用领域 xff0c 物联网操作系统并没有发展出如个人桌面应
  • RISC-V架构能否引领物联网时代?

    不看这几篇好文 xff0c 就别说自己了解物联网 1 RISC V架构异军突起 CPU 是计算机系统 xff08 包含PC 手机与各种智能设备等 xff09 的核心 xff0c 而处理器架构是 CPU 的基石 纵观CPU架构发展历史 xff
  • 不看这几篇好文,就别说自己了解物联网

    物联网技术分享月 精品好文 2021 05 25 Python轻应用有哪些过人之处 xff1f 2021 05 25 物联网场景下为什么可以选择JS语言 2021 05 24 如何从零设计一种物联网组网协议 2021 05 24 带你了解热
  • 创新不是靠痛点,而是靠对效率的持续追求

    什么都等到痛了才去做 xff0c 要你何用 在互联网行业做产品 xff0c 亦或是创业给投资人讲故事 xff0c 一个很核心的点就是要问自己或者告诉对方 xff0c 我的产品击中了什么痛点 xff1f 似乎一切都是靠痛点驱动的 但我认为这是
  • ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)

    开篇 图1 ARMv9发布 1 自从2011年10月ARM发布ARMv8以来 xff0c 一晃已经过去了近10年 在此期间 xff0c ARM的芯片出货量从11年的79亿片 2 涨到18年的229亿片 3 xff0c 收入从11年的约7 8
  • ARMv9能给ARM带来新一轮腾飞吗?(安全篇)

    接上文 在上一篇文章中 xff0c 讲了下ARM在ARMv9中人工智能领域的相关技术SVE2 xff0c 以及其他人工智能相关的布局 对于ARMv9是否能给ARM带来腾飞 xff0c 仅根据SVE2 xff0c 我认为是不够的 ARMv9另
  • 5G会给物联网行业带来哪些变化?

    不看这几篇好文 xff0c 就别说自己了解物联网 2019 年是5G的商用元年 xff0c 作为街头巷议的热点技术 xff0c 5G到底是什么 xff1f 5G当前的进展怎么样 xff1f 5G的应用场景有哪些 xff1f 5G技术的普及又
  • 必须要了解的物联网安全知识

    不看这几篇好文 xff0c 就别说自己了解物联网 物联网安全概述 物联网的本质 xff0c 是从端到云的数据交互及计算过程 根据这个特点 xff0c 可以将物联网划分为3个层次 xff1a 云 网络和设备 xff0c 也就形成了物联网的攻击
  • 物联网太难 ? 不妨试试用Python来开发

    不看这几篇好文 xff0c 就别说自己了解物联网 开篇 Python 作为一门快速发展的解释性编程语言 xff0c 数以百万计的开发者已经将Python应用在人工智能 游戏开发 数据挖掘 信息安全 系统运维等行业并取得了成功 现如今 xff
  • 边缘计算在物联网行业的应用

    不看这几篇好文 xff0c 就别说自己了解物联网 引言 边缘计算并不是诞生于物联网时代 xff0c AKAMAI作为一家内容分发网络CDN和云服务的提供商 xff0c 并且是世界上最大的分布式计算服务商之一 xff0c 早在2003年就和I
  • 物联网碎片化的一些思考

    不看这几篇好文 xff0c 就别说自己了解物联网 提到物联网遇到的挑战 xff0c 都会谈到物联网碎片化 造成物联网碎片化的原因主要包括以下两个 xff1a 从 物 的大小角度 xff1a 有的 物 很大 xff0c 如一些边缘网关智能设备
  • 开源硬件的前世今生

    不看这几篇好文 xff0c 就别说自己了解物联网 1 序言 在互联网爆发式增长了几十年的今天 xff0c 越来越多的末端硬件设备已经具备连接网络的能力 xff0c 业态也越来越丰富 xff0c 这就是今天所说的物联网 作为一个08年就开始玩
  • 为什么物联网领域使用Rust的项目越来越多?

    不看这几篇好文 xff0c 就别说自己了解物联网 1 概述 Rust是由 Mozilla 员工Graydon Hoare于2006年作为个人项目而创造 xff0c Mozilla于2009年开始赞助该项目 2012年 xff0c 第一个Ru