学习Rust,我的一些体会

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"缘起"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其实,我学习Rust的时间并不长,最早听说Rust这门语言的时候,还是在2018年春天,偶然一次机会在网上搜Python数学分析课程的时候,相关搜索里跳出了一个Rust的选项,好奇打开之后,便知道了Rust这门语言,所以也只是看了一下官网的一些说辞,然后在Playground上运行了一下Hello World,就再也没接着看下去了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一直到2019年秋季,因为家庭和个人兴趣,我决定离开了化工医药的研发工作,全身心投入到计算机编程当中,期间我曾经学过的语言,细数下来有这么几个:Python、Java、C#、Scheme、Scala,当然大学期间,也有全校工科必修的C语言(虽然现在我确实讨厌谭浩强的书,但是不得不说,靠那本谭浩强的红皮书打下的一些基础,为我后来学习新的编程语言扫清了很多障碍)。但是在学习过程中,感觉这些语言都有些让我不太舒服的地方,不过我也说不上来,所以后来偶然一次参加了DoraHack的一个关于Substrate的线上交流会,重新唤起了对Rust语言的兴趣,这里要感谢Mike Tang老师的贡献,又因为2020年初爆发的疫情,加上一段时间的周折,在2020年4月,我才终于正式开始学习Rust语言,这便是缘起。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Rust本身的魅力"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"谈了这些缘起,得说说是什么让Rust对于我来说有如此大的吸引力,我个人认为主要是如下几个方面:"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1.主打安全"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"说到Rust,如果不在安全上提一笔,就像吃炸酱面没蒜,Rust在内存安全和线程安全的出色表现绝对让人眼前一亮,对于企业和开发者来说,一套系统的安全与否,甚至会和金钱直接相关,Java号称是一门安全的编程语言,但是我们仍然可以看到譬如Tomcat爆出漏洞的消息,而用C/C++写出的项目导致的安全事故,也是时有发生,用Rust编写相同功能的代码,因为所有权、生命周期等特性的存在,可以最大程度保证项目的安全性,即使需要有牺牲安全的情况,直接用unsafe划分出来,泾渭分明。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2.高性能"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因为不存在垃圾回收,Rust实际运行当中对内存的利用率极高,这也使得Rust可以直接胜任底层开发,看看Java,Java代码还要依靠JVM才能运行,而且JVM是出了名的“内存杀手”,在实际运行当中简直是个大拖油瓶,相比较而言,Rust代码编译后直接高效操纵内存而且稳定,非常有效节约硬件成本。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.生产力友好"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"按照Rust的官方说法,因为设计优秀的编译器、文档、包管理器的存在,使用Rust开发的过程非常爽快,使用Cargo工具构建、管理项目,体验非常愉悦,当然编译器是真的优秀,如果以Rust编译器为标准去看待其他众多主流语言的编译器,只能说:都是渣渣……"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"我的心得"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"当然,提到上面这些东西,转回到对于我自身来说,Rust的学习过程,也给我带来不少收获,其中有几个影响最深的,我大概总结是这些:"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1.重新审视编程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我想肯定也有很多像我一样的开发者,其实是非科班出身,缺席了很多计算机的基础知识,但是在学习Rust的过程当中,因为要直面底层,依靠着阅读文档、编写代码,不得不去要了解计算机的基础的东西,比如组成、操作系统,这就是一个非常好的机会,依靠学习Rust你可以很快地扩充你的计算机知识基础,培养个人的计算机基本素养,重新审视编程这一过程,如果换做是学习Java,虽然到最后你还是会补上这些基础,但开发过程中,很多工作都被相应语言的虚拟机或者解释器给包办掉,这会导致你对于计算机底层的理解不深刻牢固,作为一个软件开发人员,了解底层的重要性很多前人反复强调了,不多赘述"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2.不怕犯错"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我学习过的这些语言,唯独Rust的编译器是我在编程过程当中用得最舒服愉悦的,如果说你在别的语言下写了一些错误的东西,到编译器上的时候,给你看到的就是一堆不知所云的玩意儿,这就像你是厨子,烤了一块牛排有些过火了,顾客吃了之后,只会对着你大吵大闹,然后根本不会给你什么好的建议,而Rust在你犯错误的时候,不仅会通过编译器告诉你错在哪,还会给你一些建议去改正错误,让你意识到犯错并不是一件可怕的事,这就非常人性化,给你指明改进方向,用不着让你单独去胡思乱想,随之带来的是你的实际编程水平也快速上升,两全其美"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.包容"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Rust下你可以运用多种编程风格和思想,而且不用担心有什么太多的冲突,比如我偏好于函数式,尽管没有引入Monad,Rust对于函数式编程的支持程度,仍然优于众多主流语言,这里不得不吐槽Java的所谓函数式编程,只不过是为了应付需求而为保持面向对象所作出的残次品,写起来一点也不开心,此外,Rust虽然并不明确表示支持面向对象,但也可以用其中Rust本有的类似的方法构造面向对象式的代码,这对Java等面向对象为主语言的开发者来说是个好消息,尤其对于C++开发者来说,Rust的语法与C++有诸多相似之处,转写Rust会更快得心应手"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"最后一点话"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"尽管上述的一些东西,我简单介绍了学习Rust给我带来的一些心得和想法,但是,Rust本身也并非十全十美,譬如说所有权、生命周期等等这些在Rust独有的概念,我在理解过程当中花费了大量的精力和时间,而且Rust本身学习的线路颇为陡峭,这些因素,足以证明Rust并不是一个对初学者友好的编程语言,尤其对于编程小白,第一门语言就是Rust会让他们十分困惑,从而磨灭对于编程的兴趣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"当然,如果有幸你能学习到Rust的话,我敢说,Rust的魅力简直独特持久,会让你流连忘返,体会到编程的真实乐趣,这样的体验,何乐不为?"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章