学#Rust编程第一课#让 Rust 成为你的下一门主力语言

2022年7月7日 261点热度 0人点赞 0条评论

前阵子在 InfoQ 公众号了看到一篇文章「为什么 Rust 是初创公司的绝佳选择?」,觉察到我也该学 Rust 了。


那篇文章的笔记如下:

  • 作者是 1994 年开始编程的老鸟,基本上什么语言都用过。

  • Rust 编译器就像一个老派的模拟器教员,不管你做得多好,他永远都嫌不够。

    • 不管是什么项目,早起的代码组织都变得比较清晰。

    • Rust 可能会让人烦,但也真的引导你走向一个优秀的架构。

  • Rust 项目所需的调试工作量,比他在任何地方看到的都要少。

    • 有了像标签联合体(Rust 的枚举)这样的特性,就可以非侵犯式地明确指定代码的工作方式。

    • 让你在部署任何代码时都非常有信心。

  • 后台任务,如 Web、任务处理器、分析引擎的调度器,都是 Rust。

    • 当缺少相关库时才不使用 Rust。

    • 前端也不使用,用的 Flutter。

  • Rust 先小苦,后大甜。

    • 前期需要做的工作比其他语言更多,编译器有大量的约束条件需要遵守。

    • 但这种认知开销,以及编写代码所需的时间,会随着经验的一点点积累而迅速减少。

    • 阅读 Rust 代码比许多其他语言都简单。没有任何疑问或模棱两可的地方,通过阅读就能清楚地知道程序要做什么。

  • Rust 性能很高,且不需要付出更多的工程师时间。

  • 使用 Rust,只要很少的工程师,就可以走得很远。

    • 在经验丰富的团队手中,Rust 就像是一种超能力。


看完文章,心里比较痒,于是开始极客时间上陈天的「Rust 编程第一课」的学习。


笔记 - 开篇词 | 让 Rust 成为你的下一门主力语言

陈天编码 18 年了,一直从事高性能系统的研发。涵盖网络协议、网络安全、服务端架构、区块链以及云服务等方向。

各种语言都有深度使用,一接触到 Rust,就明白它绝对是面向未来的利器:

  • 首先,Rust 是一门非常重视开发者用户体验的语言。这方面绝对是傲视群雄的独一档。

    • 编译器在告知你的代码错误错误的同时,还极尽可能的给你推荐正确的代码。好比有个无所不知和蔼可亲的大牛跟你结队编程。

    • 看陈天的示例,感觉 Rust 像自带了 golangci-lint 之余 Go 的那种功能,但更深入。

    • 除了编译器的这种极致用户体验,工具链也是简单易用、善解人意。

  • 其次,众所周知的优异性能和强大的表现力,让 Rust 在很多场合都能够施展拳脚。

    • Rust 除了性能上提升外,还随着产品迭代进行的代码重构变得举重若轻。

图片

  • 最后,陈天自己的使用感受,Rust 会越用越享受。

    • 很多语言,越深入使用或越广泛使用,就越会「怒其不争」,因为要么掣肘很多无法施展,要么繁文缛节太多,在性能和简洁之间很难二选一。

    • 而在使用 Rust 时,那样情况很少见。Rust 及其生态应有尽有。

学习 Rust 的难点:

  • Rust 被公认学习曲线很陡峭。

  • 取百家之长,所以从其他语言迁移到 Rust,必须经过一段时间的思维转换。

    • 从 C++ 学习并强化了 move 语义和 RALL;从 Cyclone 借鉴和发展了生命周期;从 Haskell 吸取了函数式编程和类型系统;等。

    • 最大的思维转换是变量的所有权和生命周期,几乎所有编程语言都未曾涉及的领域。

    • 不过一旦拿下这个难点,其他知识点就是所有权和生命周期概念在不同领域的具体使用。

  • 从语言内核来看,它重塑了我们对一些基本概念的理解。比如 Rust 清晰定义了变量在一个作用域下的生命周期,不用关心 GC 这样的内存和性能杀手的前提下,还能够无需关心手动内存管理,让内存安全和高性能二者兼得

  • 从语言的外观来看,它用起来像 Python/TypeScript 这样的高级语言,表达能力一流,但性能丝毫不输 C/C++,让表达力和高性能二者兼得

如何学好 Rust?

  • 陈天多年的编程语言学习经验,和给团队传授经验的过程,总结了一套从入门到进阶的有效学习方法,对 Rust 也适用。

  • 精准学习 + 刻意练习。

  • 精准学习:

    • 深挖一个个高大上的表层知识点,回归底层基础知识的本质,再使用类比、联想等方法,打通涉及的基础知识;

    • 然后从底层涉及往表层实现,一层层构建知识体系,对知识点理解更透彻、掌握得牢固。

本篇的评论部分,陈天有条回复评论值得记录,「Go 与 Rust 的对比」:

  • Rust 和 Golang 重叠的领域主要在服务器开发领域。

  • 对于日程紧迫,有很多服务要写,且不在乎性能的开发团队,Go 是不错的选择。

    • Golang 的优点是简单,上手快,并发模型直接可用。

    • Google 花大力气打造生态,把语言调度器、网络协议库等优化得非常高效。

    • 所以 Go 做不需要复杂建模的服务开发,开发快、系统性能好。

  • 社区里有句话说得好:Go for the code that has to ship tomorrow, Rust for the code that has to keep running for the next five years.

  • 两者未来的前景都很好。

    • Go 继续在很多场景取代 Java;

    • Rust 在有些场景取代 C/C++,有些场景取代 Go/Java,有些场景取代 JavaScript(通过 Webassembly),还能在很多场景帮助其他语言构建高性能的底层库。


感兴趣就一起来学吧:

图片

13900学#Rust编程第一课#让 Rust 成为你的下一门主力语言

root

这个人很懒,什么都没留下

文章评论