使用Rust进行嵌入式编程
Use Rust for embedded development
篇首语:
Rust的高性能、可靠性和生产力使其适合于嵌入式系统。
在过去的几年里,Rust在程序员中获得了热情的追随。技术趋势来来往往,因此很难区分新事物带来的兴奋与技术优势带来的兴奋,但RT-Thread社区开发人员Liu Kang
认为Rust是一种真正设计良好的语言。Kang说,Rust旨在帮助开发人员构建可靠、高效的软件,它从一开始就是为了这个目的而设计的。在本文中,Kang演示了Rust的许多关键特性,这些特性正是Rust适合嵌入式系统的原因。
Rust & 嵌入式
Rust有如下特性使其特别适合嵌入式开发:
- 高性能:快速和高度优化的内存模型;
- 可靠性:内存错误可在编译期间被发现和排除;
- 生产力:优秀的文档、带有有用错误提示的友好编译器和一流的工具。有一个集成的包管理器和构建工具,支持自动补全和类型检查的智能多编辑器,一个自动格式化程序,等等。
为什么使用Rust进行嵌入式编程
Rust被设计成保证内存安全和高性能,而嵌入式程序常常遇到的是内存问题,使用Rust可以保证编写的程序只要通过编译器检查即是内存安全的,以下是使用Rust进行嵌入式设备开发能获得的好处:
- 强大的静态代码分析;
- 灵活的内存模型;
- 无畏并发;
- 互操作性;
- 可移植性;
- 社区驱动;
如何在C代码中调用Rust
在这里,作者以如何在RT-Thread项目中调用Rust静态链接库的代码为例:
第一步,使用Rust工具创建和编写静态链接库类型的项目;
第二步,交叉编译,生成静态链接库;
第三步,生成C代码的头文件(使用cbindgen);
第四步,调用Rust生成的库文件(使用SCons编译工具来集成代码)。
如何在Rust中调用C代码
这里指的是如何在Rust中调用C代码,然后Rust代码再被C代码调用,由于最终还是C代码调用Rust代码,因此关注点还是把Rust代码编译为静态链接库,然后供C代码调用。
最后
在嵌入式开发中使用Rust可以享受Rust的所有特性带来的优势,而无需牺牲灵活性或稳定性。有关嵌入式Rust编程(以及RT-Thread本身)的更多信息,请查看RT-Thread项目的YouTube频道。
记住,嵌入式也可以是开放的。
关于RT-Thread项目
一种新的面向嵌入式系统的开源操作系统
项目地址:https://www.rt-thread.org/
Horcrux:在Rust中实现Shamir密钥共享(第1部分)
Horcrux: Implementing Shamir's Secret Sharing in Rust (part 1)
就像我在之前一篇博客中提到过的那样,归因于内存安全、强类型、简单易用的单元测试和高性能等特性,我认为Rust是一门极好的用来实现加密算法的编程语言。
Horcruxs是一个用来展示如何用Rust来实现Shamir共享密钥算法的程序例子,目前它还不能被用于生产中。
从这篇博客开始,作者将从基本的数学原理开始讲起,并带领读者学习如何用Rust来实现Shamir共享密钥算法(关于Rust实现部分的讲解需要等到下一篇博客,有兴趣的读者可以关注作者的动态)。
项目地址:https://github.com/gendx/horcrux
【Reddit讨论帖】你觉得Rust目前还缺乏哪些成熟的开源库?
What sort of mature, open-source libraries do you feel Rust should have but currently lacks?
总结一下帖子下提到的呼声比较高的库:
- 类似Cuda的GPU/GPGPU库;
- 图片处理相关的库,支持WebP、XBM、XPM等格式;支持类似python中Pillow库功能的图片处理库;
- 图像处理库;
- 纯Rust实现的解压缩算法库,支持LZMA、BZip2等格式及其衍生格式;
- 文档处理库,支持PDF、ODF、OOXML、EPUB、MOBI等格式的解析和提取操作;
- 检验和相关的库;
- Qt相关的生成和绑定库;
- 完全支持XML格式文档的读写操作的库;
- LLVM高级绑定的库;
- 机器学习相关的库;
更多想法和细节欢迎围观该讨论帖。
From 日报小组 odd-cat
社区学习交流平台订阅:
- Rust.cc 论坛: 支持 rss
- 微信公众号: Rust 语言中文社区