You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 进入Rust编程世界
## Rust发展历程
Rust 最早是 Mozilla 雇员 Graydon Hoare 的个人项目,从 2009 年开始,得到了 Mozilla 研究院的支助2010 年项目对外公布。2010 2011 年间实现自举。从此以后Rust在设计变化->崩溃的边缘反复横跳(历程极其艰辛),终于在 2015 年 5 月 15日发布1.0 版。在此研发过程中Rust 建立了一个强大且活跃社区形成了一整套完善稳定的项目贡献机制Rust能够飞速发展与这一点密不可分。Rust 现在由 [Rust项目开发者社区](https://github.com/rust-lang/rust)维护。
大家可能疑惑Rust为啥用了这么久才到1.0版本与之相比Go语言2009年发布却在2012年仅用3年就发布了1.0版本。首先是因为Rust语言特性较为复杂因此需要全盘考虑的问题非常多其次Rust当时的参与者太多七嘴八舌的声音很多导致了众口难调而Rust开发团队又非常重视社区的意见 最后一旦1.0快速发布那么后续大部分语言特性就无法再修改对于有完美强迫症的Rust开发者团队来说某种程度上的不完美是不可接受的。因此Rust语言用了足足6年时间才发布了尽善尽美的1.0版本。
## 为何又来了一门新语言?
为何需要一个新语言简而言之因为还缺一门无GC、**性能高**、**工程性强**、语言级安全性以及能同时得到工程派和学院派认可的语言而Rust算是这样的语言。你也可以回忆下熟悉的语言看是不是有另外一门语言可以同时满足这些需求: )
而Rust最为人诟病的点也就一个学习曲线陡峭其实严格来说当语言生态起来后这个不算问题。
### 缓解内卷
说Rust作为新语言会增加内卷其实恰恰相反Rust可以缓解内卷。为何不说C++内卷说Java、Python、JS内卷不就是后几个相对简单、上手容易嘛而Rust怎么看也是C++级别的上手难度OO
其实从我内心不可告人的角度出发并不希望Rust大众化因为这样可以保饭碗、保薪资还能更有行业内地位。但是从对Rust的喜爱角度出发我还是希望能卷一些但是。。。目前来看真的卷不动现在全世界范围Rust的需求都大于供给特别是优秀的Rust程序员更是难寻。
与Go语言相比一个优秀的Rust程序员所需的门槛高得多例如融汇贯通Rust语言各种中高级特性、闭着眼睛躺过各种坑、不用回忆无需查找就能立刻写出最合适的包/模块/方法、性能/安全/工程性的权衡选择信手拈来、深层性能优化易如反掌、异步编程小菜一碟更别说Rust之外的操作系统、网络、算法等等相关知识。
所以Rust可以缓解内卷而不是增加内卷可以说是程序员的福音不再是被随意替换的螺丝钉。
### 效率
下面从三个角度来谈谈Rust的效率学习、运行、开发。
#### 学习效率
众所周知Rust学习曲线陡峭最初我对此说法还嗤之以鼻随着不断的深入我现在也很认可这个说法。Rust之难不在于语言特性这些都可以很容易学到而在于:
- 实践中如何融会贯通的运用
- 遇到了坑时(生命周期、借用错误,自引用等)如何迅速、正确的解决
- 大量的标准库方法记忆及熟练使用,这些是保证开发效率的关键
- 心智负担较重,特别是初中级阶段时
好在,针对这些,目前国内有了一门非常全面的[Rust学习教程](https://github.com/sunface/rust-course)(非官方那本书)可以有效降低Rust的学习和使用门槛。
#### 运行效率
得益于各种零抽象开销、深入到底层的优化潜力、优质的标准库和三方库实现Rust具备非常优秀的性能和C语言、C++是[一个级别](https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html)。
同时Rust有一个极大的好处只要按照正确的方式使用Rust无需性能优化就能实现非常优秀的表现不可谓不惊艳
现在有不少用Rust重写的工具、平台都超过了原来用C、C++实现的版本,将老前辈拍死在沙滩上,俨然成为一种潮流~~
#### 开发效率
Rust的开发效率可以先抑后扬来形容在刚开始上手写项目时你的开发速度将显著慢于go、java等语言一旦开始熟悉标准库常用的方法开发效率将大幅提升甚至当形成肌肉记忆后开发效率将不会慢于这些语言而且原生就能写出高质量、安全、高效的代码可以说中高级级Rust程序员就是高效程序员的代名词。
### 个人的好处
学习Rust对个人也有极大的好处。
#### 成为更好的程序员
要学好Rust你需要深入理解内存、堆栈、引用、变量作用域这些其它高级语言往往不会深入接触的内容同时Rust会通过语法、编译器和clippy这些静态检查工具半帮助半强迫的让你成为更优秀的程序员写出更好的代码。
同时当你掌握了Rust你自发性的就会想要去做一些更偏底层的事情这些都可以帮助你更加了解操作系统、网络、性能优化等底层知识也会间接或者直接的接触到各种算法、数据结构实现。
慢慢的,你就在成为那个更好的程序员,也是更优秀的自己。
#### 增加不可替代性
语言难学也有好处一旦掌握你将具备较强的不可替代性不再是一个简单的工具人角色。看看现在内卷严重的Java工具人有多少一个人离职另外一个人很快就能替补上。
当然我不是说Rust会给公司带来这种隐形的维护成本毕竟这其实是一种双赢公司收获了更优秀的程序员(不可否认的是Rust程序员普遍确实水平更高毕竟都是有很好的其它语言基础、也很有追求的自驱性人才),而你也收获了更稳定的工作环境甚至是更高的收入。
### 团队的好处
先不说安全、可靠性等对公司团队非常友好的特性就说Rust程序只要能跑起来那代码质量其实就是相当不错的因为Rust编译器、clippy啥的实在是严师厉友甚至有些鸡毛。
正因为这较高的质量下限我们在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在开发的操作系统现在有好几个其中最有名的可能就是谷歌的fushia, Rust在其中扮演非常重要的角色
- 区块链目前Rust和Go可以说各领风骚未来Rust可能会一统江湖
类似的还有很多,我们就不一一列举, 总之现在有大量的项目在被用Rust重写同时还有海量的项目在等待被重写这些都是赚取star和认可的好机会在其它语言杀成一片红海时Rust还留了一大片蓝海等待大家的探索!
### 相比其他语言Rust的优势
由于篇幅有限我们这里不会讲述详细的对比就是简单介绍下Rust的优势。因此并不是说Rust就优于这些语言大家轻喷:)
#### Go
Rust语言表达能力更强性能更高同时线程安全方面Rust也更强不容易写出错误的代码包管理Rust也更好Go虽然在1.10版本后提供了包管理但是目前还比不上Rust的。
#### C++
与C++相比Rust的性能相差无几但是在安全性方面会更优特别是使用第三方库时Rust的严格要求会让第三方库的质量明显高很多。
语言本身的学习Rust的前中期学习曲线会更陡峭但是对于未来使用场景和生态的学习,C++会更难、更复杂。
#### Java
除了极少部分纯粹的数字计算性能Rust的性能是全面领先于Java的同时Rust占用内存小的多因此实现同等规模的服务Rust所需的硬件成本会显著降低。
#### Python
性能自然是Rust完胜同时Rust对运行环境要求较低这两点差不多就足够抉择了因为python和rust的彼此适用面其实不太冲突。
### 使用现状
- 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使用Rust为Azure平台提供一些组件其中包括IoT的核心服务
- Github和npmjs.com使用Rust提供高达每天13亿次的npm包下载
- Rust目前已经成为全世界区块链平台的首选开发语言
- Tidb国内最有名的开源分布式数据库
尤其值得一提的是AWS实际上在押宝Rust未来对Rust的使用可能很快会上升到**first-class**的地位。
## Rust语言版本更新
与其它语言相比Rust的更新迭代较为频繁(得益于精心设计过的发布流程以及Rust语言开发者团队的严格管理)
- 每6周发布一个迭代版本
- 2-3年发布一个新的大版本Rust 2018 editionRust 2021 edtion
好处在于,可以满足不同的用户群体的需求:
- 对于活跃的Rust用户他们总是能很快获取到新的语言内容毕竟尝鲜是技术爱好者的共同特点:)
- 对于一般的用户edition大版本的发布会告诉他们Rust语言相比上次大版本发布有了重大的改进值得一看
- 对于Rust语言开发者可以让他们的工作成果更快的被世人所知不必锦衣夜行
好了相信大家听了这么多Rust的优点已经迫不及待想要开始学习旅程那么容我引用一句CS的经典台词OKlet's go.
## 总结
连续6年最受欢迎的语言当然不是浪得虚名。 无GC、**效率高**、**工程性强**、强安全性以及能同时得到工程派和学院派认可, 这些令Rust拥有了自己的特色和生存空间社区的友善生态的快速发展大公司的重仓跟进一切的一切都在说明Rust的未来。
当然,语言毕竟还是工具,我们不能神话它,但是可以给它一个机会,也许你最终能收获自己的真爱:)