學習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的魅力簡直獨特持久,會讓你流連忘返,體會到編程的真實樂趣,這樣的體驗,何樂不爲?"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章