Rust團(tuán)隊(duì)剛剛發(fā)布了Rust 1.21,帶來更靈活的字面量語言特性、更穩(wěn)定的庫,并改進(jìn)了對工具的支持。
新的語言特性允許將保存在靜態(tài)內(nèi)存里的字面量提升為值,這樣就可以安全地傳遞引用。下面的代碼現(xiàn)在是合法的:
let x: &'static u32 = &5; thread::spawn(move || { println!("{}", x); });在上一個(gè)版本的Rust中,上面的代碼無法通過編譯,因?yàn)榫€程塊里的變量x引用了字面量5,5是保存在棧上的,在線程塊函數(shù)退出之后就會(huì)消失。為了擴(kuò)展字面量的生存周期,Rust 1.21的編譯器將上述的代碼轉(zhuǎn)譯成如下的形式:
static FIVE: i32 = 5; let x = &FIVE;編譯器現(xiàn)在可以在進(jìn)行轉(zhuǎn)譯的同時(shí)運(yùn)行LLVM,所以使用的內(nèi)存更少了。這樣有兩個(gè)好處:轉(zhuǎn)譯和LLVM可以同時(shí)進(jìn)行,而且主線程可以在這兩者之間切換。另外,rustup現(xiàn)在支持通過“rustup component add rls-preview”的方式來安裝Rust語言服務(wù)器(RLS)。根據(jù)Rust團(tuán)隊(duì)成員所述,這是安裝Rust工具的第一步,其中包含了RLS、Clippy和rustfmt,在Rust穩(wěn)定版中就可以正常運(yùn)行。
在庫穩(wěn)定性方面,現(xiàn)在可以使用Iterator::for_each代替for循環(huán),如:
// 舊代碼for i in 0..10 { println!("{}", i);}// 新代碼(0..10).for_each(|i| println!("{}", i));這樣可以很容易地把多個(gè)迭代器串聯(lián)在一起,如:
(0..100) .map(|x| x + 1) .filter(|x| x % 2 == 0) .for_each(|i| println!("{}", i));另外,Ord(有序集合)的max和min函數(shù)現(xiàn)在很穩(wěn)定了。Rc
可以通過運(yùn)行rustup update stable獲取最新的Rust,更多細(xì)節(jié)可以參考Rust 1.21發(fā)布說明。
查看英文原文:Rust 1.21 Improves Language Syntax and Tooling