Rust学习总结

初衷

一晃眼进入2020年,也是我毕业6年的时候了。大学毕业后一直从事Java后台开发工作,一路上磕磕绊绊,始终没有找到比较理想的工作,究其原因可能还比较多,但最根本的还是对Java以及计算机底层技术原理掌握不够。痛定思痛,我决定学习一门较为接近系统底层的编程语言,通过学习了解计算机更为底层的东西,再通过比较Java,了解不同编程语言在解决同一个问题时的异同。很快我找到了一个非常适合的编程语言——Rust。Rust编程语言在安全性、可靠性、高性能、生产力方面都表现得极为优异,难怪在 Stack Overflow的调查中Rust连续多年成为“最受欢迎编程语言”

学习经历

从一开始决定学习Rust,就注定了走上了一条曲折的道路。Rust陡峭的学习曲线着实让人心生畏惧,加上国内Rust的社区生态圈才刚刚起步,学习资料匮乏、开发工具不完善等问题不断涌现。也许这恰恰是一个好事,相比于Java海量的书籍、框架让人迷茫,Rust资料虽少,官方提供的书籍《The Rust Programming Language》《Rust By Example》等却值得反复研读。我也确定了学习rust的一个重要原则就是少而精。在通读Rust官方提供的两本书后,我又通过刷力扣题的方式,弥补自己在算法方面的不足,以及加深对rust核心的概念和语法的掌握。后面通过学习Rust异步运行时框架Tokio,学习Rust的异步编程。最近又在学习Web­Assembly方面的知识。

写 Rust 函数,免费树莓派

一次偶然的机会,我在Rust语言中文社区(https://rustcc.cn/),看到一个帖子“写 Rust 函数,免费树莓派”
在了解活动的规则,查看项目的一些文档后,感觉虽然有点难度,但有一个月的时间还是能够实现的。
说干就干,先把官方例子先跑起来。由于阿里云服务器上的操作系统是CentOS7,与官方推荐的Ubuntu 20.04差异很大,所以优先使用Docker方式安装官方的镜像(secondstate/ssvm-nodejs-starter:v1 有1.96GB)。
尝试下载了很多次,才最终将镜像完整的下载到本地,内心真是要奔溃的。但更困难的是使用“ssvmup build”命令将Rust源代码编译为WebAssembly 字节码,并为 Node.js 主机环境生成随附的 JavaScript 模块。
几乎每次在等待了十几二十分钟后,都会报“Couldn’t connect to server”,一连好几个晚上都寸步难行。在快要放弃的时候,发现居然成功运行完成,没有任何报错。我再次拾起信心继续干,最终成功的运行了官方
的“hello Wasm”。

自己动手写Rust函数——敏感词替代(DFA算法)

在这里插入图片描述

接下来就是写一个自己的Rust函数了,经过一番考虑,我决定将之前自己用Rust实现的敏感词汇过滤(DFA算法)的函数移植过来——实现输入一个句子,输出使用星号“*”替代敏感词后的句子,例如如果“Fuck”是敏感词,
输入的语句是“Fuck you”,则返回的句子是“**** you”。接下来就是不断的编码、编译、调试程序,遇到不少问题(如中文乱码问题),但有一个问题始终无法解决——编译后的代码无法读取文件(敏感词汇存储在一个名为sensitive-words.txt的文件中)。
最终不得不将敏感词,写死在代码中(一个BTreeSet集合中)。最后测试效果和原生的Rust函数结果一致,至此耗费一个多星期终于实现了将Rust函数编译成wasm字节码,并在Node.js环境下成功运行。

最终代码:github

参考:
Java实现敏感词过滤代码

总结

Rust是一门年轻的且充满潜力的编程语言。

  • Rust语言同时兼顾了安全性和高性能,因而是一门非常出色的系统编程语言,能够编写操作系统、数据库、区块链应用等对安全、性能都要求极为严苛的系统级软件。
  • Rust语言同时是一门优秀的生产力语言,出色的文档、完善且高效的工具链(cargo,rustup),能够快速进行各个层次(小的嵌入式、大到操作系统,从底层系统开发到网络应用开发,均能胜任)的应用的开发。
  • Rust社区的快速发展,创新的火花不断迸发出来,逐渐照亮了一个光明的前景。

猜你喜欢

转载自blog.csdn.net/smallswan/article/details/107903034