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

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

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

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

基于张老师这份思惟导图,咱们将其中的一些分支内容作了详细拆解,或许能够为Rust语言的初学者们解惑,稍微下降学习曲线的陡峭度。web

首先,无论什么样的初学者都须要了解的是Rust语言的一些外围常识,包括:编程

一、Rust语言是什么样的bootstrap

二、Rust语言应用领域范围后端

三、Rust语言社区浏览器

再针对不一样特色的开发者,提出针对性的学习建议:安全

一、有C语言基础闭包

二、有C++基础架构

三、有Java/Python/Ruby基础

四、有Go基础

五、有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语言要掌握的几个关键概念有

一、 Rust全部权机制 包括全部权的语义,生命周期和借用检查

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

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

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

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

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

三、OOP语言特性

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

四、函数式语言特性

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

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

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

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

 

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

相关文章
相关标签/搜索