近年来,消费、医疗、农业、工业以及其他范畴对物联网(IoT)衔接的需求不断增加,产品开发咨询公司42 Technology表明,制造商期望为最终用户带来异乎寻常的产品,因而想运用物联网衔接来增加功用,或为依据服务的产品生成新的数据流。
IoT衔接中的硬件包含电池供电的便携式小型设备,其间许多都选用Arm Cortex-M系列嵌入式处理器,例如Nordic Semiconductor的nRF9160 SiP中心选用了M33处理器。
到目前为止,开发人员仅能够运用C++或C++言语对这类Cortex-M器材进行编程。现在42 Technology提出了第三种挑选,即Rust编程言语,为开发人员带来许多有用的新功用。
充分运用资源
Rust编程言语有必要在高功能和能有用运用资源的渠道和环境下运用,它还引入了一些功用来协助开发人员进步功率并生成更安全的代码。例如,Rust供给了称为Cargo的软件包管理器,就像Python的pip或Node的npm相同,能够让开发人员从中心存储库中提取开源软件包,在其项目中轻松运用。
Rust的另一项共同功用是“借阅查看器”,它是编译器的一部分。在编译期间,该东西能够查看代码,以保证两段代码不会一起拜访同一数据(这是未定义的行为)。换句话说,假如一个函数被调用了,开发人员需求指定这次调用是暂时(专有的或作为同享借入)“借入”该数值,或取得该数值的一切权。
这款言语具有安全性、高速度和高生产力。依据42 Technology报导,微软、Dropbox、Facebook、谷歌、Cloudflare等公司都已成功将Rust言语应用于新项目,包含用于云根底架构,谷歌还将其用于下一代移动操作体系Fuchsia中。
在Rust嵌入式作业组的大力推进下,Rust现已发展到“1.0”版别,可支撑许多嵌入式渠道,越来越多的企业也运用相同的技术优势来支撑小尺度低功耗体系,例如Nordic的nRF52和nRF53系列短距无线SoC,以及nRF9160低功耗蜂窝物联网SiP。
Rust的套接字
nRF9160开发人员能够直接或通过Zephyr运用Nordic Socket API,这个API严厉遵从规范Berkeley套接字API(有如在Linux和Windows中运用)。但它也有一些缺陷,例如套接字和套接字宗族都运用“int”类型,假如开发人员将它们混杂,编译器将不能作业。别的,开发人员有必要记住在套接字中调用“nrf_close”,因为假如变量超出范围,套接字将呈现走漏,然后在运转时难以调试。
为了使Rust开发人员能够很好地运用这一功用强大且通过杰出测验的程序库,一起协助他们防止意想不到的过错,42 Technology针对Nordic套接字库开发了Rust包装器。Rust包装器运用高等级而且分类谨慎的方针,例如“TcpSocket”和“AtSocket”,它们在超出范围时会主动封闭,并答应开发人员发送格式化数据(图1)。
图1:针对Nordic套接字库树立的Rust包装器运用分类谨慎的方针,例如“TcpSocket”和“AtSocket”,当它们超出范围时会主动封闭,并答应开发人员发送格式化数据。
这种办法十分有用,42 Technology表明能够运用Cloudflare的新Rust言语QUIC库进行开发,直接在nRF9160上运转世界上首个QUIC(行将发布的HTTP/3规范的一部分)示例。
Rust + Zephyr
Rust的另一个长处是能够与Zephyr RTOS混合运用。Rust库能够编译为规范的C静态库,然后与一切开发人员现有的C和C++项目相关。某些项目乃至只需一次替换一个函数,就能够从C言语转换为Rust言语。例如,运用SVG库,其间的库具有相同的API但在内部运转得更快、更安全。
Rust编程言语旨在进步功能、安全性和开发人员生产力,合适不同规划的项目——从超大规划云根底设施到最小的Cortex-M微控制器。此外,因为它能够编译为规范方针码文件,因而开发人员能够充分运用其一切长处,一起依然将其集成到现有的C和C++项目中。
责任编辑:pj