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::description
y mucho más. Consulte las notas de la versión para obtener más información.
Mensajes de pánico de Option
y Result
ahora incluyen números de línea útiles
En Rust 1.41.1, una llamada unwrap()
a un valor Option::None
generó 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
, expect
y 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 unwrap
estaba 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"] => println!("starts with: {:?}", start),
["a", end @ ..] => println!("ends with: {:?}", end),
rest => println!("{:?}", rest),
}
}
, Inside Rust , ! .
, matches!
, , true
, . :
match self.partial_cmp(other) {
Some(Less) => true,
_ => false,
}
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
, — , .
Apple 32- , . 3. , .
1.42.0
, Rust 1.42.0. , !
Rust - .
andreevlex, funkill, Hirrolot nlinker.