Rust语言圣经(Rust Course)

发布于:2024-05-11 ⋅ 阅读:(85) ⋅ 点赞:(0)

 前言

       进入大学以来(计算机应用技术——大数据方向),就像很多程序猿🐒一样,小北开始每学期学习一种新的编程语言。通过学习另一个编程语言,可以了解很多规范和规则,并得到了一些想法,然后小北在大二的第一学期就发现了Rust。一开始写Rust代码就觉得非常有趣,让人无法挪步,而且经过一份陡峭的学习曲线后,变得越发有趣。所以,总共学习了两个额外的语言(C++Python)后,我坚定地选择了Rust。为什么?下面来告诉友友们具体的原因...

       首先,Rust是一个系统编程语言,会默认地提供内存安全性而无需垃圾回收器,这会影响其运行时行为。尽管如此,Rust仍然是一个相当全能的语言,可以在不同的领域中使用,不论是Web编程、游戏引擎还是Web客户端,都可以使用Rust。另外,对相关作用域和内存分配的传统思维发出挑战,会让小北成为一个可以驾驭任何语言的更好的程序猿🐒,无论是C#Java还是PythonAmazonMicrosoftGoogle等公司的最新动向表明,这个生态系统现在已经是发展到相当稳定的程度,已经足以让企业安心使用,我想这对于未来的Rust专业人员来说是一个很好的信号~~~

      Rust 语言真的好:连续八年成为全世界最受欢迎的语言、没有 GC 也无需手动内存管理、性能比肩 C++/C 还能直接调用它们的代码、安全性极高 - 总有公司说使用 Rust 后以前的大部分 bug 都将自动消失、全世界最好的包管理工具 Cargo 等等。但...

有人说: " Rust 太难了,学了也没用"

       对于后面一句话小北持保留意见,如果以找工作为标准,那国内环境确实还不好,但如果友友你想成为更优秀的程序员或者是玩转开源,那 Rust 还真是不错的选择。

       至于 Rust 难学,那正是小北要解决的问题,如果以后小北还是没有学会 Rust,可以找小北退款,哦抱歉,小北的内容都是开源免费的,那就退 🌟 吧 :)

      如果看到这里,友友们觉得小北的介绍并没有吸引到你,不要立即放弃,强烈建议读一下博客末尾的附录那里会有不一样的精彩...

附录:

正在努力学 Rust的 小北~

        Rust最早是 Mozilla 雇员 Graydon Hoare 的个人项目。从 2009 年开始,得到了 Mozilla 研究院的资助,2010 年项目对外公布,2010 ~ 2011 年间实现自举。自此以后,Rust在部分重构 -> 崩溃的边缘反复横跳(历程极其艰辛),终于,在 2015 年 5 月 15 日发布 1.0 版。

        在紧锣密鼓的开发过程中,Rust 建立了一个强大且活跃的社区,形成一整套完善稳定的项目贡献机制(Rust 能够飞速发展,与这一点密不可分)。Rust现在由 Rust 项目开发者社区 维护, Rust 基金会赞助支持。

       友友们可能疑惑 Rust 为啥用了这么久才到 1.0 版本?与之相比,Go 语言 2009 年发布,却在 2012 年仅用 3 年就发布了 1.0 版本。

  • 首先,Rust语言特性较为复杂,所以需要全盘考虑的问题非常多;
  • 其次,Rust 当时的参与者太多,七嘴八舌的声音很多,众口难调,而 Rust 开发团队又非常重视社区的意见;
  • 最后,一旦 1.0 快速发布,那绝大部分语言特性就无法再被修改,对于有完美强迫症的 Rust 开发者团队来说,某种程度上的不完美是不可接受的。

因此,Rust 语言用了足足 6 年时间,才发布了尽善尽美的 1.0 版本。

       大家知道 Rust 的作者到底因为何事才痛下决心开发一门新的语言吗?

说来挺有趣,在 2006 年的某天,作者工作到精疲力尽后,本想回公寓享受下生活,结果发现电梯的程序出 Bug 崩溃了,要知道在国外,修理工可不像在中国那样随时待岗,还要知道,他家在 20 多楼!

        最后,他选择了妥协,去酒店待几天等待电梯的修理。

当然,一般人可能就这样算了,毕竟忍几天就过去了嘛。但是这名伟大的程序员显然也不是一般人,他面对害他流离失所的电梯拿起了屠龙宝刀 - Rust

自此,劈开一个全新的编程世界。

为何又来一门新语言?

       简而言之,因为还缺一门无 GC 且无需手动内存管理、性能高、工程性强、语言级安全性以及能同时得到工程派和学院派认可的语言,而 Rust 就是这样的语言。你也可以回忆下熟悉的语言,看是不是有另外一门可以同时满足这些需求:)

       至于 Rust 最为人诟病的点,那也就一个:学习曲线陡峭。不过当语言生态起来后,这都不算问题。

缓解内卷

       有人说 Rust 作为新语言会增加内卷,其实恰恰相反,Rust 可以缓解内卷。为何不说 C++ 内卷,而说 JavaPythonJS 内卷?不就是后几个相对简单、上手容易嘛?而 Rust 怎么看也是 C++ 级别的上手难度。

       其实从小北内心不可告人的角度出发,并不希望 Rust 大众化,因为这样可以保饭碗、保薪资,还能拥有行业内的地位。但是从对 Rust 的喜爱角度出发,我还是希望能卷一些。不过,目前来看真的卷不动,现在全世界范围内 Rust 的需求都大于供给,特别是优秀的 Rust 程序员更是难寻。

       与 Go 语言相比,成为一名优秀的 Rust 程序员所需的门槛高得多,例如融汇贯通 Rust 语言各种中高级特性、闭着眼睛趟过各种坑、不用回忆无需查找就能立刻写出最合适的包/模块/方法、性能/安全/工程性的权衡选择信手拈来、深层性能优化易如反掌、异步编程小菜一碟,更别说 Rust 之外的操作系统、网络、算法等等相关知识。

       所以, Rust 可以缓解内卷,而不是增加内卷。可以说是程序员的福音,不再是被随意替换的螺丝钉。

效率

       下面从三个角度来谈谈 Rust 的效率:学习、运行、开发

学习效率

       众所周知, Rust 的学习曲线相当陡峭。起初,对此说法我还嗤之以鼻,随着不断的深入,现在也很认可这个说法。 Rust 之难,不在于语言特性,这些都可以很容易学到,而在于:

  • 实践中如何融会贯通的运用
  • 遇到了坑时(生命周期、借用错误,自引用等)如何迅速、正确的解决
  • 大量的标准库方法记忆及熟练使用,这些是保证开发效率的关键
  • 心智负担较重,特别是初中级阶段

        好在这小北就是干这个的,包君满意,不满意退... 要不还是骂我吧 :D

运行效率

       得益于各种零开销抽象、深入到底层的优化潜力、优质的标准库和第三方库实现, Rust 具备非常优秀的性能,和 C、C++ 是 一个级别。

       同时 Rust 有一个极大的优点:只要按照正确的方式使用 Rust ,无需性能优化,就能有非常优秀的表现,不可谓不惊艳。

        现在有不少用 Rust 重写的工具、平台都超过了原来用 C、C++ 实现的版本,将老前辈拍死在沙滩上,俨然成为一种潮流~~

开发效率

       Rust 的开发效率可以用先抑后扬来形容。在最初上手写项目时,你的开发速度将显著慢于 Go、Java 等语言,不过,一旦开始熟悉标准库、熟悉生命周期和所有权的常用解决方法,开发效率将大幅提升,甚至当形成肌肉记忆后,开发效率将不会慢于这些语言,而且原生就能写出高质量、安全、高效的代码,可以说中高级 Rust 程序员就是高效程序员的代名词。

个人的好处

      学习 Rust 对个人也有极大的好处。

成为更好的程序猿🐒

        要学好 Rust ,你需要深入理解内存、堆栈、引用、变量作用域等这些其它高级语言往往不会深入接触的内容。另外, Rust 会通过语法、编译器和 clippy 这些静态检查工具半帮助半强迫的让你成为更优秀的程序员,写出更好的代码。

       同时,当友友你掌握 Rust 后,就会自发性的想要去做一些更偏底层的开发,这些都可以帮助你更加了解操作系统、网络、性能优化等底层知识,也会间接或者直接的接触到各种算法和数据结构的实现。

       慢慢的,我们将成为那个更好的程序猿🐒,也是更优秀的友友~

增加不可替代性

       语言难学也有好处,一旦掌握,你将具备较强的不可替代性,不再是一个简单的工具人角色。看看现在内卷严重的 Java,工具人有多少!一个人离职,另外一个人很快就能替补上。

       当然,我不是说 Rust会给公司带来这种隐形的维护成本,毕竟这其实是一种双赢,公司收获了更优秀的程序员(不可否认的是 Rust程序猿🐒普遍来说水平确实更高,毕竟都是有很好的编程基础、也很有追求的自驱型人才),而你也收获了更稳定的工作环境,甚至是更高的收入。

团队的好处

        先不说安全、可靠性等对公司团队非常友好的特性,就说 Rust 程序只要能跑起来,那代码质量其实就是相当不错的,因为 Rust 编译器实在是一名严师厉友,甚至有些鸡毛。

        正因为这较高的质量下限,我们在代码 review 时不用过于担心潜在的各种坑,得益于此,可以实现更加高效的开发、review、merge 流程。

        由于 Rust 语言拥有异常强大的编译器和语言特性,Rust 的代码天然就会比其它语言拥有更少的 Bug。同时 Rust ​​​​​​​拥有非常完善的工具链、最好的包管理工具,决定了 Rust 非常适合大型团队的协作开发。

       也许 Rust 在开发速度上不是最快的,但是从开发 + 维护的角度来看,这个成本在各个语言中绝对是很小的。当然,如果你的公司就追求做出来能用就行,那 Rust 确实有些灰姑娘的感觉。

       还有一点很重要,现在的 Rust ​​​​​​​ 程序员往往拥有更出众的能力和学习自驱性,因此团队招到的人天然就保持了较高的底线。如果你有幸招到一个优秀的Rust 程序猿🐒,那真是捡到宝了,他也会同时带动周围的人一起慢慢优秀(优秀的 Rust 程序员比较好辨别,门槛低的语言就并没有那么好辨别)。总之,一个这样的程序员会给团队带来远超他薪资的潜在回报和长远收益。

开源

目前 Rust 的主战场是在开源上,Go 的成功也证明了农村包围城市( 开源包围商业 )的可行性。

  • UI 层开发,Rust 的 WASM 发展的如火如荼,隐隐有王者风范,在 JS 的基础设施领域,Rust 也是如鱼得水,例如 swc、 deno 等。同时 nextjs 也是押宝 Rust,可以说 Rust 在前端的成功完全是无心插柳柳成荫。
  • 基础设施层、数据库、搜索引擎、网络设施、云原生等都在出现 Rust 的身影,而且还不少。
  • 系统开发,目前 Linux 已经将 Rust 语言纳入内核,是继 C 语言后第二门支持内核开发的语言,不过刚开始将主要支持驱动开发。
  • 系统工具,现在最流行的就是用 Rust 重写之前 C、C++ 写的一票系统工具,还都获得了挺高的关注和很好的效果,例如 sd, exa, ripgrep, fd, bat 等。
  • 操作系统,正在使用 Rust 开发的操作系统有好几个,其中最有名的可能就是谷歌的 FuchsiaRust 在其中扮演非常重要的角色。
  • 区块链,如果 Rust 的份额说第二,应该没人敢稳说自己是第一吧?

        类似的还有很多,我们就不一一列举。总之,现在有大量的项目正在被Rust 重写,同时还有海量的项目在等待被重写,这些都是赚取 github 星星和认可的好机会。在其它语言杀成一片红海时,Rust 还留了一大片蓝海等待大家的探索!

相比其它语言Rust 的优势

        由于篇幅有限,小北这里不会讲述详细的对比,就是简单介绍下 Rust ​​​​​​​ 的优势,并不是说Rust 优于这些语言,大家轻喷:)

Go

        Rust 语言表达能力更强,性能更高。同时线程安全方面 Rust 也更强,不容易写出错误的代码。包管理 Rust 也更好,Go 虽然在 1.10 版本后提供了包管理,但是目前还比不上 Rust ​​​​​​​ 。

C++

        RustC++ 的性能旗鼓相当,但是在安全性方面 Rust 会更优,特别是使用第三方库时,Rust 的严格要求会让三方库的质量明显高很多。

       语言本身的学习,Rust 的前中期学习曲线会更陡峭,但是在实际的项目开发过程中,C++ 会更难,代码也更难以维护。

Java

        除了极少数纯粹的数字计算性能,Rust ​​​​​​​的性能全面领先于 Java 。同时 Rust 占用内存小的多,因此实现同等规模的服务,Rust 所需的硬件成本会显著降低。

Python

       性能自然是 Rust ​​​​​​​ 完胜,同时 Rust ​​​​​​​对运行环境要求较低,这两点差不多就足够抉择了。不过 PythonRust 的彼此适用面其实也不太冲突。

使用现状

  • AWS 从 2017 年开始就用Rust 实现了无服务器计算平台: AWS Lambda AWS Fargate,并且用 Rust 重写了 Bottlerocket OS AWS Nitro 系统,这两个是弹性计算云 (EC2) 的重要服务
  • Cloudflare Rust 的重度用户,DNS、无服务计算、网络包监控等基础设施都与 Rust 密不可分
  • Dropbox 的底层存储服务完全由 Rust 重写,达到了数万 PB 的规模
  • Google 除了在安卓系统的部分模块中使用 Rust 外,还在它最新的操作系统 Fuchsia 中重度使用 Rust
  • Facebook 使用 Rust 来增强自己的网页端、移动端和 API 服务的性能,同时还写了 Hack 编程语言的虚拟机
  • Microsoft 使用 RustAzure 平台提供一些组件,其中包括 IoT 的核心服务
  • GitHub npmjs.com,使用Rust 提供高达每天 13 亿次的 npm 包下载
  • Rust 目前已经成为全世界区块链平台的首选开发语言
  • TiDB,国内最有名的开源分布式数据库

尤其值得一提的是,AWS 实际上在押宝Rust ,内部对 Rust 的使用已经上升到头等公民 first-class 的地位。

Rust 语言版本更新

        与其它语言相比,Rust ​​​​​​​ 的更新迭代较为频繁(得益于精心设计过的发布流程以及 Rust 语言开发者团队的严格管理):

  • 每 6 周发布一个迭代版本
  • 2-3 年发布一个新的大版本,例如Rust ​​​​​​​2018 edition,Rust 2021 edition

好处在于,可以满足不同的用户群体的需求:

  • 对于活跃的 Rust 用户,他们总是能很快获取到新的语言内容,毕竟,尝鲜是技术爱好者的共同特点:)
  • 对于一般的用户,edition 大版本的发布会告诉他们:Rust 语言相比上次大版本发布,有了重大的改进,值得一看
  • 对于Rust 语言开发者,可以让他们的工作成果更快的被世人所知,不必锦衣夜行

小结

        连续 6 年最受欢迎的语言当然不是浪得虚名。 无 GC、效率高、工程性强、强安全性以及能同时得到工程派和学院派认可,这些令 Rust 拥有了自己的特色和生存空间。社区的友善,生态的快速发展,大公司的重仓跟进,一切的一切都在说明 Rust 的璀璨未来。

        当然,语言毕竟只是工具,我们不能神话它,但是可以给它一个机会,也许,你最终能收获自己的真爱 :)

相信大家听了这么多Rust 的优点,已经迫不及待想要开始学习旅程,那么容我引用一句 CS(Counter-Strike:反恐精英) 的经典台词:Ok, Let's Rust .

       小北的博客内容是完全开源的,但是并不意味着质量上的妥协,这里的每一个章节都花费了大量的心血和时间才能完成,为此牺牲了陪伴家人、日常娱乐的时间,虽然我们并不后悔,但是如果能得到友友们的鼓励,小北将感激不尽。

既然是开源,那最大的鼓励不是 money,而是 star:) 如果友友们觉得这篇博客小北真的用心了,就帮小北点点赞收藏一下吧,这将是小北继续前行的最大动力!