Nos complace anunciar la tercera edición del lenguaje Rust, Rust 2021, que saldrá en octubre. Rust 2021 contiene algunos pequeños cambios que, sin embargo, mejorarán significativamente la usabilidad de Rust.
¿Qué es el Comité Editorial?
El lanzamiento de Rust 1.0 estableció la "estabilidad sin estancamiento" como una regla básica de Rust. Desde la versión 1.0, la regla ha sido que, al lanzar una función en una versión estable, nos comprometemos a admitirla en todas las versiones futuras.
Sin embargo, hay ocasiones en las que la capacidad de realizar pequeños cambios en el idioma puede resultar útil, incluso si no tienen compatibilidad con versiones anteriores. El ejemplo más obvio es la introducción de una nueva palabra clave que invalida las variables con el mismo nombre. Por ejemplo, en la primera versión de Rust, no había palabras clave async
y await
. Cambiar repentinamente estas palabras por palabras clave en versiones posteriores provocaría, por ejemplo, que el código let async = 1;
dejara de funcionar.
Las revisiones son el mecanismo que utilizamos para abordar este problema. Cuando queremos lanzar una función sin compatibilidad con versiones anteriores, la incluimos en la nueva edición de Rust. Las revisiones son opcionales y deben escribirse explícitamente, por lo que los paquetes existentes no ven estos cambios hasta que se actualizan explícitamente a la nueva versión. Esto significa que incluso la última versión de Rust no se considerará async
una palabra clave a menos que se seleccione 2018 o una versión posterior. Esta elección se realiza para cada paquete Cargo.toml
. Los paquetes nuevos creados cargo new
siempre están configurados para usar la última versión estable.
Los editoriales no comparten el ecosistema
: . , .
, . , , "". Rust, , .
— . , . , . , Rust 2018 , async
, : r#async
.
: . , .
, . , , . , , . , , , .
Rust 2021?
Rust 2021 , . . , . -, () Rust. -, , , .
— , , . , Option
, Vec
, drop
Clone
.
Rust , , . , - . , example
, pub struct Option;
, use example::*;
Option
example
.
. x.try_into()
MyTryInto
, TryInto
std
, . TryInto
— .
Rust 2021 . , :
Cargo
Rust 1.51.0, Cargo resolver = "2"
Cargo.toml
.
Rust 2021 . edition = "2021"
Cargo.toml
resolver = "2"
.
, . Rust 1.51.
IntoIterator
Rust 1.53 IntoIterator
. , &[1, 2, 3]
&mut [1, 2, 3]
, [1, 2, 3]
.
for &e in &[1, 2, 3] {} // Ok :)
for e in [1, 2, 3] {} // :(
, , . . array.into_iter()
, (&array).into_iter()
- . .
( ) "" . .
" IntoIterator
Rust 2021". : , .
, Rust 1.53.0. , Rust 2021. Rust 2015 2018 - array.into_iter()
(&array).into_iter()
, . .into_iter()
, for e in [1, 2, 3]
, iter.zip([1, 2, 3])
. .
, , , . , .
, . , || a.x + 1
a
a.x
. . () , , , .
let a = SomeStruct::new();
drop(a.x); //
println!("{}", a.y); // :
let c = || println!("{}", a.y); // : `a`
c();
Rust 2021, , . Rust 2021.
, , . — . , . let _ = &a;
, , .
panic!()
— Rust. , — - .
panic!("{}", 1); // , "1"
panic!("{}"); // , "{}"
panic!()
, . .
let a = "{";
println!(a); // :
panic!(a); // : panic
( , panic!(123)
, , , ).
. println!("hello {name}")
println!("hello {}", name)
. panic!("hello {name}")
, panic!()
.
, Rust 2021 — panic!()
. panic!()
. — println!()
— . panic!()
, panic_any()
- .
, core::panic!()
std::panic!()
Rust 2021. , #![no_std]
.
, : prefix#identifier
, prefix"string"
, prefix'c'
prefix#123
, prefix
( , — , b'...'
r"..."
).
, hello"world"
, : hello
"world"
. () — : hello "world"
.
, RFC . , — — .
, :
f""
. ,f"hello {name}"
format_args!()
.c""
z""
- .k#keyword
, , . ,async
2015,k#async
2015, 2018,async
.
Rust 2021. .
"" macro_rules
Rust 1.53.0 |
, . Some(1 | 2)
Some(1) | Some(2)
. , .
macro_rules
. :pat
. :pat
|
, Rust 1.53 ( ) |
. , A | B
, matches!()
, - $($_:pat)|+
. , , :pat
Rust 1.53.0, |
.
Rust 2021. :pat
A | B
, - |
, :pat_param
. : .
?
, , 2021 Rust 1.56.0. Rust 1.56.0 - , 21 .
, Rust — , . , Rust, , . , , , .
, , . , Rust 2021!
. , .
, Nightly, -Zunstable-options --edition=2021
.
Rust - . , .
OpenCollective.
fan-tom, blandger, Belanchuk, TelegaOvoshey andreevlex.