Rust學習筆記#0:初窺門徑

爲何選擇Rust

這個世界上的編程語言不可勝數,僅在 TIOBE(開發語言排行榜)上被歸入統計範圍的就有273種之多,下圖是當下最流行的前20種編程語言。 git

這些優秀的編程語言每每都有本身的絕活,例如C性能很是高,Java便於抽象擅長組織大型程序,Python適合小巧的腳本,等等。但一樣,它們也並不是完美,性能高的C容易產生段錯誤(segfault,由訪問不屬於本程序擁有的內存所形成的崩潰,例如空指針解引用等),擅長抽象的Java須要垃圾回收(GC),上手快的Python解釋執行速度較慢。因此,編程語言的設計和發展仍有進步的空間,而Rust就是近年來涌現的新一代的綜合各大編程語言優勢的集大成者。程序員

Rust的設計者是這樣定位這門語言的:github

Rust is a system's programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety.npm

Rust的突出優點能夠總結爲如下三點(無須看懂,知道Rust很厲害就完事了):編程

  • 內存安全:Rust最重要的特色就是能夠提供內存安全保證,並且沒有額外的性能損失。保證內存安全即不會出現內存訪問錯誤,爲此,Rust創建了嚴格的內存安全管理模型:
    • 全部權系統:每一個被分配的內存都有一個獨佔其全部權的指針,只有當該指針被銷燬時,其對應的內存才能隨之被釋放。全部權系統借鑑了C++的RAII機制,這是Rust無GC可是能夠安全管理內存的基石。
    • 借用和生命週期:每一個變量都有其生命週期,一旦超出生命週期,變量就會被自動釋放。若是是借用,則能夠經過標記生命週期參數供編譯器檢查的方式,防止出現懸垂指針,也就是釋放後使用的狀況。
  • 零成本抽象:抽象表達能力是使用編程語言高效開發的必要條件,有些語言的抽象表達能力是靠犧牲性能換來的,而Rust的抽象表達能力不會存在運行時性能開銷。Rust零成本抽象的基石是泛型和trait。
  • 併發:內存安全的bug和併發安全的bug產生都是由內存的不正當訪問形成的,因此,利用裝載了全部權的強大類型系統,Rust可以在編譯期檢查出多線程併發代碼中的數據競爭問題。

Rust以其獨特的魅力已經連續多年榮膺StackOverflow網站罪受程序員歡迎的編程語言,雖然目前其在TIOBE榜單上還未入前列,但將來互聯網一定更加註重安全和高性能,因此應運而生的Rust必將大有可爲。安全

在學習Rust的語法以前,咱們先一塊兒來了解一下Rust的周邊知識。多線程

Rust經常使用網站

  • 官方網站:點擊這裏。在這裏你能夠找到官方教材TRPL等許多重要內容,因此探索一下此網站大有裨益。
  • 編譯器是開源的:點擊這裏。對Rust語言來講,開源社區也是語言的一部分,這是和其餘商用語言的區別所在。
  • 語言設計和相關討論:點擊這裏。Rust每增長一個重要語言特性,都會通過標準的RFC流程,RFC文檔是涵蓋了語言特性的設計意圖、詳細設計、優缺點的完整技術方案。這對於咱們學習者來講,能夠經過閱讀RFC來深刻了解某個語言特性的前因後果,這將是一個極其寶貴的學習資源,有助於瞭解某個特性背後的原理。
  • 官方開源倉庫:點擊這裏。該網站儲存了Rust社區熱門的開源庫。

版本和發佈策略

Rust編譯器的版本號採用了「語義化版本號」(Semantic Versioning)的方案,版本格式爲:主版本號.次版本號.修訂號,其遞增規則以下:併發

  • 主版本號:當作了不兼容的API修改
  • 次版本號:當作了向下兼容的功能性新增
  • 修訂號:當作了向下兼容的問題修正

Rust團隊維護三個發行分支:curl

  • 開發版(nightly):最新的功能將首先發布在此分支,供用戶試用。
  • 測試版(beta):將nightly版本中驗證過的功能開放給用戶使用,能夠看做是stable版本的預發佈版本。
  • 穩定版(stable):每隔6個星期發佈的穩定可靠的版本。

Rust語言每一個相對複雜一點的新功能,都要經歷以下步驟纔算真正穩定可用:編程語言

RFC -> Nightly -> Beta -> Stable

有時一些新功能確實須要必定程度上破壞兼容性,爲了最大程度上減小這些變更給用戶帶來的影響,Rust設計組又提出一個所謂的edition方案,目前有 2015 和 2018兩種edition,咱們能夠設置"edition=2018"來告訴編譯器咱們使用的版本。

安裝開發環境

根據官網的推薦,可使用一個叫rustup的工具安裝Rust相關的一整套工具鏈。命令以下:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

咱們可使用rustup工具管理工具鏈:

// 更新rustup自己
rustup self update
// 更新工具鏈
rustup update

也能夠用它在stable/beta/nightly三種版本中輕鬆切換:

// 安裝nightly版本的工具鏈
rustup install nightly
// 設置默認工具鏈是nightly版本
rustup default nightly

若執行下列命令可以正確輸出版本號則說明Rust安裝成功:

rustc --version

若安裝不成功,請嘗試將~/.cargo/bin加入PATH環境變量中去。

~/.cargo/bin目錄下能夠找到Rust的一些經常使用工具,以下圖所示:

  • cargo:Rust的包管理器,相似於Python的pip、Node.js的npm。但cargo不只侷限於包管理,它還爲Rust生態系統提供了標準的工做流,可以管理整個工做流程,從建立項目、運行單元測試和基準測試,到構建發佈連接庫,再到運行可執行文件,等等。
  • rustc:Rust的編譯器,負責將Rust源代碼編譯爲可執行文件或其餘庫文件。rustc是Rust開發的,其輸出的錯誤信息很是友好和詳盡,遠超你見過的任何一款編譯器。
  • rustdoc:文檔生成器。
  • rls和racer:爲編輯器準備的代碼提示工具。
  • cargo-fmt和rustfmt:源代碼格式化工具,有了這個,不再用爭論大括號是寫在行尾仍是另起一行了。
  • rust-gdb和rust-lldb:調試器。

對於IDE,Rust尚沒有專屬的IDE,我推薦Clion+Rust插件,已經很是好用了。

Hello World

配置好了開發環境,如何能不寫一個充滿儀式感的Hello World程序呢?來,新建一個文件,命名爲hello_world.rs,內容以下:

// hello_world.rs
fn main() {
	let s = "hello world!";
	println!("{}", s);
}

而後使用rustc編譯它,可看到當前文件夾下生成了一個名爲hello_world的可執行程序:

參考文獻

  • 《Rust編程之道》張漢東
  • 《深刻淺出Rust》範長春
相關文章
相關標籤/搜索