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