update intro-rust

pull/147/head
sunface 3 years ago
parent 761515d8e7
commit 20f3d9a6ee

@ -1,79 +1,121 @@
# 进入Rust编程世界 # 进入Rust编程世界
## 一、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 最早是 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版本。 大家可能疑惑Rust为啥用了这么久才到1.0版本与之相比Go语言2009年发布却在2012年仅用3年就发布了1.0版本。首先是因为Rust语言特性较为复杂因此需要全盘考虑的问题非常多其次Rust当时的参与者太多七嘴八舌的声音很多导致了众口难调而Rust开发团队又非常重视社区的意见 最后一旦1.0快速发布那么后续大部分语言特性就无法再修改对于有完美强迫症的Rust开发者团队来说某种程度上的不完美是不可接受的。因此Rust语言用了足足6年时间才发布了尽善尽美的1.0版本。
## 二、使用现状 ## 为何又来了一门新语言?
为何需要一个新语言简而言之因为还缺一门无GC、**性能高**、**工程性强**、语言级安全性以及能同时得到工程派和学院派认可的语言而Rust算是这样的语言。你也可以回忆下熟悉的语言看是不是有另外一门语言可以同时满足这些需求: )
一般来说某编程语言能在哪一年成为全世界最受欢迎的语言那粉丝们锣鼓喧天、昂首挺胸都是少不了的可以理解因为能从全世界这么多编程语言中脱颖而出成为最受欢迎的语言属实困难。可是有一门语言它从发布1.0版本开始,**连续6年成为了全世界最受欢迎的语言**是的它就是Rust这不2021年又成为最受欢迎的语言了 而Rust最为人诟病的点也就一个学习曲线陡峭其实严格来说当语言生态起来后这个不算问题
你可能会想既然这么受欢迎那肯定使用很广吧可惜现实给了我们重重一击在国外Rust尚且还行在各大公司的基础服务和底层设施都屡见身影在github上开源界也算是呼风唤雨可是到了国内说句不好听的能听说过Rust大名的已经算百里挑一的优秀了就业环境更是糟糕。 ### 缓解内卷
说Rust作为新语言会增加内卷其实恰恰相反Rust可以缓解内卷。为何不说C++内卷说Java、Python、JS内卷不就是后几个相对简单、上手容易嘛而Rust怎么看也是C++级别的上手难度OO
因此我们写了这本书,**一本承载了让Rust不再难学的梦想之书期望通过一本书再配合一些教学资源让国内的用户能迅速上手真实项目大幅提升Rust的开发效率** 其实从我内心不可告人的角度出发并不希望Rust大众化因为这样可以保饭碗、保薪资还能更有行业内地位。但是从对Rust的喜爱角度出发我还是希望能卷一些但是。。。目前来看真的卷不动现在全世界范围Rust的需求都大于供给特别是优秀的Rust程序员更是难寻
#### 部分主要使用者 与Go语言相比一个优秀的Rust程序员所需的门槛高得多例如融汇贯通Rust语言各种中高级特性、闭着眼睛躺过各种坑、不用回忆无需查找就能立刻写出最合适的包/模块/方法、性能/安全/工程性的权衡选择信手拈来、深层性能优化易如反掌、异步编程小菜一碟更别说Rust之外的操作系统、网络、算法等等相关知识。
- AWS从2017年开始就用Rust实现了无服务器计算平台 AWS Lambda 和 AWS Fargate, 并且用Rust重写了Bottlerocket OS和AWS Nitro系统这两个是弹性计算云(EC2)的重要服务 所以Rust可以缓解内卷而不是增加内卷可以说是程序员的福音不再是被随意替换的螺丝钉。
- Cloudflare是Rust的重度用户DNS、无服务计算、网络包监控等基础设施都都与Rust密不可分
- Dropbox的底层存储服务完全由Rust重写达到了数万PB的规模 ### 效率
- Google除了在安卓系统的部分模块中使用Rust外还在它最新的操作系统fuchsia中重度使用Rust 下面从三个角度来谈谈Rust的效率学习、运行、开发。
- Facebook使用Rust来增强自己的网页端、移动端和API服务的性能同时还写了Hack编程语言的虚拟机
- Microsoft使用Rust为Azure平台提供一些组件其中包括IoT的核心服务 #### 学习效率
- Github和npmjs.com使用Rust提供高达每天13亿次的npm包下载 众所周知Rust学习曲线陡峭最初我对此说法还嗤之以鼻随着不断的深入我现在也很认可这个说法。Rust之难不在于语言特性这些都可以很容易学到而在于:
- Rust目前已经成为全世界区块链平台的首选开发语言
- Tidb国内最有名的开源分布式数据库 - 实践中如何融会贯通的运用
- 国内高频交易服务 - 遇到了坑时(生命周期、借用错误,自引用等)如何迅速、正确的解决
- 大量的标准库方法记忆及熟练使用,这些是保证开发效率的关键
- 心智负担较重,特别是初中级阶段时
好在,针对这些,目前国内有了一门非常全面的[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的发展态势非常喜人生态发展也异常迅速颇有燎原之火之势。 #### 开发效率
Rust的开发效率可以先抑后扬来形容在刚开始上手写项目时你的开发速度将显著慢于go、java等语言一旦开始熟悉标准库常用的方法开发效率将大幅提升甚至当形成肌肉记忆后开发效率将不会慢于这些语言而且原生就能写出高质量、安全、高效的代码可以说中高级级Rust程序员就是高效程序员的代名词。
### 个人的好处
学习Rust对个人也有极大的好处。
#### Github #### 成为更好的程序员
要学好Rust你需要深入理解内存、堆栈、引用、变量作用域这些其它高级语言往往不会深入接触的内容同时Rust会通过语法、编译器和clippy这些静态检查工具半帮助半强迫的让你成为更优秀的程序员写出更好的代码。
Github上的Rust项目可以在这里查看: https://github.com/topics/rust?l=rust里面的项目是按照star数降序排列。 同时当你掌握了Rust你自发性的就会想要去做一些更偏底层的事情这些都可以帮助你更加了解操作系统、网络、性能优化等底层知识也会间接或者直接的接触到各种算法、数据结构实现
## 三、适用人群 慢慢的,你就在成为那个更好的程序员,也是更优秀的自己。
Rust 因多种原因适用于很多开发者, 这里让我们讨论几个最重要的群体。 #### 增加不可替代性
语言难学也有好处一旦掌握你将具备较强的不可替代性不再是一个简单的工具人角色。看看现在内卷严重的Java工具人有多少一个人离职另外一个人很快就能替补上。
### 开发者团队 当然我不是说Rust会给公司带来这种隐形的维护成本毕竟这其实是一种双赢公司收获了更优秀的程序员(不可否认的是Rust程序员普遍确实水平更高毕竟都是有很好的其它语言基础、也很有追求的自驱性人才),而你也收获了更稳定的工作环境甚至是更高的收入。
由于Rust语言拥有异常强大的编译器和语言特性因此Rust的代码天然就会比其它语言有更少的Bug同时Rust拥有非常完善的工具链、最好的包管理工具这些叠加在一起决定了Rust非常适合大型开发者团队的协作开发。 ### 团队的好处
先不说安全、可靠性等对公司团队非常友好的特性就说Rust程序只要能跑起来那代码质量其实就是相当不错的因为Rust编译器、clippy啥的实在是严师厉友甚至有些鸡毛。
正因为这较高的质量下限我们在review时并不用担心潜在的各种坑因此可以实现快速的开发、review、merge流程。
而且由于Rust语言拥有异常强大的编译器和语言特性因此Rust的代码天然就会比其它语言有更少的Bug同时Rust拥有非常完善的工具链、最好的包管理工具这些叠加在一起决定了Rust非常适合大型开发者团队的协作开发。
也许Rust在开发速度上不是最快的但是从开发 + 维护的角度来看这个成本绝对是各个语言中最小的之一当然如果你的公司就追求做出来能用就行那Rust确实有些灰姑娘的感觉。 也许Rust在开发速度上不是最快的但是从开发 + 维护的角度来看这个成本绝对是各个语言中最小的之一当然如果你的公司就追求做出来能用就行那Rust确实有些灰姑娘的感觉。
### 学生 还有一点很重要现在的Rust程序员往往拥有超出更出众的能力和学习自驱性因此团队招到的人天然就保持了较高的底线如果你有幸招到一个优秀的Rust程序员那真是捡到宝了他也会同时带动周围的人一起慢慢优秀(优秀的Rust程序员较好辨别门槛低的语言就并没有那么好辨别)。总之,一个这样的程序员会给团队带来远超他薪资的潜在回报和长远收益。
Rust的语言特点决定了它跟底层系统很亲和通过Rust你能学到操作系统、网络等计算机原理现在不少名校都引入了Rust作为计算机系统课程学习的重要组成部分例如MIT对Rust的使用就非常广泛。 ### 开源
目前Rust的主战场是在开源上Go的成功也证明了农村包围城市的可行性。
同时Rust具有一个友善、活跃的社区社区中的人非常热衷于为大家解答问题因此也很适合学生学习一门新的语言。 - 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来完成各种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币cryptocurrencies、生物信息学bioinformatics、搜索引擎、物联网internet of things, IOT程序、机器学习、云计算等甚至还包括 Firefox 浏览器的大部分内容。
### 开源开发者
Rust连续6年成为全世界最受欢迎的语言这就是来自于开源社区的厚爱在github上Rust各种类型的开源项目都非常火同时有很多领域还等着大家去填补空白这些都意味着在开源世界扬名立万的机会。 ### 相比其他语言Rust的优势
由于篇幅有限我们这里不会讲述详细的对比就是简单介绍下Rust的优势。因此并不是说Rust就优于这些语言大家轻喷:)
为一门成熟的语言锦上添花远不如为一门新语言雪中送炭你能获得比在其他语言更多的star和名气。 #### Go
Rust语言表达能力更强性能更高同时线程安全方面Rust也更强不容易写出错误的代码包管理Rust也更好Go虽然在1.10版本后提供了包管理但是目前还比不上Rust的。
#### C++
与C++相比Rust的性能相差无几但是在安全性方面会更优特别是使用第三方库时Rust的严格要求会让第三方库的质量明显高很多。
### 重视速度和稳定性的开发者 语言本身的学习Rust的前中期学习曲线会更陡峭但是对于未来使用场景和生态的学习,C++会更难、更复杂。
速度分为两种:运行速度和开发速度。 #### Java
除了极少部分纯粹的数字计算性能Rust的性能是全面领先于Java的同时Rust占用内存小的多因此实现同等规模的服务Rust所需的硬件成本会显著降低。
运行速度方面Rust拥有和C、C++几乎相当的性能甚至由于Rust的各种零开销抽象以及安全的编程方式你能轻松写出和那些优化过后的C++代码一样甚至更高的性能: [ripgrep](https://github.com/BurntSushi/ripgrep)就是很典型的例子。 #### Python
性能自然是Rust完胜同时Rust对运行环境要求较低这两点差不多就足够抉择了因为python和rust的彼此适用面其实不太冲突。
同时在你熟悉Rust后由于强大的编译器、标准库文档、语言高级特性等Rust能让你拥有不弱于其它静态语言的开发速度同时大幅减少后期维护成本。 ### 使用现状
最后Rust语言不仅仅适用于这些人群他们从Rust中最受益的人群。总的来说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语言版本更新
与其它语言相比Rust的更新迭代较为频繁(得益于精心设计过的发布流程以及Rust语言开发者团队的严格管理) 与其它语言相比Rust的更新迭代较为频繁(得益于精心设计过的发布流程以及Rust语言开发者团队的严格管理)
- 每6周发布一个迭代版本 - 每6周发布一个迭代版本
@ -84,4 +126,10 @@ Rust连续6年成为全世界最受欢迎的语言这就是来自于开源社
- 对于一般的用户edition大版本的发布会告诉他们Rust语言相比上次大版本发布有了重大的改进值得一看 - 对于一般的用户edition大版本的发布会告诉他们Rust语言相比上次大版本发布有了重大的改进值得一看
- 对于Rust语言开发者可以让他们的工作成果更快的被世人所知不必锦衣夜行 - 对于Rust语言开发者可以让他们的工作成果更快的被世人所知不必锦衣夜行
好了相信大家听了这么多Rust的优点已经迫不及待想要开始学习旅程那么容我引用一句CS的经典台词OKlet's go. 好了相信大家听了这么多Rust的优点已经迫不及待想要开始学习旅程那么容我引用一句CS的经典台词OKlet's go.
## 总结
连续6年最受欢迎的语言当然不是浪得虚名。 无GC、**效率高**、**工程性强**、强安全性以及能同时得到工程派和学院派认可, 这些令Rust拥有了自己的特色和生存空间社区的友善生态的快速发展大公司的重仓跟进一切的一切都在说明Rust的未来。
当然,语言毕竟还是工具,我们不能神话它,但是可以给它一个机会,也许你最终能收获自己的真爱:)
Loading…
Cancel
Save