Rust 1.42.0 Release: Slice-Vorlagen und bequemere Panikmeldungen

Das Rust-Team freut sich, die Veröffentlichung einer neuen Version 1.42.0 bekannt zu geben. Rust ist eine Programmiersprache, mit der jeder zuverlÀssige und effiziente Software erstellen kann.


Wenn Sie die vorherige Version von Rust mit Tools installiert haben rustup, mĂŒssen Sie zum Upgrade auf Version 1.42.0 nur den folgenden Befehl ausfĂŒhren:


rustup update stable

Wenn Sie es noch nicht installiert haben rustup, können Sie es auf der entsprechenden Seite unserer Website installieren und detaillierte Versionshinweise auf GitHub lesen.


Was ist in der stabilen Version 1.42.0 enthalten


Die Hauptinnovationen von Rust 1.42.0 sind bequemere Panikmeldungen im Falle eines Anrufs unwrap, Slice-Vorlagen, die fĂŒr veraltet erklĂ€rt werden Error::descriptionund vieles mehr. Siehe Release Notes fĂŒr weitere Informationen.


Panikmeldungen von Optionund enthalten Resultjetzt nĂŒtzliche Zeilennummern


In Rust 1.41.1 erzeugte ein Aufruf unwrap()eines Werts Option::Noneeine Fehlermeldung Àhnlich der folgenden:


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

In Ă€hnlicher Weise beziehen sich Zeilennummern in Panikmeldungen, die durch Anrufe generiert wurden unwrap_err, expectund expect_errwie die entsprechenden Methoden fĂŒr den Typ Resultauch auf Interna core.


In Rust 1.42.0 generieren alle diese acht Funktionen Panikmeldungen, die die Zeilennummern enthalten, von denen aus sie aufgerufen wurden. Neue BeitrĂ€ge sehen ungefĂ€hr so ​​aus:


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

Dies bedeutet, dass sich der fehlerhafte Aufruf unwrapin Zeile 2 der Datei befand 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