前几天也就是我们的国庆节期间,大概 10 月 4 号的样子,消息称对 Rust 的基础支持 PR 已经合入 Linux Kernel 6.1 。在我看来这是 Rust 发展历程的又一个里程碑事件。当然系统内核开发离我很远,作为一个练习时长两年半的半吊子 Rustacean 我只是非常高兴这门开发语言受到越来越广泛的认可,这意味着我的业余兴趣在可预见的短期内不会变成沉没成本(笑)。
所以在 QQ 群里我抛了个很平凡的问题,那就是希望大家可以分享 Rust 相关的教程。以及这也是这个帖子的目的,我会在下面整理出群聊讨论所涉及到的一些资料,以及向从来没听过 Rust 或者对它感兴趣的同学肤浅地介绍一下这门语言(仅凭记忆)。当然我的本职工作是前端开发,业余时间用 Rust 做一些小工具而已,并不专业,权当抛砖引玉,我更感兴趣大家如何学习 Rust 以及如何用 Rust 做什么,欢迎回帖评论留言。
Rust 是什么
Rust 和 Go 一样,是近些年新兴和逐渐流行的编程语言,但它的定位又不太一样,目前公认是更偏向于系统开发,所以你会发现虽然也有像 actix 等的 Web 开发框架,但在 CRUD 的 HTTP 业务里面很少 Rust 的实践。它由 Mozilla 于 2012 年发布第一个版本,并用于开发 Firefox 的新一代实验性渲染引擎 Servo 。最初目的就是重写和替代部分 C++ 代码,以相对更好的安全性、并发性著称(至于部分说法中更好的性能就见仁见智,真要性能还得是 C 内嵌机器码或者是纯汇编,逃)。随着时间的推移,越来越多开发者参与贡献,越来越多的开源和商业项目落地,并独立于 Mozilla 成立了基金会,它也就拥有了自己的生命力。
最新的 TIOBE 排行中, Rust 名列 26 名。它一度冲击过前 20 的位置但目前还没稳住。虽然远不及 12 名的 Go ,但你会意外地发现像 Dart / Scala / Kotlin 等近些年的明星语言也紧随 Rust 身后。受样本影响这类排行可能有不准确的地方(比如我认为 Kotlin 已经在安卓开发中相对较大范围使用),仅供参考。
相关推荐:
怎样看待 Mozilla 发布的 Rust 语言? - laiyonghao的回答 - 知乎
Rust 能用来干什么
就我个人而言,我也是主要用来替代 C++ 的。不算中学课外阶段,大学期间划水了 2 年半以上大概 3 年左右的 xCPC 程序设计竞赛,主力语言就是 C/C++ ,我的很多系统性的学习(比如 TCP 网络协议 / 操作系统原理 / Nginx 源码)都是使用 C/C++ 上手,或者就是教材资料用的是类 C 的伪代码;我在 LeetCode 上刷的题,我的很多个人整活项目(比如解析 pac 的代理服务,上家公司用 pac 规则做内网跳板机寻址和外网代理, macOS 对 pac 规则的支持挺烂,不是真全局),也都是用 C/C++ 来完成。它不好找工作(我太菜),但不妨碍我继续用我曾经最喜爱的语言继续整活。
但随着 C++ 的发展,它的历史包袱越来越重,充满了各种出于向下兼容考量的妥协,同时各种奇怪的语法用法层出不穷,它很难学好,也很难用好,更重要是我的精力跟不上对新标准的学习了。这时候有一门更现代化的编程语言横空出世,如果我晚出生几年,如果现在让我重回大学二选一,我当然会选 Rust 了哈哈哈哈。
另外你也可以看到很多开源或商业项目也在用 Rust [2],它们用 Rust 做什么呢?
数据库:国内最著名的当然是 PingCAP 的 TiKV [1],部分大企业同学应该熟悉,其内部有在用 TiDB 的;知名度小一点的还有 TensorBase / CeresDB / RisingWave 等等;
云原生:微软的 Krustlet ,华为的 StratoVirt 等,不在这行我也不熟;
系统开发:除了上面提到 Linux Kernel 中的 Rust 基础支持,更为人熟知的是 coreutils 提供了 gnu utils 的 Rust 版本,例如 mkdir / rmdir 等工具都有提供;还有 ripgrep 则是 Rust 版 grep (这两个应该站内早期同学有听说过,好像在 Missing Semester 的工具篇讨论中有扩展到,另一个比较强的搜索工具是 The Silver Searcher 但它是 C 实现的);
命令行终端:说实话没有 iTerm2 好用的 Alacritty ;
RPC 框架: 顺带给敝司的 CloudWeGo 团队推个广[3], Volo 的前身内部版在字节内也有一定程度的落地和整活;
还有更多有趣的项目,一时间我也想不起来,欢迎大家补充。
相关参考:
[1] 黄东旭.我们为什么要选择小众语言 Rust 来实现 TiKV?[EB/OL].[2017-09-21]. https://www.infoq.cn/article/2017/09/select-minority-language-rust-ti
[2] 张汉东.2021 年 Rust 行业调研报告[EB/OL].[2021-06-25]. https://www.infoq.cn/article/umqbighceoa81yij7uyg
[3] 字节跳动技术团队.字节跳动开源 Volo:国内首个基于 Rust 语言的 RPC 框架[EB/OL].[2022-08-31]. https://www.infoq.cn/article/NR3Rd5YlUkarAhKyrZUe
我们如何学习 Rust
终于来到了重点,如果你之前没接触过 Rust 想要尝试一下,或者深入了解,以下是我个人所知的和之前群内讨论的资料的汇总。
首先是官方教程,没错,官方除了文档之外还自带教程,基本上你看一遍和跟着练一遍就能初步上手 Rust :
Rust 电子书: The Rust Programming Language
Rust 训练: Rustlings
Rust 示例: Rust by examples
我所知的还有微软的基于 VS Code 的 Rust 学习路径 Take your first steps with Rust ,比较偏基础向。
以及我在 Q 群引用对应帖子时的最初想法:斯坦福操作系统原理课程 CS110 有个附加课程 CS110L 里面有讲解使用 Rust 规避常见内存安全性问题;
群友[@先驱者]提到一个清华大学的 Rust 程序设计训练课程;另外分享了一个方向是用 egui + rusqlite 写一个简单的 sqlite gui 操作;
群友[@之外]提到一个 UNSW 的课程 Solving Modern Programming Problems with Rust;
针对群友[@浮生若梦]的问题「 Rust 除 rbatis 以外较为好用的 orm 库」 @johnbanq 提到可以使用 diesel ;
此外,欢迎大家推荐更多 Rust 的学习资料,以及可以用 Rust 整活的小项目和想法呀!