学习 Rust,我的一些体会

用户头像
Kurtis Moxley
关注
发布于: 2020 年 07 月 19 日
学习Rust,我的一些体会

缘起

其实,我学习Rust的时间并不长,最早听说Rust这门语言的时候,还是在2018年春天,偶然一次机会在网上搜Python数学分析课程的时候,相关搜索里跳出了一个Rust的选项,好奇打开之后,便知道了Rust这门语言,所以也只是看了一下官网的一些说辞,然后在Playground上运行了一下Hello World,就再也没接着看下去了。



一直到2019年秋季,因为家庭和个人兴趣,我决定离开了化工医药的研发工作,全身心投入到计算机编程当中,期间我曾经学过的语言,细数下来有这么几个:Python、Java、C#、Scheme、Scala,当然大学期间,也有全校工科必修的C语言(虽然现在我确实讨厌谭浩强的书,但是不得不说,靠那本谭浩强的红皮书打下的一些基础,为我后来学习新的编程语言扫清了很多障碍)。但是在学习过程中,感觉这些语言都有些让我不太舒服的地方,不过我也说不上来,所以后来偶然一次参加了DoraHack的一个关于Substrate的线上交流会,重新唤起了对Rust语言的兴趣,这里要感谢Mike Tang老师的贡献,又因为2020年初爆发的疫情,加上一段时间的周折,在2020年4月,我才终于正式开始学习Rust语言,这便是缘起。



Rust本身的魅力

谈了这些缘起,得说说是什么让Rust对于我来说有如此大的吸引力,我个人认为主要是如下几个方面:

1.主打安全

说到Rust,如果不在安全上提一笔,就像吃炸酱面没蒜,Rust在内存安全和线程安全的出色表现绝对让人眼前一亮,对于企业和开发者来说,一套系统的安全与否,甚至会和金钱直接相关,Java号称是一门安全的编程语言,但是我们仍然可以看到譬如Tomcat爆出漏洞的消息,而用C/C++写出的项目导致的安全事故,也是时有发生,用Rust编写相同功能的代码,因为所有权、生命周期等特性的存在,可以最大程度保证项目的安全性,即使需要有牺牲安全的情况,直接用unsafe划分出来,泾渭分明。

2.高性能

因为不存在垃圾回收,Rust实际运行当中对内存的利用率极高,这也使得Rust可以直接胜任底层开发,看看Java,Java代码还要依靠JVM才能运行,而且JVM是出了名的“内存杀手”,在实际运行当中简直是个大拖油瓶,相比较而言,Rust代码编译后直接高效操纵内存而且稳定,非常有效节约硬件成本。

3.生产力友好

按照Rust的官方说法,因为设计优秀的编译器、文档、包管理器的存在,使用Rust开发的过程非常爽快,使用Cargo工具构建、管理项目,体验非常愉悦,当然编译器是真的优秀,如果以Rust编译器为标准去看待其他众多主流语言的编译器,只能说:都是渣渣……

我的心得

当然,提到上面这些东西,转回到对于我自身来说,Rust的学习过程,也给我带来不少收获,其中有几个影响最深的,我大概总结是这些:

1.重新审视编程

我想肯定也有很多像我一样的开发者,其实是非科班出身,缺席了很多计算机的基础知识,但是在学习Rust的过程当中,因为要直面底层,依靠着阅读文档、编写代码,不得不去要了解计算机的基础的东西,比如组成、操作系统,这就是一个非常好的机会,依靠学习Rust你可以很快地扩充你的计算机知识基础,培养个人的计算机基本素养,重新审视编程这一过程,如果换做是学习Java,虽然到最后你还是会补上这些基础,但开发过程中,很多工作都被相应语言的虚拟机或者解释器给包办掉,这会导致你对于计算机底层的理解不深刻牢固,作为一个软件开发人员,了解底层的重要性很多前人反复强调了,不多赘述

2.不怕犯错

我学习过的这些语言,唯独Rust的编译器是我在编程过程当中用得最舒服愉悦的,如果说你在别的语言下写了一些错误的东西,到编译器上的时候,给你看到的就是一堆不知所云的玩意儿,这就像你是厨子,烤了一块牛排有些过火了,顾客吃了之后,只会对着你大吵大闹,然后根本不会给你什么好的建议,而Rust在你犯错误的时候,不仅会通过编译器告诉你错在哪,还会给你一些建议去改正错误,让你意识到犯错并不是一件可怕的事,这就非常人性化,给你指明改进方向,用不着让你单独去胡思乱想,随之带来的是你的实际编程水平也快速上升,两全其美

3.包容

在Rust下你可以运用多种编程风格和思想,而且不用担心有什么太多的冲突,比如我偏好于函数式,尽管没有引入Monad,Rust对于函数式编程的支持程度,仍然优于众多主流语言,这里不得不吐槽Java的所谓函数式编程,只不过是为了应付需求而为保持面向对象所作出的残次品,写起来一点也不开心,此外,Rust虽然并不明确表示支持面向对象,但也可以用其中Rust本有的类似的方法构造面向对象式的代码,这对Java等面向对象为主语言的开发者来说是个好消息,尤其对于C++开发者来说,Rust的语法与C++有诸多相似之处,转写Rust会更快得心应手

最后一点话

尽管上述的一些东西,我简单介绍了学习Rust给我带来的一些心得和想法,但是,Rust本身也并非十全十美,譬如说所有权、生命周期等等这些在Rust独有的概念,我在理解过程当中花费了大量的精力和时间,而且Rust本身学习的线路颇为陡峭,这些因素,足以证明Rust并不是一个对初学者友好的编程语言,尤其对于编程小白,第一门语言就是Rust会让他们十分困惑,从而磨灭对于编程的兴趣。

当然,如果有幸你能学习到Rust的话,我敢说,Rust的魅力简直独特持久,会让你流连忘返,体会到编程的真实乐趣,这样的体验,何乐不为?

发布于: 2020 年 07 月 19 日 阅读数: 1808
用户头像

Kurtis Moxley

关注

Console.WriteLine("Never say die"); 2020.07.16 加入

学化工的码字员,函数式真是个好东西

评论 (3 条评论)

发布
用户头像
我觉得你得纠正一点,tomcat的所有漏洞不能让java背锅;安全问题不只是编成语言,网络、通信协议、设计等等还有很多其他方面。
2020 年 07 月 20 日 15:32
回复
感谢指正
2020 年 07 月 21 日 12:34
回复
用户头像
简单看了下rust真的喜欢不起来。当然用得到的时候,你还必须去学。
2020 年 07 月 20 日 08:45
回复
怎么说呢……见仁见智,作为一门编程语言来说,Rust也并非十全十美,但是一个新的技术的出现,必然是要解决旧技术的痛点的
2020 年 07 月 21 日 12:33
回复
用户头像
其实我觉得要证明Rust比C/C++优秀,只需要把firefox用Rust全新开发,之后性能优于chrome就行了. Rust用的场景没看见有多少. 像C++如果要安全编程, 可以使用约定的一些开发模式控制内存所有权的传递。
2020 年 07 月 19 日 23:58
回复
对于您这个看法,首先我确实认同一部分,目前已经运用上Rust的场景还是不太多,但是一个技术想要发展,也需要投入时间,Java发展到今天有一个强劲的生态,也用了近三十年时间,目前Rust的历史包袱并不多且不重,这对于Rust而言是一个好事情
2020 年 07 月 21 日 12:22
回复
没有更多了
学习Rust,我的一些体会