Version Rust 1.42.0: modèles de tranche et messages de panique plus pratiques

L'équipe Rust est heureuse d'annoncer la sortie d'une nouvelle version, 1.42.0. Rust est un langage de programmation qui permet à chacun de créer des logiciels fiables et efficaces.


Si vous avez installé la version précédente de Rust à l'aide d'outils rustup, pour mettre à niveau vers la version 1.42.0, il vous suffit d'exécuter la commande suivante:


rustup update stable

Si vous ne l'avez pas déjà installé rustup, vous pouvez l' installer à partir de la page correspondante de notre site Web, ainsi que voir les notes de version détaillées sur GitHub.


Ce qui est inclus dans la version stable 1.42.0


Les principales innovations de Rust 1.42.0 sont des messages de panique plus pratiques en cas d'appel unwrap, des modèles de tranche, des déclarations obsolètes Error::descriptionet bien plus encore. Voir les notes de version pour plus d'informations.


Messages de panique de Optionet Resultincluent maintenant des numéros de ligne utiles


Dans Rust 1.41.1, un appel unwrap()à une valeur a Option::Nonegénéré un message d'erreur semblable au suivant:


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

De même, les numéros de ligne dans les messages de panique générés par les appels unwrap_err, expectet expect_err, comme les méthodes correspondantes pour le type Result, également appelés internes core.


Dans Rust 1.42.0, toutes ces huit fonctions génèrent des messages de panique qui incluent les numéros de ligne d'où ils ont été appelés. Les nouveaux messages ressemblent à ceci:


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

Cela signifie que l'appel erroné unwrapétait sur la ligne 2 du fichier 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