Rust 又發(fā)布新的 1.81.0 版本了!速度真快
在 2024 年 9 月 5 日,Rust 團(tuán)隊(duì)又發(fā)布 Rust 1.81.0 新版本了,發(fā)布速度扛扛的,該版本都有哪些變化呢。
對(duì)于喜歡嘗新的伙伴,可以體驗(yàn)到更多的創(chuàng)新和改進(jìn)了。
老規(guī)則,如果你渴望嘗試最新版本的 Rust,只需通過(guò) rustup 工具即可輕松升級(jí)。
rustup update stable
新的 1.81.0 穩(wěn)定版包含哪些內(nèi)容呢!
core::error::Error
在 1.81.0 版本中,穩(wěn)定了 Error 中的特征 core ,現(xiàn)在允許在庫(kù)中使用該特征 #![no_std],這意味著即使在不使用標(biāo)準(zhǔn)庫(kù)的情況下,開發(fā)者也可以使用標(biāo)準(zhǔn)的錯(cuò)誤處理機(jī)制。
例如:
use core::fmt;
#[derive(Debug)]
pub struct SimpleError;
impl fmt::Display for SimpleError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "A simple error occurred")
}
}
impl core::error::Error for SimpleError {}
fn divide(a: i32, b: i32) -> Result<i32, SimpleError> {
if b == 0 {
Err(SimpleError)
} else {
Ok(a / b)
}
}
fn main() {
match divide(10, 2) {
Ok(result) => println!("10 / 2 = {}", result),
Err(_) => println!("Error: division by zero"),
}
match divide(10, 0) {
Ok(result) => println!("10 / 0 = {}", result),
Err(e) => println!("Error: {}", e),
}
}
新的排序?qū)崿F(xiàn)
在 Rust 1.81.0 中,標(biāo)準(zhǔn)庫(kù)中的排序?qū)崿F(xiàn)進(jìn)行了更新,主要是以提高運(yùn)行時(shí)性能和編譯時(shí)間,此外,該新的排序算法還會(huì)檢測(cè)無(wú)效的排序?qū)崿F(xiàn)并引發(fā)的Panic,而不是返回隨機(jī)排序的結(jié)果。
也就是實(shí)現(xiàn)了一個(gè)不符合排序規(guī)則的自定義排序(如違反 PartialOrd 或 Ord 的要求),Rust 不會(huì)返回一個(gè)錯(cuò)誤的排序結(jié)果,而是通過(guò)觸發(fā) Panic 來(lái)提醒你修復(fù)排序邏輯,提高了代碼的健壯性。
extern "C" 函數(shù)中未捕獲的 Panic 被中止
Rust 與 C 互操作中,在之前的 Rust 版本中,如果在 extern "C" 函數(shù)中發(fā)生了 panic,可能會(huì)嘗試進(jìn)行堆棧展開(stack unwinding),這在 C 語(yǔ)言環(huán)境下是不安全的。
然后,到了 Rust 1.81.0 版本,如果你未捕獲的 panic 發(fā)生,程序會(huì)直接中止,防止?jié)撛诘牟话踩袨?。要處理這種堆棧展開的情況,提供了 "C-unwind" ABI,它允許在安全處理 panic 時(shí)跨越 Rust 和 C 的邊界,這樣就能解決長(zhǎng)期存在的健全性問(wèn)題。