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

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

相關文章
相關標籤/搜索