Rust 1.59.0釋出

banq發表於2022-02-25

Rust 團隊釋出了 Rust 的新版本 1.59.0。Rust 是一種程式語言,它使每個人都能夠構建可靠和高效的軟體。
 
內聯裝配
Rust 語言現在支援內聯彙編。這使得許多應用程式需要對其執行進行非常低階別的控制,或訪問專門的機器指令。
例如,在為 x86-64 目標編譯時,您現在可以編寫:

use std::arch::asm;

// Multiply x by 6 using shifts and adds
let mut x: u64 = 4;
unsafe {
    asm!(
        "mov {tmp}, {x}",
        "shl {tmp}, 1",
        "shl {x}, 2",
        "add {x}, {tmp}",
        x = inout(reg) x,
        tmp = out(reg) _,
    );
}
assert_eq!(x, 4 * 6);


asm!用於在和global_asm! 宏中命名暫存器的格式字串語法與 Rust格式字串中使用的相同,因此對於 Rust 程式設計師來說應該很熟悉。
內聯彙編可用的組合語言和指令因目標體系結構而異。今天,穩定的 Rust 編譯器支援以下架構上的內聯彙編:
  • x86 and x86-64
  • ARM
  • AArch64
  • RISC-V

 

解構分配
您現在可以使用元組、切片和結構模式作為賦值的左側。

let (a, b, c, d, e);

(a, b) = (1, 2);
<p class="indent">[c, .., d, _] = [1, 2, 3, 4, 5];
Struct { e, .. } = Struct { e: 5, f: 3 };

assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);


 

const 泛型預設值和交錯
泛型型別現在可以為其 const 泛型指定預設值。例如,您現在可以編寫以下內容:

struct ArrayStorage<T, const N: usize = 2> {
    arr: [T; N],
}

impl<T> ArrayStorage<T> {
    fn new(a: T, b: T) -> ArrayStorage<T> {
        ArrayStorage {
            arr: [a, b],
        }
    }
}


以前,型別引數必須位於所有 const 引數之前。該限制已放寬,您現在可以交錯使用它們。

fn cartesian_product<
    T, const N: usize,
    U, const M: usize,
    V, F
>(a: [T; N], b: [U; M], f: F) -> [[V; N]; M]
where
    F: FnMut(&T, &U) -> V
{
    // ...
}


 

未來的不相容警告
有時,Rust 編譯器中的錯誤會導致它接受不應該被接受的程式碼。現在,當未來版本的 Rust 拒絕依賴項時,Cargo 會向您顯示警告。
 

建立剝離的二進位制檔案
從您分發的二進位制檔案中去除不必要的資訊(如除錯資訊)通常很有用,使它們更小。
 

增量編譯預設關閉
1.59.0 版本預設禁用增量(除非透過環境變數明確要求:)

 

相關文章