【云駐共創】Rust語言一般適合用來做什么?
一、 引言

隨著時代的發展,編程語言已經多到數不勝數,那么再發明一種新的編程語言有什么意義呢?發明一種新的編程語言又能解決什么問題呢?
俗話說的好,“工欲善其事,必先利其器”。在程序員的世界中,編程語言就是他們的“武器”,編程語言不僅是程序員的“武器”,而且還是他們思想的體現。在當今編程語言“百花爭艷”的時代,如果一種新語言可以一直發展下去,被程序員所接受,必然有它的優點和過人之處。
Rust語言就是一門新的編程語言。
二、 Rust語言簡介
2.1 Rust的歷史背景
Rust語言在2006年作為 Mozilla 員工 Graydon Hoare 的私人項目出現,而 Mozilla 于 2009 年開始贊助這個項目。第一個有版本號的 Rust 編譯器于2012 年 1 月發布。Rust 1.0 是第一個穩定版本,于 2015年5月15日發布。
從 2019 年下半年至今,不到一年的時間內,Rust 語言確實接二連三地掀起過一些波瀾。從微軟探索將 Rust 作為 C 和 C++ 的安全替代方案開始,Rust 吸引了越來越多的目光:內核維護者表示愿意接受用 Rust 開發 Linux 驅動;AWS 也伸出橄欖枝,宣布贊助 Rust;微軟更進一步,在今年年初開發并開源了受 Rust 啟發的新編程語言 Verona;最近,蘋果也站出來擁抱它,將 C 代碼移植到 Rust。
2.2 什么是Rust語言?
Rust語言是一門系統編程語言,專注于安全。系統編程語言是相對于應用編程語言而言,系統編程語言意味著更接近于硬件層次,并為上層的應用軟件提供支持。
系統編程語言的特點:
(1) 可以在資源非常受限的環境下執行,運行時開銷很小,非常高效;
(2) 很小的運行庫,有時候甚至是沒有
(3) 可以運行直接的內存操作。
目前較為流行的系統編程語言是C和C++,Rust與C和C++類似,相比是增加了安全性。
2.3 Rust語言的特點
(1)高性能-Rust速度非常快且內存利用率極高。由于沒有運行時和垃圾回收,它能夠勝任對性能要求特別高的服務,可以在嵌入式設備上運行,還能輕松和其他語言集成。
(2)可靠性-Rust 豐富的類型系統和所有權模型保證了內存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯誤。
(3)生產力-Rust 擁有出色的文檔、友好的編譯器和清晰的錯誤提示信息, 還集成了一流的工具 —— 包管理器和構建工具, 智能地自動補全和類型檢驗的多編輯器支持, 以及自動格式化代碼等等。
2.4 Rust語言架構
Rust語言概念層次結構梳理為上圖中的四個層次。
最低層是安全內存管理,該層主要是涉及內存管理相關的概念。內存管理是理解低級語言的基礎概念。低級語言沒有提供自動內存管理的解決方案,例如內置垃圾回收器。它要求程序員自己在程序中管理內存。正確理解內存的使用情況程序員才能構建高效安全的軟件。
倒數第二層是類型系統層,該層起到承上啟下的作用。類型系統層承載了上層的所有權系統語義和混合編程范式,賦予了Rust語言高級的抽象表達能力和安全性。同時,還保留了對底層代碼執行、數據表示和內存分配等操作的控制能力。
對于我們程序員來說,我們只需關心類型系統、語義和混合編程范式即可。編輯器會幫助我們處理內存安全。
三、 Rust學習路線
上面的思維導圖包含了詳細的學習內容和路線。學習之前必不可少的肯定是安裝開發環境。在官網中有安裝包和詳細的安裝教程,就不過多贅述。
官網地址放在這:安裝 Rust - Rust 編程語言 (rust-lang.org)。
配置好開發環境之后,我們嘗試一下所有編程語言的經典實例“Hello world!”,
fn main() { let s = “Hello world!”; println!(“{}”,s); }
對于這樣一個簡單的示例程序,我們直接使用rustc即可,執行該程序我們就可以在控制臺上看到”Hello world!”字符串。我們簡單的hello world程序就執行完成了。
我們簡單分析一下這個簡單的程序:
(1) fn(function的縮寫)是一個關鍵字,函數定義必須用這個關鍵字開頭。
(2) 函數體使用大括號包含。
(3) 默認情況下,main函數是可執行程序的入口點,它是一個無參數無返回值的函數。
(4) 局部變量申明用let關鍵字開頭。
(5) 最簡單的標準輸出是使用println!宏來完成。后面的感嘆號,它代表這是一個宏,而不是一個函數。而且需要注意的是Rust語言中的宏與C/C++的宏有很大的差別,可以說是完全不一樣的東西。
(6) 每條語句也是通過分號結尾,與C/C++的語法規則是一樣的。
雖然說Rust是一門新語言,但是與C有很對相似的地方。熟悉C/Java/JavaScript等語言的朋友,如果要是學習Rust語言的話,應該會很快入手的,因為你會經常看到你熟悉的東西。這一點對于開發者來說還是很友善的。
四、 Rust語言的優缺點
優點:前面提到了一些Rust語言的特點,可以說它的特點就是它的優點。首先必須要提的肯定是安全方面了。
(1)傳統的系通編程語言開發過程中,會出現因內存錯誤導致的bug或者是崩潰。比如空指針、野指針、內存越界、段錯誤等等。這些錯誤我們經常提起,平時開發時也會時常遇到,各路大神不斷總結經驗、開發調試工具,但并不能徹底解決這些問題。Rust語言是可以保證內存安全的系統編程語言,這是它獨特的優勢。與 C/C++ 語言相比,使用 Rust 語言來進行程序設計可以有助于從源頭預防出現諸如空指針,緩存溢出和內存-存問題。
(2)在計算機單核性能越來越接近瓶頸的今天,多核并行成了提高軟件執行效率的發展趨勢。在強大的內存安全特性的支持下,Rust很好的解決了并行條件下的數據競爭問題,保障了線程的安全。
(3)其次就是高性能運行效率極高,與其他語言相比之下,Rust的運行效率較高。
缺點:俗話說的好“人無外人”,一門編程語言也不可能是完美的,肯定會有它的不足或者是局限性。
(1)Rust編譯起來比較復雜,對新人不是很友好
(2)庫不完善,生態環境較弱
(3)為了做到編譯時捕捉大部分錯誤,給予了 programmer 很少的自由
五、 Rust語言的應用
5.1 Rust語言的應用范圍
(1)Rust編譯器可以直接生成目標可執行程序,不需要任何解釋程序,可用于傳統命令行程序。
(2)Rust 同時具有JavaScript 一般的高效開發語法和 C 語言的執行效率,支持底層平臺的開發,可以用于開發嵌入式設備。
(3)Rust 用極低的資源消耗做到安全高效,且具備很強的大規模并發處理能力,十分適合開發普通或極端的服務器程序,可以用于開發網絡服務器。
(4)Rust 可以被編譯成 WebAssembly,WebAssembly 是一種 JavaScript 的高效替代品。
5.2 Rust語言的應用示例
Rust是一門通用的高級系統編程語言,其應用領域基本可以同時覆蓋C/Cpp/Python/Java的應用領域。具體而言,Rust的應用領域目前可以覆蓋到以下領域:數據服務領域(數據庫、數據倉儲、大數據等等),云原生(機密計算、容器、分布式計算平臺等等),操作系統、工具軟件等領域。不管是在國內還是在國外,Rust語言的應用非常廣泛,發展前景非常得好。下面看幾個國內外的實例深入了解一下Rust語言的應用。
首先我們先看一下Rust在國外公司的應用和開發者的使用。
(1)Timely Dataflow(實時數據流)
Timely Dataflow是clockworks.io 公司的開源產品。在分布式系統中對流式數據進行復雜的處理,比如多次迭代或者遞增計算是非常困難的。Timely dataflow 給出了一個完全基于時間的抽象,統一了流式計算和迭代計算。當你需要對流式數據并行處理且需要迭代控制的時候,可以使用 Timely Dataflow 。Rust代碼量大概有13000行,主力開發人員4人,社區貢獻者30多人。
(2)Krustlet(開源工具)
微軟 Deis Labs發布了Krustlet,它是使用 Rust 實現的一種Kubernetes kubelet。Krustlet是在 Kubernetes上運行 WebAssembly 工作負載的工具。它就像 Kubernetes集群中的節點一樣。Krustlet 通過在事件流上偵聽調度程序根據特定的 Kubernetes 容忍度為其分配的新 Pod 來充當 Kubelet。當用戶計劃具有特定節點容忍度的 Pod 時,Kubernetes API會將該工作負載計劃到 Krustlet 節點,然后 Krustlet節點將獲取模塊并運行該模塊。Rust代碼量一共21000多行,主力開發人員7人,社區貢獻者有32人。
(3)Ripgrep(終端文本搜索)
ripgrep 是一個以行為單位的搜索工具,它根據提供的pattern 遞歸地在指定的目錄里搜索。它是由 Rust 語言寫成,與其他同類工具比較,它的主要亮點就是速度快,非常的快。ripgrep 目前已經成為 Linux 下最快的文本搜索工具。它一共有35000行Rust代碼。
除了上述的三個例子外,國外還有很多用Rust語言編寫的開發工具和很多好的開源項目。在國內Rust的發展也是相當的好,接下來我們了解一下Rust在國內的應用現狀。
(1) 飛書APP
飛書軟件我們很多開發者都很了解,甚至一直在使用。字節跳動旗下的飛書在國內應該屬于最大的Rust開發團隊了,大約有開發者30-60人。飛書在客戶端跨平臺組件中使用了Rust,據說代碼量有55萬行代碼(包括測試和生成代碼)。
(2) TiKV
TiKV是一個開源的分布式事務數據庫,專注為下一代數據庫提供可靠、高質量、實用的存儲架構。目前,TiKV已經在知乎、美團、京東云等多家企業上線應用。TiKV項目包含Rust代碼大約30萬行(包括測試代碼)。TiKV是全球性開源項目,其中參與Rust項目的主力開發大約有20人。
(3) 華為
華為在2021年加入Rust基金會,旨在為Rust在全球推廣和發展做出貢獻。目前一些開源項目和內部試點項目使用了Rust,以及為Rust生態作出了貢獻。目前華為也正在為大規模使用Rust做準備。
除了上述的示例之外還有很多公司或者是項目團隊應用了Rust語言,可謂是發展前景非常的好。
六、 推薦的Rust書籍
為了大家更好地學習和了解Rust語言,推薦一些Rust相關書籍。
第一本就是《深入淺出Rust》,本書詳細介紹了Rust語言的基礎語法,穿插講解一些高級使用技巧,一步步加深對Rust語言的認識和了解。全是總共分為五部分,第一部分就是詳細的基礎知識介紹,基礎知識是非常重要的,要想學好一門語言,基礎知識必不可少。
第二部分內存安全,這可是Rust語言的“招牌”,也是本書的核心和重點。
第三部分是高級抽象,介紹Rust的抽象表達能力。它支持多種編程范式,以及較為強大的抽象表達能力。
第四部分是線程安全,介紹了并發模型,并行編程是提高效率的重要因素。
第五部分是實用設施也是文章的結尾部分,簡單介紹Rust語言的工程實用性。
第二本書是《Rust編程之道》。與深入淺出Rust有很大的區別,本書章節內容較多,總共分為了13章。本書適合有一些編程經驗的想要學習Rust的開發者或者是想深入學習Rust的進階者,不適合沒有編程基礎的小白。本書的特點是從設計哲學出發,探索Rust語言的內在一致性;從源碼分析入手,探索Rust地道的編程風格;從工程角度著手,探索Rust對健壯性的支持;從底層原理開始,探索Rust內存安全的本質。
七、 結語
Rust是一門現代化的語言,融合了多種語言特性,而且Rust語言可以應用的領域范圍非常廣泛。在學習Rust的過程中,你會發現自己編程能力的不足,改正掉這些不足就會不斷提升自我。卓越的編程語言,可以將優秀的設計、先進的思想、成功的經驗,自然而然地融人其中,使更多的使用者開闊眼界、拓展思路,受益無窮。雖然現在的Rust有些許不足,我相信在未來它會越來越好。
本文整理自華為云社區【內容共創】活動第12期。
查看活動詳情:https://bbs.huaweicloud.com/blogs/325315
相關任務詳情:任務42.Rust語言一般適合用來做什么?
C++ 開發者
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。