Rust 又發(fā)布新的 1.79.0 穩(wěn)定版本了!
在 2024 年 6 月 13 日,Rust 團(tuán)隊又發(fā)布 Rust 1.79.0 新版本了,一起來看看該版本到底發(fā)生了哪些變化吧。對于喜歡嘗新的伙伴,又可以體驗到更多的創(chuàng)新和改進(jìn)了。
老規(guī)則,如果你渴望嘗試最新版本的 Rust,只需通過 rustup 工具即可輕松升級。老規(guī)則,如果你渴望嘗試最新版本的 Rust,只需通過 rustup 工具即可輕松升級。
$ rustup update stable
新的 1.79.0 穩(wěn)定版中包含了哪些內(nèi)容呢?
盡管 Rust 1.79. 0 版本在規(guī)模上相對較小,但它仍然秉承了Rust 團(tuán)隊一貫的風(fēng)格呀,哈哈!即使是細(xì)微的更新也能匯聚成顯著的進(jìn)步。
內(nèi)聯(lián) const 表達(dá)式
在 Rust 1.79.0 版本中,內(nèi)聯(lián) const 表達(dá)式被穩(wěn)定化,內(nèi)聯(lián) const 表達(dá)式允許在表達(dá)式位置上使用 const 塊,而無需進(jìn)行額外的聲明。
這樣的常量代碼更加簡潔和可讀,尤其是在泛型上下文中,以前你可能需要先聲明一個 const 常量,然后再使用它。然而現(xiàn)在你就能直接在需要的地方使用 const 塊來創(chuàng)建常量值。
之前的寫法:
const EMPTY: Option<Vec<u8>> = None;
let foo = [EMPTY; 100];
現(xiàn)在可以寫成:
let foo = [const { None }; 100];
需要注意的是,這對于通用上下文也是如此,以前需要使用關(guān)聯(lián)常量的詳細(xì)特征聲明:
fn create_none_array<T, **const** N: usize>() -> [Option<T>; N] {
[**const** { None::<T> }; N]
}
這種改進(jìn)也適用于泛型上下文,以前需要使用關(guān)聯(lián)常量的詳細(xì)特征聲明,現(xiàn)在可以直接使用內(nèi)聯(lián) const 表達(dá)式,無需額外聲明,使得代碼更加簡潔性,還增強(qiáng)表達(dá)能力,易于閱讀。
關(guān)聯(lián)類型位置的 Bound
在 Rust 1.79 穩(wěn)定中了關(guān)聯(lián)項邊界語法,使得能夠?qū)⑦吔绶旁谄渌吔鐑?nèi)的關(guān)聯(lián)類型位置,即 T: Trait<Assoc: Bounds...>。這樣就避免了僅為了約束關(guān)聯(lián)類型而提供額外的顯式泛型類型的需要。該功能允許在一些以前不可能或?qū)κ褂檬┘恿祟~外的、不必要的限制的地方指定界限,譬如:
where 子句
在這個位置上,相當(dāng)于將邊界分成兩個(或多個)where 子句。譬如:
where T:Trait<Assoc: Bound>
相當(dāng)于:
where T: Trait, <T as Trait>::Assoc: Bound
更多的可以閱讀官網(wǎng)文檔獲取。
延長自動臨時壽命延長
Rust 1.79.0 穩(wěn)定版改進(jìn)了生命周期處理,使得 match 和 if 表達(dá)式中的臨時項自動獲得更長的生命周期。
let a = if true {
// 假設(shè)這是一個臨時值
let temp = create_temp_value();
&temp // 引用臨時值
} else {
// 引用另一個臨時值
&create_temp_value()
};
再來看 match 的構(gòu)造:
let a = match () {
_ => {
..;
&temp()
}
}
現(xiàn)在與之前的行為一致:
let a = {
..;
&temp() // lifetime is extended
};
此行為是向后兼容的,因為這些程序過去編譯失敗。
當(dāng)然還有了,還有一些穩(wěn)定API等等,更多建議多關(guān)注官網(wǎng)動態(tài),才能獲取一些實時性信息。