Versión Rust 1.42.0: plantillas de corte y mensajes de pánico más convenientes

El equipo de Rust se complace en anunciar el lanzamiento de una nueva versión, 1.42.0. Rust es un lenguaje de programación que permite a todos crear software confiable y eficiente.


Si instaló la versión anterior de Rust utilizando herramientas rustup, para actualizar a la versión 1.42.0 solo necesita ejecutar el siguiente comando:


rustup update stable

Si aún no lo ha instalado rustup, puede instalarlo desde la página correspondiente de nuestro sitio web, así como ver las notas detalladas de la versión en GitHub.


Lo que se incluye en la versión estable 1.42.0


Las principales innovaciones de Rust 1.42.0 son mensajes de pánico más convenientes en caso de una llamada unwrap, plantillas de corte, declaración obsoleta Error::descriptiony mucho más. Consulte las notas de la versión para obtener más información.


Mensajes de pánico de Optiony Resultahora incluyen números de línea útiles


En Rust 1.41.1, una llamada unwrap()a un valor Option::Nonegeneró un mensaje de error similar al siguiente:


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

Del mismo modo, los números de línea en los mensajes de pánico generados por las llamadas unwrap_err, expecty expect_err, como los métodos correspondientes para el tipo Result, también denominados internos core.


En Rust 1.42.0, todas estas ocho funciones generan mensajes de pánico que incluyen los números de línea desde donde fueron llamadas. Las nuevas publicaciones se parecen a esto:


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

Esto significa que la llamada errónea unwrapestaba en la línea 2 del archivo 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