Wir freuen uns, die dritte Ausgabe der Rust-Sprache, Rust 2021, bekannt zu geben, die im Oktober erscheinen soll. Rust 2021 enthält einige kleine Änderungen, die die Benutzerfreundlichkeit von Rust dennoch erheblich verbessern.
Was ist die Redaktion?
Mit der Version Rust 1.0 wurde "Stabilität ohne Stagnation" als Grundregel für Rust festgelegt. Seit der Version 1.0 gilt die Regel, dass wir uns durch die Veröffentlichung einer Funktion in einer stabilen Version dazu verpflichten, diese in allen zukünftigen Versionen zu unterstützen.
Es gibt jedoch Situationen, in denen die Möglichkeit, kleine Änderungen an der Sprache vorzunehmen, nützlich sein kann - auch wenn sie nicht abwärtskompatibel sind. Das offensichtlichste Beispiel ist die Einführung eines neuen Schlüsselworts, das gleichnamige Variablen ungültig macht. In der ersten Version von Rust gab es beispielsweise keine Schlüsselwörter async
und await
. Das plötzliche Ändern dieser Wörter in Schlüsselwörter in späteren Versionen würde beispielsweise dazu führen, dass der Code nicht let async = 1;
mehr funktioniert.
Revisionen sind der Mechanismus, mit dem wir dieses Problem beheben. Wenn wir eine Funktion ohne Abwärtskompatibilität veröffentlichen möchten, machen wir sie Teil der neuen Rust- Edition . Revisionen sind optional und müssen explizit geschrieben werden, sodass vorhandene Pakete diese Änderungen erst sehen, wenn sie explizit auf die neue Version aktualisiert werden. Dies bedeutet, dass selbst die neueste Version von Rust nur dann als async
Schlüsselwort betrachtet wird, wenn 2018 oder höher ausgewählt ist. Diese Wahl wird für jedes Paket getroffen Cargo.toml
. Neu erstellte Pakete verwenden cargo new
immer die neueste stabile Version.
Editorials teilen nicht das Ökosystem
: . , .
, . , , "". 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.