Rust簡介

Rust 是一個系統編程語言,它注重於三個方面:安全,速度和並發性。因此,它沒有採用垃圾回收機制。它的特點也使得它能在其他編程語言不擅長的場景中大顯身手。它通過一系列不產生運行時開銷的編譯時安全檢查來提升目前語言所關注的領域,同時消除一切數據競爭。Rust還致力於實現「零開銷」,雖然看起來更像是一個高級語言的特性,但我們仍然可以用Rust來實現一些精準的底層控制。

Rust 是一種 預編譯語言ahead-of-time compiled language),程序編譯好後,把它給任何人,他們都不需要安裝 Rust 就可運行。如果你給他們一個 .rb , .py 或 .js 文件,他們需要先分別安裝 Ruby,Python,JavaScript 實現,不過你只需要一句命令就可以編譯和執行你的程序。這一切都是語言設計的權衡取捨。

Rust使用示例:

例如,在使用一門語言時,編寫一個能夠在屏幕上列印「hello world」的小程序,基本上已經成為了一種傳統,我們以使用Rust來編寫這個程序為例:

fn main() {
    println!("Hello, world!");
}

首先,創建項目文件。值得注意的時Rust並不關心你的代碼存放在哪裡,打開一個終端並輸入如下命令來為這個項目創建一個文件夾:

$ mkdir ~/projects$ cd ~/projects$ mkdir hello_world$ cd hello_world

接下來為Rust創建源文件。Rust的源文件有獨自的標識,以.rs結尾。

同時,Rust程序同樣會有一個main函數。程序中的第一行就意味著:定義一個main函數,沒有參數也沒有返回值。

而println!("Hello, world!");則做了這個程序的所以工作,值得注意的是代碼前的是四個空格而不是製表符。

在編譯運行這樣一個Rust程序時,可以輸入rustc命令來使用 Rust 編譯器並像這樣傳遞你源文件的名字:

$ rustc main.rs

在Linux或OSX系統中在shell下通過如下ls命令你可以看到它:

$ lsmain  main.rs

在Windows下:

$ dirmain.exemain.rs

Rust程序幫助編寫工具——Cargo

Cargo 是 Rust 的構建系統和包管理工具,同時 Rustacean 們使用 Cargo 來管理它們的 Rust 項目。Cargo 負責三個工作:構建你的代碼,下載你代碼依賴的庫並編譯這些庫。隨著你編寫更加複雜的 Rust 程序,你會想要添加代碼需要的庫,那麼如果你使用 Cargo 開始的話,這將會變得簡單許多。

Rust的安裝:

在 Unix 類系統如 Linux 和 macOS 上,你只需打開終端並輸入:

$ curl https://sh.rustup.rs -sSf | sh

這樣會下載一個腳本並開始安裝。如果一切順利,你將會看到:

Rust is installed now. Great!

在Windows下:

安裝地址:https://www.rust-lang.org/zh-CN/install.html

Rust的安全性

Rust最大的賣點就在於它的高安全性,儘管在老練的程序員手中保證安全性並不算太難,不過使用Rust可以輕鬆避免一些常見的錯誤。

空指針

如果程序員沒有檢查返回的指針是否為空,就有可能出現這個問題。Rust簡單粗暴的禁用了所有的空指針。

Rust中使用了引用(References)和借貸(Borrowing),引用就相當於原來的指針,借貸相當於一個讀寫鎖。對於一個變數,你只能單方面的讀或者單方面的寫,而不能在改變它的值的同時讀取它。當你改變指針變數產生了空指針時,它就會被禁用,從而防止了空指針的產生。

釋放內存後再使用

Rust使用資源獲取時初始化(Resource Acquisition Is Initialization)的方式讓每個變數在超出範圍後一定被釋放,同時被釋放的內存所有權將會被改變,使得用戶無法訪問

返回懸空指針

在Rust中引用是相當於指針的。而Rust的編譯器會核實返回的引用的有效性,即這些引用總是指向有效的內存。

超出訪問許可權

這個問題通常是數組的索引超出了範圍導致的,比如以下這一段

int a[4]={0,0,0,0};
printf(「%d」,a[4]);

Rust會在運行時進行檢查來減少這種錯誤的行為。

Rust到底值不值得花時間學習?

答案當然是值得,理由如下:

1、擁有開放,友好,高效的開源社區

開放源代碼、GitHub/Git在線開發  https://github.com/rust-lang/rust

開放系統設計過程,重要設計項目的提出、討論、評估、決策均在線進行。

內部決策過程公開透明,每周的發布會議均有記錄

公開接受第三方開發者提交的 Pull Requests,必要時還指導開發

有一個核心團隊(the core team)負責項目的發展方向和最終決策

有大量的(超過 1000 人!)第三方開發者給Rust貢獻源代碼、文檔和測試用例

多次將優秀的第三方開發者吸納進入官方開發團隊和核心團隊

多次在世界各地(包括北京)主辦和協辦小型本地開發者見面會

2、十幾年勤耕不綴

2006年,創始人Graydon Hoare啟動了Rust編程語言項目,用三年完成了第一個可用版本。

2011年,Rust語言編譯器被用Rust語言重寫,完成自舉。

2012年,Servo項目創建,驗證了Rust語言開發大型使用項目的能力。

2015年,發布正式版本1.0。

2018年,1月4日版本更新到1.23.0

3、擁有精心設計的規範透明的開發流程

引入規範化的RFC流程,形成了完整的技術文檔,利於集體討論評估,利於方案實施後期維護。該機制有力地推動了Rust的革新。

4、不拘一格聘請人才

Steve Klabnik 因寫作才華成為核心開發組成員之一。

Tilde公司以前開發的Ruby包管理器Bundler在Ruby領域非常流行,其架構設計被實踐證實獲得成功。14年,Rust官方聘請Tilde公司的核心技術人員Yehuda Katz和Carl Lerche

深受好評的Rust學習示例網站 http://rustbyexample.com 的早期創建者 Jorge Aparicio 後來也被邀請加入 了(Mozilla公司的)Rust官方團隊。

5、大規模的社區參與

社區里,用Rust開發的,或者與Rust相關的開源項目:Servo, Cargo, rust-by-example, Hyper, Piston, rust-postgres, gfx-rs, conrod, rust-sdl2, rust-crypto, docopt.rs, zinc, racer, rust-bindgen, glfw-rs, capnproto-rust, rust-rosetta, graphics, rust-openssl, rust-encoding……

總結:Rust是一個人靠譜,團隊靠譜,技術能力靠譜,態度靠譜,社區靠譜的項目。你值得擁有。

學習鏈接

Rust Book: https://doc.rust-lang.org/book/

Rust 學習示例:https://rustbyexample.com/

Rust中文教程:http://wiki.jikexueyuan.com/list/rust/