博客 / 詳情

返回

Rust 1.89更新,有哪些值得關注的新功能

Rust 更新還挺頻繁的,連1.90都出來了,但作為新版本,1.90有啥坑還不知道,先讓子彈飛一會。那還是1.89更穩更值得關注。

寫代碼之前,別讓環境配置勸退你

在聊 1.89 的新特性之前,咱先聊個搭建環境的問題。

官方推薦的 rustup 是挺方便,但做項目光有它可不夠。電腦上是不是還得裝個 Nginx、PostgreSQL、Redis 之類的?這一套東西在自己電腦上攢起來,説實話挺折騰人的。一會兒端口占用了,一會兒版本不對了,各種環境變量配來配去,一下午時間可能就耗進去了,代碼一行沒寫,心態先崩了。

我推薦使用ServBay,這是開發環境的全家桶,想安裝啥,直接勾選就行。Rust、Nginx、數據庫、Redis,一鍵安裝好Rust,版本管理得明明白白。再也不用自己去網上搜教程、手動敲命令了。它把這些煩人的準備工作都幹了,我們就能踏踏實實地寫代碼。如果你也覺得配環境頭大,真心可以試試這個。

好了,一起來看看 Rust 1.89 有哪些新的關注點。

常量泛型:編譯器更懂你,代碼能少寫就少寫

Rust 常量泛型是個很實用的功能,尤其是在處理固定大小數組的時候,性能高,類型也安全。但之前寫起來總感覺有點囉嗦。

比如,想整個 1024 大小的字節數組,得這麼寫:

// ❌ 1.89 之前:總得寫兩遍,看着有點煩
let buffer: [u8; 1024] = [0; 1024];

1024 這個數,類型裏寫一遍,初始化值的時候還得再寫一遍。要是改個需求,把 1024 換成 2048,一不留神就可能只改了一處,這就埋雷了。

Rust 1.89 就加了個很貼心的改進,允許你用下劃線 _ 讓編譯器自己去看上下文,把數給填上。

// ✅ 1.89 之後:寫一遍就行,省心多了
let buffer: [u8; 1024] = [0; _]; // 編譯器一看類型是 1024,就懂了

這樣代碼更乾淨,出錯的概率也小了。這種改進雖然小,但每天都在用,日積月累下來,提升的幸福感是很實在的。

生命週期:編譯器報錯,終於不再像天書

説到生命週期,估計不少人都頭疼過。這東西是 Rust 安全的根本,但學習曲線也確實陡。最讓人崩潰的,就是編譯器報錯連看都看不懂。

還有就是一個函數的輸入和輸出,生命週期明明是綁定的,但代碼上卻看不出來。

// 以前這樣寫,編譯器不報錯,但人看着費勁
fn items(scores: &[u8]) -> std::slice::Iter<u8> {
   scores.iter()
}

這裏返回的 std::slice::Iter<u8> 實際上是帶生命週期的,而且它的命完全捏在輸入的 scores 手裏。但函數簽名卻壓根兒沒提這事。這就很坑了,尤其是在維護別人代碼的時候,很容易忽略掉這個隱藏的依賴關係。

現在,Rust 1.89 默認開啓了一個新的代碼檢查 mismatched_lifetime_syntaxes。它就是會在代碼裏劃重點。

再遇到上面那種代碼,編譯器會直接出個警告,告訴你這樣寫讓人看不明白,還貼心地建議該怎麼改。

// ✅ 1.89 的編譯器建議你這麼寫,關係一目瞭然
fn items(scores: &[u8]) -> std::slice::Iter<'_, u8> {
   scores.iter()
}

就多了個 '_,意思一下子就清楚了:返回的迭代器,它的生命週期跟輸入參數是綁定的。這個改動,核心思想就是“代碼是給人看的”。它讓 Rust 最難懂的部分變得更直觀,這比加十個新功能都有意義。

跨語言調用:讓 Rust 更方便出圈

Rust 的一大價值,就是能寫成高性能模塊,給其他語言(比如 Python、Node.js)調用。WebAssembly 的興起,更是讓 Rust 在前端和邊緣計算領域大放異彩。

Rust 1.89 在這方面也下了功夫,Rust更方便和其他語言交流。

  • WASM 的 C ABI 更標準: Rust 編譯的 WASM 模塊,跟 C/C++ 編譯的模塊之間交流更方便了。這樣一來,它們倆協作的時候,就不容易因為底層實現的差異出一些莫名其妙的問題。
  • FFI 能直接用 i128u128 了:以前,想跨語言傳一個 128 位的大整數(比如雪花算法生成的 ID),會很麻煩,得把它拆成兩個 64 位的數傳。現在不用了,可以直接在 extern "C" 函數裏用 u128,代碼寫起來順手多了,也省去了來回拼接的開銷。

這些改進,都是在為 Rust 走出自己的圈子鋪路,讓它能更好地融入到現有的各種技術體系裏去。

總結一下

總的來説,Rust 1.89 沒加什麼顛覆性的語法。它的所有更新,都是比較實用的。

它在打磨我們日常編碼的細節,讓代碼更簡潔;在打磨編譯器的提示,讓我們少走彎路;在打磨它的兼容性,讓它能勝任更多場景。這正是一個語言走向成熟的標誌。

Rust 的 1.89更新真的值得關注一波。

user avatar showmeai2 頭像 u_12959 頭像 fengliudehuaban_el8r3p 頭像 chaoqipengbodehuochai_eav70j 頭像
4 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.