相對(duì)而言,Rust 是軟件行業(yè)中比較新的一門(mén)編程語(yǔ)言,如果從語(yǔ)法上來(lái)比較,該語(yǔ)言與 C++ 其實(shí)非常類似,但從另一方面而言,Rust 能更高效地提供許多功能來(lái)保證性能和安全。而且,Rust 還能在無(wú)需使用傳統(tǒng)的垃圾收集系統(tǒng)的情況下保證內(nèi)存的安全性。
Rust 語(yǔ)言原本是 Mozilla 員工 Graydon Hoare 的私人項(xiàng)目,Graydon Hoare 當(dāng)時(shí)是 Mozilla 研究部門(mén)的一位經(jīng)驗(yàn)豐富的 IT 科學(xué)家。2009 年,Mozilla 開(kāi)始贊助這個(gè)計(jì)劃,并且在 2010 年首次揭露了它的存在。
隨著越來(lái)越多設(shè)計(jì)者的加入,他們?yōu)樵摼幊陶Z(yǔ)言打造了瀏覽器引擎,并設(shè)計(jì)了 Rust 編譯器。Rust 編譯器是一款免費(fèi)和開(kāi)源的編程軟件,受 MIT 許可證和 Apache 許可證保護(hù)。自 2016 年起,由于許多開(kāi)發(fā)人員開(kāi)始選擇 Rust 而不是 Java 來(lái)進(jìn)行棧溢出(Stack overflow)開(kāi)發(fā),Rust 語(yǔ)言開(kāi)始成為人們關(guān)注的焦點(diǎn)。
Rust 官網(wǎng)鏈接:https://www.rust-lang.org/
1. 為什么 Rust 受到許多開(kāi)發(fā)者的青睞?
Rust 具有更強(qiáng)大的高并發(fā)性和高安全性,堪稱棧溢出開(kāi)發(fā)的完美選擇。對(duì)函數(shù)的優(yōu)秀控制能力和對(duì)內(nèi)存布局的完美運(yùn)用,這讓Rust 成為一種面向性能的編程語(yǔ)言。使用 Rust,你可以事半功倍地維護(hù)系統(tǒng)的完整性和安全性,此外,在語(yǔ)法、內(nèi)存安全性以及內(nèi)存管理上 Rust 也有著不俗表現(xiàn)。
語(yǔ)法易學(xué)
由于 Rust 與軟件行業(yè)中最流行的 C++ 語(yǔ)言的相似性以及其簡(jiǎn)單的語(yǔ)法,讓學(xué)習(xí)和理解這門(mén)語(yǔ)言變得非常容易,甚至對(duì)于初學(xué)者而言也簡(jiǎn)單易懂。Rust 的語(yǔ)法與 C 和 C++ 編程有很多相似之處,比如 if-else、while、for、return 等關(guān)鍵字的用法,而 Rust 中一些關(guān)鍵字還使用了模式匹配技術(shù),這使得這門(mén)語(yǔ)言更容易上手。
盡管語(yǔ)法非常相似,就函數(shù)和功能方面而言,Rust 語(yǔ)言做得更廣更深。該編程語(yǔ)言的“廣”在于,你可以發(fā)現(xiàn)每個(gè)函數(shù)體中所包含的幾乎所有部分,包括控制流操作符,本身都是以表達(dá)式來(lái)呈現(xiàn)的。簡(jiǎn)而言之,如果你已經(jīng)掌握了 C 或 C++,在對(duì)這些編程語(yǔ)言的一般理解標(biāo)準(zhǔn)下,Rust 能幫助你完成更多工作。
內(nèi)存安全
說(shuō)到 Rust 的安全特性,它被專門(mén)設(shè)計(jì)為保護(hù)內(nèi)存安全,它在安全代碼中不允許使用空指針、懸垂指針和數(shù)據(jù)競(jìng)爭(zhēng)。如果你需要對(duì)一個(gè)數(shù)據(jù)值進(jìn)行初始化,那么只能通過(guò)一系列固定的形式來(lái)完成初始化,它要求在函數(shù)開(kāi)始前初始化所有的輸入。幾乎所有其他語(yǔ)言都允許指針以有效形式或 Null 形式存在,但 Rust 提供了一組額外的特性集來(lái)測(cè)試指針是否有值。
非傳統(tǒng)的特性
Rust 還引入了一些額外添加的語(yǔ)法和功能來(lái)管理函數(shù)本身的生命周期,另一個(gè)方面,如果需要編寫(xiě)一些不安全的代碼,可以使用 Unsafe Rust 功能來(lái)對(duì)其進(jìn)行限制,而所有權(quán)功能作用于所有的值,讓每個(gè)值只可以有一個(gè)唯一的所有權(quán)屬主,值的有效范圍和該唯一所有權(quán)屬主的有效范圍保持一致。值可以通過(guò)不可變引用關(guān)鍵字 &T 進(jìn)行傳遞,也可以通過(guò)可變引用關(guān)鍵字 &mut T 來(lái)完成傳遞。Rust 編譯器在編譯時(shí)執(zhí)行這些規(guī)則,并同時(shí)追蹤所有引用的有效性。
內(nèi)存管理
Rust 不像 Java 或.Net 等編程語(yǔ)言那樣使用傳統(tǒng)的自動(dòng)垃圾回收系統(tǒng),Rust 也不像 Swift 或 C 等編程語(yǔ)言那樣使用自動(dòng)引用系統(tǒng)。Rust 是通過(guò)其獨(dú)有的 RAII(資源獲取即初始化)規(guī)范方法來(lái)管理內(nèi)存和其他資源的。此外,Rust 還使用最優(yōu)引用計(jì)數(shù)方法來(lái)對(duì)內(nèi)存分配進(jìn)行優(yōu)化,它還支持值的堆棧分配方法而非隱式裝箱轉(zhuǎn)換。
基于特征(Traits)和結(jié)構(gòu)化類型來(lái)實(shí)現(xiàn)
Rust 的系統(tǒng)是基于特征(Traits)和結(jié)構(gòu)化類型來(lái)實(shí)現(xiàn)的。在 Rust 中,類是用關(guān)鍵字 impl 來(lái)定義的。繼承和多態(tài)是由特征提供的,并允許開(kāi)發(fā)人員使用方法和混合實(shí)現(xiàn)。此外,結(jié)構(gòu)化類型還用于定義不同類型的字段。實(shí)現(xiàn)和特征不能進(jìn)行自我定義,它們只能提供繼承數(shù)據(jù)。Rust 還支持接口繼承,但是只允許使用復(fù)合集成來(lái)替代實(shí)現(xiàn)繼承。
2. Rust 代碼示例
Hello World 函數(shù)
- fn main() {
- println!("Hello World!");
- }
遞歸函數(shù)
- fn factorial(i: u64) -> u64 {
- match i {
- 0 => 1,
- n => n * factorial(n-1)
- }}
迭代函數(shù)
- fn factorial(i: u64) -> u64 {
- let mut acc = 1;
- for num in 2..=i {
- acc *= num;
- }
- acc
- }
3. 當(dāng)下使用 Rust 的主流項(xiàng)目
如果你知道現(xiàn)在有哪些軟件和應(yīng)用程序是用 Rust 語(yǔ)言開(kāi)發(fā)的,那么你可能會(huì)比以前更加信賴這種編程語(yǔ)言。Rust 已經(jīng)被用于開(kāi)發(fā)很多赫赫有名的主流應(yīng)用程序,有如下:
- Mozilla Firefox 瀏覽器;
- Discord(一款游戲聊天應(yīng)用);
- Gecko 瀏覽器;
- Tor 瀏覽器;
- GNOME Fractal(一款即時(shí)消息客戶端);
- 谷歌 Fuchsia 操作系統(tǒng);
- Redox OS;
- Rocket Web Framework;
- Servo(一款由 Mozilla 開(kāi)發(fā)的網(wǎng)頁(yè)瀏覽器排版引擎);
- Terminus DB(一款數(shù)據(jù)庫(kù)軟件);
- Libra(數(shù)字貨幣);
- OpenDNS;
4. Rust 的獨(dú)有特性
- 十分接近基本的 C 和 C++ 編程語(yǔ)言和語(yǔ)法;
- 做代碼分析時(shí),即使對(duì)于第三方代碼閱讀器而言,也能輕松解析其中引用的語(yǔ)義;
- 所有權(quán)系統(tǒng)設(shè)計(jì)非常合理,這也讓 Rust 變得特點(diǎn)鮮明;
- 由于有邏輯內(nèi)存分配、引用處理和內(nèi)存管理等特性,Rust 內(nèi)置的包管理器 Cargo 功能非常強(qiáng)大;
- Rust 的編譯器自身功能令人驚嘆。
5. Rust 比 Java 好在哪?
即使對(duì)于一個(gè)中等水平的程序員而言,從 Java 切換到 Rust 也是一件很容易的事情。從一開(kāi)始學(xué)習(xí),你就會(huì)覺(jué)得概念和語(yǔ)法似曾相識(shí),這能讓學(xué)習(xí)和編程都變得十分容易。因此,盡管 Rust 的確在技術(shù)上朝前邁出了一大步,但程序員在編程習(xí)慣上并不需要做出很大的調(diào)整。
使用 Rust 語(yǔ)言,你可以放心大膽地去探索各式類型新穎的復(fù)雜項(xiàng)目,而之前由于 Java 語(yǔ)言的復(fù)雜性,你不敢輕易嘗試這些項(xiàng)目。對(duì)于獨(dú)立開(kāi)發(fā)者來(lái)說(shuō),完美的資源分配和良好的內(nèi)存管理是必備之選,這的確是 Rust 一個(gè)較大的優(yōu)點(diǎn)。
另一方面,如今所有行業(yè)都建設(shè)在 IT 基礎(chǔ)之上,無(wú)論你是否是一名專業(yè)編程人員,在任何需要挖掘創(chuàng)造力的技術(shù)領(lǐng)域,都需要借助軟件編程。因此,復(fù)雜的編碼語(yǔ)言讓非專業(yè)程序員很難輕松地編寫(xiě)出所需代碼,而 Rust 正好可以為這類人提供解決方案。即使是業(yè)余程序員和初學(xué)者,也可以輕松地學(xué)習(xí)并在邏輯上理解這門(mén)編程語(yǔ)言,從而磨礪自己的技能并在各行各業(yè)中去盡力發(fā)揮他們的創(chuàng)造力。
6. 結(jié)束語(yǔ)
從 Java 切換到 Rust 很簡(jiǎn)單,而且順理成章,只需要在編程語(yǔ)言上做出一些調(diào)整就能完成切換。而且這種切換并不會(huì)讓你忘記所有已經(jīng)掌握的 Java 技能,因此,如果需要,你還可以隨時(shí)切換回 Java。但是,如果你堅(jiān)持使用 Rust 的話,你的生產(chǎn)效率將會(huì)變得更高,資源使用率將得到優(yōu)化,代碼安全性會(huì)變得更好,而且最重要的一點(diǎn)是,你能享受Rust 提供的諸多額外特性和功能。