大家好,我是風箏
最近 JetBrains 推出了一款針對于 Rust 的 IDE - RustRover。要知道,JetBrains 家是不養閑人的,不是大火的語言都不會專門開發一個 IDE 出來,頂多以一個插件的形式出現,讓你安裝在 IDEA 或 PyCharm 這些已有的 IDE 中湊合用。
RustRover 的出現也意味著 Rust 已經是一門大火的語言,其實連續很多年 Rust 都是年度語言排行榜的新貴了。
這不,前兩天前端 VueConf 會議上正式提出了 Vite 底層的esbuild 和 Rollup 將被取代,取代它們的正是用 Rust 重寫的。
要被取代的原因是因為性能問題,Vite 是 Vue3 的默認構建工具,用于 Vue3 項目的開發和構建,類似于 webpack。
Vue 團隊認為性能不夠快,還有一個原因可能是因為有一個競品叫做 Turbopack,Turbopack 的性能比 Vite 快了好幾倍,而Turbopack 就是用 Rust 寫的。
Rust 是誰
Rust 是一門系統級的編程語言, 由 Mozilla 開發,現在由 Rust 社區維護。最早是 Mozilla 的一個工程師業余時間設計的一套語言,沒想到無心插柳柳成蔭,發布之后有越來越多的人關注并喜歡它。
據說,Rust 最開始的設計目標就是 Better C++,更好的 C++。可以看到設計者是將它對標 C++的。
學過 C++的都知道,C++中最為困擾的部分就是內存管理,程序員要自己管理內存的分配和回收,一大堆指針搞的你暈頭轉向,安全隱患太多。
所以,Rust 最厲害的特性之一就是強大內存安全性。它通過引入所有權(ownership)、借用(borrowing)和生命周期(lifetimes)等概念,確保程序不會出現內存泄漏、空指針引用和數據競態等問題。這使得 Rust 代碼在編譯時就能夠捕獲潛在的內存錯誤,而無需運行時開銷。
這也是初學 Rust 的同學覺得它門檻高的原因。我們在寫 Java、Python 的時候,就算有bug,但是沒有明顯的語法錯誤,編譯都是能過的。別管怎么說,項目還是能跑起來的,項目一跑起來,成就感多少還是有一點的。
而 Rust 不一樣啊,你代碼要是有潛在的內存 bug,是不可能編譯過的,一編譯就提示錯誤,一編譯就提示錯誤。你可能寫了大半天兒了,項目還沒啟動成功,你說氣人不。這也導致很多人還沒入門就放棄了。
就拿下面這段代碼來說,雖然我們可能壓根還不知道 Rust 的語法,但是一眼看過去也能理解,很簡單的邏輯對吧,如果換成 Java 代碼,跑的痛苦的很。
fn?main()?{ ????let?s1?=?String::from("hello"); ????let?s2?=?s1; ????println!("{},?world!",?s1); }
但是,它就是編譯不過。當你編譯的時候會提示你:
?let?s1?=?String::from("hello"); ??|?????????--?move?occurs?because?`s1`?has?type?`String`,?which?does?not?implement?the?`Copy`?trait 3?|?????let?s2?=?s1; ??|??????????????--?value?moved?here 4?|?????println!("{},?world!",?s1); ??|????????????????????????????^^?value?borrowed?here?after?move
這是Rust中的所有權的概念,當 let s1 這行代碼執行后,后面就不再有 s1 的所有權了。
要改成下面這樣,不能直接使用s1,但可以用 s1 的副本。
fn?main()?{ ????let?s1?=?String::from("hello"); ????let?s2?=?s1.clone(); ????println!("{},?world!",?s1); }
當你開始學習 Rust 的時候,會顛覆你對編程語言的認知,可能稍有一些夸張,但是寫 Rust 和 寫其他語言體驗完全不一樣。
除了強大內存安全性這個特點外,Rust 還有一些非常明顯的特點。
并發支持
討論一門開發語言的時候,不可避免的一定要涉及到并發。
一方面就是我們開發的時候,實現并發邏輯會不會太復雜,因為并發屬于編程中的高級用法和難點,拿 Java 來說,很多人寫了好幾年 Java,也不一定能寫好并發邏輯。一來是因為并發本身就比較抽象,二來是 Java 中關于并發、多線程的部分確實有點開發不友好了,已經被詬病多年了。
而 Rust 中的并發部分對開發人員來說就比較友好了,那就意味著使用簡單,類似于 Go 語言的并發,用起來簡單,用的人自然就多了。當然除了簡單之外,本身的并發性能也非常好。
高性能
Rust 本身對標的就是 C和C++,C和C++的代名詞就是性能好啊。語言越是接近操作系統,性能就越好,當然相對來說開發難度也就更大了。
性能好很大程度上是因為其良好的設計。
內存安全性:Rust 引入了嚴格的內存安全性機制,包括所有權、借用和生命周期等,以防止空指針引用、數據競爭和內存泄漏等問題。這些機制在編譯時檢查,可以在運行時幾乎沒有額外開銷。
并發編程模型:Rust 提供了輕量級的線程和異步編程的支持,使得開發人員可以編寫高效的并發代碼。Rust 的并發模型要求顯式同步,以避免競爭條件,但這也使得并發代碼更加可控且安全。
無運行時開銷:Rust 設計時考慮到了避免運行時開銷,使得生成的機器碼非常緊湊且高效。Rust 不依賴于虛擬機,沒有垃圾回收,也沒有不必要的運行時開銷。
高級優化:Rust 編譯器擁有強大的優化功能,能夠生成高度優化的機器碼。這些優化可以針對特定目標架構進行定制,以獲得最佳性能。
Rust 語言本身是用 C 和 C++寫的,加上前面的那些優化,性能自然是好的。
跨平臺
Rust 編譯器將 Rust 代碼編譯成中間表示語言,這個中間表示語言是與具體硬件和操作系統無關的。這種中間表示語言允許 Rust 在不同的目標平臺上運行。
還有一個特點,那就是 Rust 更新非常快,目前 Rust 已經到了 1.73 的版本。所以有人說,不要學 Rust,因為 Rust 更新太快了。
適用場景
對安全性和性能有要求的
Rust 翻譯成中文是銹,所以如果什么工具改成用 Rust 改寫了,稱作銹化。看到有人調侃的銹化定律。
銹化第一定律:一切能銹化的工具都終將銹化銹化第二定律:若工具銹化則本身不需要銹化銹化第三定律:都希望別人銹化而自己不銹化
文章開頭說到 Vite 要用 Rust 開發的工具替換 esbuild 和 Rollup ,就是因為性能問題。
微軟都在用 Rust 重寫一部分 windows 組件,除了看重 Rust 性能外,還有安全方面的因素。
Rust 運行時的開銷極小,性能好,加上它支持交叉編譯,方便移植,成為越來越多嵌入式開發的首選語言。
區塊鏈的核心就是安全問題,沒有安全保障,一切都是虛無。Rust 本身對程序安全的控制可以避免絕大多數的內存安全問題,從而減少很多安全漏洞。
從哪兒學 Rust
官網
https://www.rust-lang.org/zh-CN/learn,Rust 的官網本身就有很詳細的教程和學習資料,內容非常豐富。
https://google.github.io/comprehensive-rust/zh-CN/index.html 這是 Google Android 團隊寫的 Rust 教程,這個教程的目標是3天學完 Rust,規劃好了學習路線,每一天的上午、下午學習哪些部分,跟著學就好了。
還有一個,這里 https://this-week-in-rust.org/ 可以看到 Rust 每周的最新變更情況,包括語言本身的變化和更新,以及一些重大新聞等等,看過去發現,Rust 確實更新快啊。
最后
在招聘網站上搜了一下,Rust 的職位已經有很多了,很多大廠小廠都有 Rust 崗位。
不是說一定學 Rust 就是為了找工作,但是越來越多的工具和產品選擇用 Rust,足以說明 Rust 是一門優秀的語言。
而且是和其他語言的開發體驗確實不太一樣,最終用不用它不要緊,體驗一下也會有收獲的。
編輯:黃飛
評論
查看更多