Rust發佈1.32版本,跟蹤、模塊化、宏等方面均有改進

Rust 1.32提供了許多新的語言特性,用於改善開發者的程序調試體驗。此外,Rust現在默認使用系統分配器來分配內存,完成了模塊化系統的相關工作,這讓它變得更容易使用。

新的dbg!宏極大簡化了輸出調試信息任務。例如,如果要打印變量x的值,現在可以使用dbg!(x),而不是println!(“{:#?}”,x);。另外,dbg!還會自動打印出正在被打印的變量所在的文件和行號。dbg!是一個會返回打印值的函數,因此可以被用在表達式中,如下所示:

fn factorial(n: u32) -> u32 {
    if dbg!(n <= 1) {
        dbg!(1)
    } else {
        dbg!(n * factorial(n - 1))
    }
}

上面的代碼將輸出以下內容,這樣可以很容易地跟蹤遞歸的每個執行步驟:

[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = true
[src/main.rs:4] 1 = 1
[src/main.rs:5] n * factorial(n - 1) = 2
[src/main.rs:5] n * factorial(n - 1) = 6
[src/main.rs:5] n * factorial(n - 1) = 24
[src/main.rs:11] factorial(4) = 24

InfoQ之前已經報道了Rust 1.31引入的模塊改進,它使模塊的使用更加簡單,包括更好的模塊路徑解析,從而簡化了模塊語法。Rust 1.32更進一步,提供了統一路徑,它放寬了crate、self或super必須跟在use聲明之後的限制,從而支持非導入路徑。例子如下:

enum Color { Red, Green, Blue }

use Color::*;

Rust 1.32還通過引入literal模式匹配器和使用?改進了宏系統。例如,下面的兩個宏分別定義了一個規則,當提供的節點列表分別零次或多次匹配給定模式的字面量時,將選擇其中的一個規則進行展開:

macro_rules! m1 {
    ($lt:literal) => {};
}

macro_rules! m2 {
    ($(a)?) => {}
}

Rust 1.32默認使用系統分配器分配內存,並讓舊的默認分配器jemalloc成爲可選項。在Rust 1.28之前,唯一可用的分配器是jemalloc,它的起源可以追溯到Rust擁有自己的類erlang運行時時代。現在,這個運行時非常大,Rust團隊不斷地將它縮減到一種極簡的運行時,就像C語言和C++等語言的運行時那樣。jemalloc是舊運行時的最後殘餘,它仍然佔每個Rust二進制文件約300KB的空間。因此,先是在Rust 1.28中禁用,然後在Rust 1.32中作爲可選項,因爲它在某些情況下可以提供性能方面的優勢。

如果你對Rust的最新特性感興趣,請不要錯過官方發行說明

查看英文原文:

https://www.infoq.com/news/2019/01/rust-1.32-released

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章