摘要:Rust语言学习曲线过于陡峭?初学者看懂这张思维导图,快速入门。

Rust语言这两年的热度大家有目共睹,作为一个有着突破性变革意义的语言,其光鲜背后也有诸多质疑,对于想要在系统编程语言上更上一层楼的开发者来说,学习Rust语言既是一次新的尝试,也是一次编程思维上的挑战。

最近,技术畅销书《Rust编程之道》的作者张汉东总结了一份“Rust初学者学习路径”思维导图,作为Rust语言的头号布道者,张汉东参与了国内Rust社区的管理和运营,长期在各大知识平台输出高质量的学习教程,可以说是入门Rust语言的首选启蒙导师。

基于张老师这份思维导图,我们将其中的一些分支内容做了详细拆解,或许可以为Rust语言的初学者们解惑,稍微降低学习曲线的陡峭度。

首先,不管什么样的初学者都需要了解的是Rust语言的一些外围常识,包括:

1、Rust语言是什么样的

2、Rust语言应用领域范围

3、Rust语言社区

再针对不同特点的开发者,提出针对性的学习建议:

1、有C语言基础

2、有C++基础

3、有Java/Python/Ruby基础

4、有Go基础

5、有Haskell基础

Rust语言是什么样的

Rust最早是Mozilla员工Graydon Hoare的私人计划,说的通俗点,是Hoare的个人业务爱好,谁知道无心插柳柳成荫,最后却做成了一个广受欢迎的编程开发语言。

Mozilla了解到这个项目后就开始赞助这个计划,并且在2010年首次揭露了Rust的存在。同一年,其编译器源代码由原本的OCaml语言转移到Rust语言,进行bootstrapping工作,称做Rustc,并于2011年完成。这个可自我编译的编译器在架构上采用了LLVM做为它的后端。

Rust最为外界称道的是它的稳定和安全,而这种超强的稳定性来源于其独特的内存安全管理。

在C/C++中,很多开发者都会遇到内存方面的问题,Rust严格的编译器和良好的设计使它规避了这些问题,让它不会出现内存安全方面的故障。Java和C#的流行是因为它们消除了与内存安全性有关的错误,但这两种语言(如Java虚拟机和.Net)在运行时使用了垃圾回收从而导致运行开销,进而影响应用程序的性能。

Rust是无垃圾回收机制和Runtime的静态编程语言,它通过新加入的生命周期 (lifetime)和所有权 (Ownership) 特性,实现内存的自动回收,并且无需运行时,避免出现类似内存泄漏或者悬停指针之类的问题。

Rust的特性决定了它适用于追求编程语言的速度与稳定性的开发者。在官方指导文档中,如此形容Rust的使命:它最重要的目标是消除数十年来程序员不得不做的权衡:安全与生产力,速度与人机交互的顺畅度(ergonomics)。

简而言之,Rust是C和C ++的直接竞争对手,并且在较小程度上与Java和C#竞争。 至于Rust能不能将前浪拍在沙滩上,恐怕得拉长战线评估长期应用效果。

Rust适合哪些应用领域

和C语言一样,Rust也算是一种系统级语言。而且介于Rust不需要在运行时进行垃圾回收,因此它可以提供类似于C和C ++语言的运行时性能。

微软MSRC(微软安全响应中心)首席云开发布道师Ryan Levick曾公开表示:Rust适合系统性编程,微软大约70%的安全问题是内存安全问题。如果这些软件用Rust写,那么这 70%的安全问题很可能就不存在。

业内有不少预测显示Rust可能会成为下一代操作系统的开发语言,之前火狐就用它编写了一个名为Redox的类UNIX操作系统,微软也有逐渐从C/C++转移到Rust构建其基础结构软件的计划。

当前的云计算领域,Rust也可以如鱼得水。

在云计算中,需要构建高性能以降低关键开销的基础架构组件。例如,我们拥有虚拟机管理程序,其作用类似于虚拟机管理器,允许在多个租户之间共享单个云资源物理实例。Rust专注于安全性,而不会影响速度和性能。

创业公司也好,互联网大公司也罢,都可以用Rust编写各种任务,比如命令行工具、web项目、DevOps工具、嵌入式设备、生物信息学(bioinformatics)、搜索引擎、物联网程序乃至当前大火的机器学习项目。

比如Linkerd服务网格代理是在Rust中构建的。

用Rust编写的Qovery Engine是一个开放源代码抽象层库,可在短短几分钟内于云提供商上轻松部署应用程序。

Dropbox使用Rust重写了其一些核心系统,而Mozilla使用Rust构建了Firefox浏览器引擎。

除此之外,还有一些开发者基于Rust开发区块链系统,更多在项目中使用Rust的案例可以参考该页面https://prev.Rust-lang.org/zh-CN/friends.html。

Rust语言社区

一门语言、框架或者库出现后,人们应用它们,不只是因为自身的强大,更是因为其背后的生态圈。

社区是培育语言生态的关键载体,它的繁荣也是语言流行的另一个侧面。

如果想快速入门一门编程语言,相对应的开源主页和社区是最好的老师,有完整的代码、官方的指导文档,丰富的配套资源。任何疑难杂症,Rust语言社区也会有同仁及时解答,大家互相促进,在一个良好的氛围中交流学习Rust。

摆正学习态度

在了解了Rust语言基础外围知识之后,其次是要有一个戒骄戒躁的端正学习态度,坐得住冷板凳才能有所成。

首先,Rust的学习曲线还是比较陡峭的,入门门槛相对较高,所以学习时不要急于求成。

其次,先了解Rust语言概念,再动手实践。磨刀不误砍柴工,吃透基础概念,打好地基,才能搭好房子。

最后,记住编译器是你的老师。Rust难上手很关键的一点就是其严格的编译器,编译器会做尽可能多的检查,争取在编译期就发现问题,消除安全隐患。所以编译器像一个好老师,及早扼杀你的bug,强制性要求你写出可以正常运行的正确代码。

不同类型初学者学Rust要突破的难点

在此基础之上,我们再看学习Rust要突破的难点。此处,将初学者分为五大类来讨论。

完全零基础的开发者:掌握计算机基础体系知识结构,理解Rust语言和硬件/OS层的抽象,理解Rust语言核心概念、以及它的抽象模式,选择Rust语言的某个适用领域进行实操训练,通过实践来提升Rust语言的熟练度和理解深度,同时掌握领域知识。

有C语言基础:由于C语言开发者对高级语言的抽象不是很理解,所以着重了解掌握Rust所有权机制,包括所有权的语义,生命周期和借用检查。了解Rust语言的抽象模式,主要是类型和trait;以及Rust本身的的OOP和函数式语言特性。

有C++基础:C++开发者对于Rust语言的所有权有很好的理解能力,主要精力放在Rust的抽象模式和函数式语言特性上。

有Java/Python/Ruby基础:着重理解攻克Rust所有权机制、抽象模式、函数式编程语言特性。

有Go基础:Go语言开发者比较容易理解Rust的类型和trait抽象模式,但Go也是GC语言,所以所有权机制和函数式语言特性是他们的学习重点。

有Haskell基础:Haskell系的开发者对Rust语言函数式特性能很好的理解,主要攻克所有权机制和OOP语言特性。

所以,对于有一定基础的开发者来说,学习Rust语言要掌握的几个关键概念有

1、Rust所有权机制,包括所有权的语义,生命周期和借用检查

所有权机制是Rust语言最核心的特性,它保证了在没有垃圾回收机制下的内存安全,所以对于习惯了GC的开发者,理解Rust的所有权是最关键的一环,切记这三点:

  • Rust中的每一个值都有一个被称为其所有者 (owner)的变量。
  • 值有且只有一个所有者。
  • 当所有者(变量)离开作用域,这个值将被丢弃。

这其中又涉及到生命周期和借用检查等概念,是相对比较难啃的一块硬骨头。

2、Rust语言的抽象模式,主要是类型和trait

trait借鉴了Haskell中的Typeclass,它是对类型行为的抽象,可以通俗地类比为其他编程语言里的接口,它告诉编译器一个类型必须提供哪些功能语言特性。使用时要遵循一致性,不能定义相互冲突的实现。

3、OOP语言特性

熟悉面向对象编程(OOP)的常见的四个特性:对象、封装、继承和多态,可以更好地理解Rust的一些特性,比如impl、pub、trait等等。

4、函数式语言特性

Rust语言的设计深受函数式编程的影响,看到函数式特性,数学不好的人可能会望而却步,因为函数式编程语言的最大特点是把运算过程尽量写成一系列嵌套的函数调用,在Rust中,掌握闭包和迭代器是编写函数式语言风格的高性能Rust代码的重要一环。

具体含义和代码说明不再赘述,大家可以参考《Rust成语设计语言》以及《Rust编程之道》。为了让大家能更通俗易懂地理解Rust语言相关概念,特此附上华为云专家从自身业务经验出发学习总结的Rust资料,点击下载。

最后,感谢张汉东老师提供的思维导图学习框架,让初学者能系统的了解Rust,走近这颗冉冉升起的新星。

书籍下载: Rust语言学习总结.pdf 1.96MB

点击关注,第一时间了解华为云新鲜技术~

Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?相关推荐

  1. 张汉东:如何高效开发 Rust

    下面是<Rust编程之道>作者张汉东的分享.

  2. 【Rust 日报】2021-07-04 如何在面试中确定 Rust 程序员水平?

    如何在面试中确定 Rust 程序员水平? 对于这个问题,张汉东老师在 RustFriday 飞书群线上沙龙第十三期中进行了分享: 视频:RustFriday 飞书群线上沙龙 第十三期 | [讨论]如何 ...

  3. 字节跳动二号人物——山西人张利东

    数据猿 最新招聘公告: ①阿里数据中台品牌团队杭州四大职位虚位以待 ②蚂蚁金服大数据部2020实习生招募全面启动 ③TalkingData北京招资深银行行业BD... ④数数科技上海招大数据运维支持工 ...

  4. 华中农业大学苏汉东课题组诚聘博士后-

    华中农业大学苏汉东课题组诚聘博士后 一.课题组长简介 苏汉东,华中农业大学教授,博士生导师.本科和博士分别毕业于华中农业大学(2012年)和中国科学院大学(2019年),随后于中科院遗传与发育生物学研 ...

  5. 吉林大学计算机专业研究生导师,吉林大学计算机科学与技术学院导师教师简介-张晋东...

    吉林大学计算机科学与技术学院导师教师简介-张晋东本站小编 Free考研网/2020-03-11 基本情况 姓名:张晋东 性别:男 职称:副教授 最高学位:博士 Email: 备注:微信zhangjin ...

  6. 3G门户网总裁张向东:怎分享3G大蛋糕

       张向东,手机3G门户网总裁,创始人之一,1999年毕业于北京大学.张向东从大学毕业创业.进入媒体圈到3G门户的二次创业,始终坚持互联网新媒体理想,善于感性营销.引领舆论和导向传播,带领3G门户开 ...

  7. 1998年11月11日,马化腾和同学张志东正式注册——腾讯

    1998年11月11日,马化腾和同学张志东在广东省深圳市正式注册成立"深圳市腾讯计算机系统有限公司",之后许晨晔.陈一丹.曾李青相继加入.当时公司的业务是拓展无线网络寻呼系统,为寻 ...

  8. 一种声音]互联网的未来:李开复张向东对话凯文•凯利实录

    张向东:非常高兴今天早上的时候在尤伦斯跟大家做这样一场活动.今天我们请到的嘉宾是希望把我们对未来的感知告诉大家,这位是来自美国的凯文•凯利先生!凯文•凯利先生是大家非常熟悉的人.还有一位无论是IT界或 ...

  9. 中国现代书画家——张福民、高俊祥、张晓东、潘江海

    现代名家 (一.张福民) 个人简介: 1954年生,热爱书法,从军22年,团职干部转业.大专学历,建筑工程师.在部队被总后勤部树为节能标兵,荣立二等功一次,三等功六次. 2020年荣获"现代 ...

最新文章

  1. 2018 ICPC 青岛 L. Sub-cycle Graph(生成函数)
  2. JSON和JSONP有什么区别?
  3. python编程300例_经典编程100例——python版(例75)
  4. mysql5.1 mysiam,将MySQL 5.1 MyISAM 转换成 INNODB 存储引擎
  5. sqlserver 跨服务器备份表
  6. HTML游戏黑屏,网页游戏黑屏:游戏进不去解决方案
  7. javaScript第七天(1)
  8. Python---冒泡排序、选择排序
  9. Spring Data JPA 从入门到精通~@PreUpdate异常场景分析
  10. localStorage、sessionStorage本地存取Object 对象 - 代码篇
  11. python网络编程之 一 socket(套接字)
  12. 解题报告:LeetCode Basic Calculator(简单计算器)
  13. linux 环境变量和shell变量
  14. mysql服务器相互作用的协议_以下哪个不是与mysql服务器相互作用的通讯协议
  15. 2022安徽合肥经济技术开发区招聘社区工作者冲刺试题及答案
  16. OD点击寄存器变色OD
  17. linux打印机服务器设置,linux中设置CUPS打印机
  18. 哪个邮箱好用?!TOM邮箱品牌测评分析
  19. matlab 两个数中取小,matlab中取两个数中的较小值
  20. win xp安装详细教程

热门文章

  1. CSS 文本方向 direction属性
  2. html是什么型语言,HTML笔记
  3. 使用anaconda切换Python环境使用spyder
  4. matlab 判断两个矩阵有元素相等_如何使用MATLAB对Excel中的多参数进行计算?
  5. python爬取微博热搜并存入表格_python爬虫进阶之爬取微博热搜存入Mysql
  6. 白盒测试方法_软件测试的种类:白盒测试和黑盒测试
  7. 构造函数能默认初始化其静态成员么?
  8. linux压缩与解压
  9. Oracle or Question Solve(二)
  10. [BZOJ]3926 诸神眷顾的幻想乡(ZJOI2015)