Nous sommes heureux d'annoncer la troisième édition du langage Rust, Rust 2021, qui devrait sortir en octobre. Rust 2021 contient quelques petits changements qui amélioreront néanmoins considérablement la convivialité de Rust.
Qu'est-ce que le comité de rédaction?
La version Rust 1.0 a établi la "stabilité sans stagnation" comme règle de base de Rust. Depuis la version 1.0, la règle est qu'en publiant une fonctionnalité dans une version stable, nous nous engageons à la supporter dans toutes les versions futures.
Cependant, il y a des moments où la possibilité d'apporter de petites modifications à la langue peut être utile, même si elles n'ont pas de compatibilité descendante. L'exemple le plus évident est l'introduction d'un nouveau mot-clé qui invalide les variables du même nom. Par exemple, dans la première version de Rust, il n'y avait pas de mots clés async
et await
. Changer soudainement ces mots en mots-clés dans les versions ultérieures entraînerait, par exemple, l' let async = 1;
arrêt du code .
Les révisions sont le mécanisme que nous utilisons pour résoudre ce problème. Lorsque nous voulons publier une fonctionnalité sans rétrocompatibilité, nous en faisons une partie intégrante de la nouvelle édition de Rust. Les révisions sont facultatives et doivent être écrites explicitement, de sorte que les packages existants ne voient pas ces modifications tant qu'ils ne sont pas explicitement mis à niveau vers la nouvelle version. Cela signifie que même la dernière version de Rust ne sera toujours pas considérée comme async
un mot-clé à moins que 2018 ou une version ultérieure ne soit sélectionnée. Ce choix est fait pour chaque package Cargo.toml
. Les nouveaux packages créés cargo new
sont toujours configurés pour utiliser la dernière version stable.
Les éditoriaux ne partagent pas l'écosystème
: . , .
, . , , "". 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.