Rilis Rust 1.42.0: template slice dan pesan panik yang lebih nyaman

Tim Rust senang mengumumkan rilis versi baru, 1.42.0. Rust adalah bahasa pemrograman yang memungkinkan semua orang membuat perangkat lunak yang andal dan efisien.


Jika Anda menginstal versi Rust menggunakan alat sebelumnya rustup, maka untuk meningkatkan ke versi 1.42.0 Anda hanya perlu menjalankan perintah berikut:


rustup update stable

Jika Anda belum menginstalnya rustup, Anda dapat menginstalnya dari halaman yang sesuai di situs web kami, serta melihat catatan rilis terperinci di GitHub.


Apa yang termasuk dalam versi stabil 1.42.0


Inovasi utama dari Rust 1.42.0 adalah pesan panik yang lebih nyaman jika ada panggilan unwrap, template slice, menyatakan usang Error::descriptiondan banyak lagi. Lihat catatan rilis untuk informasi lebih lanjut.


Pesan panik dari Optiondan Resultsekarang termasuk nomor baris yang berguna


Dalam Karat 1.41.1, panggilan unwrap()ke nilai Option::Nonemenghasilkan pesan kesalahan yang mirip dengan yang berikut:


thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /.../src/libcore/macros/mod.rs:15:40

Demikian pula, nomor baris dalam pesan panik yang dihasilkan oleh panggilan unwrap_err, expectdan expect_err, seperti metode yang sesuai untuk jenis ini Result, juga merujuk ke internal core.


Di Rust 1.42.0, semua delapan fungsi ini menghasilkan pesan panik yang menyertakan nomor baris dari tempat mereka dipanggil. Posting baru terlihat seperti ini:


thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:2:5

Ini berarti bahwa panggilan yang salah unwrapada di jalur 2 dalam file src/main.rs.


#[track_caller]. Rust, , .



Rust 1.26 " ", . :


fn foo(words: &[&str]) {
    match words {
        [] => println!("empty slice!"),
        [one] => println!("one element: {:?}", one),
        [one, two] => println!("two elements: {:?} {:?}", one, two),
        _ => println!("I'm not sure how many elements!"),
    }
}

, . , , .


Rust 1.42 :


fn foo(words: &[&str]) {
    match words {
        ["Hello", "World", "!", ..] => println!("Hello World!"),
        ["Foo", "Bar", ..] => println!("Baz"),
        rest => println!("{:?}", rest),
    }
}

.. " " (rest pattern), . , :


fn foo(words: &[&str]) {
    match words {
        //  ,    ,    "!".
        [.., "!"] => println!("!!!"),

        // `start` -     ,  ,    "z".
        [start @ .., "z"] => println!("starts with: {:?}", start),

        // `end` -     ,  ,    "a".
        ["a", end @ ..] => println!("ends with: {:?}", end),

        rest => println!("{:?}", rest),
    }
}

, Inside Rust , ! .


matches!


, matches!, , true, . :


//   match:
match self.partial_cmp(other) {
    Some(Less) => true,
    _ => false,
}

//   `matches!`:
matches!(self.partial_cmp(other), Some(Less))

| if:


let foo = 'f';
assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

let bar = Some(4);
assert!(matches!(bar, Some(x) if x > 2));

use proc_macro::TokenStream;


Rust 2018 extern crate. - , , , - extern crate proc_macro;.


, Cargo, 2018, ; use . , use proc_macro::TokenStream;, , extern crate proc_macro; . , .




API




Rust 1.42.0: Rust Cargo.



: 32- Apple 3.


Error::description


. Error::description . :


fn description(&self) -> &str

description &str, , . Error ; , , , : String. , Rust , Display/Debug, .


API Rust 1.0. : Rust 1.27, " ". , . , Error. , , Error. , description , — , .


32- Apple


Apple 32- , . 3. , .


1.42.0


, Rust 1.42.0. , !



Rust - .


andreevlex, funkill, Hirrolot nlinker.


All Articles