Dengan senang hati kami mengumumkan edisi ketiga bahasa Rust, Rust 2021, yang akan keluar pada bulan Oktober. Rust 2021 berisi beberapa perubahan kecil yang akan secara signifikan meningkatkan kegunaan Rust.
Apa itu Dewan Editorial?
Rilis Rust 1.0 menetapkan "stabilitas tanpa stagnasi" sebagai aturan dasar Rust. Sejak rilis 1.0, aturannya adalah dengan merilis fitur dalam versi stabil, kami berkomitmen untuk mendukungnya di semua rilis mendatang.
Namun, ada kalanya kemampuan untuk membuat perubahan kecil pada bahasa dapat berguna - bahkan jika mereka tidak memiliki kompatibilitas ke belakang. Contoh paling jelas adalah pengenalan kata kunci baru yang membuat variabel dengan nama yang sama tidak valid. Misalnya, di versi pertama Rust, tidak ada kata kunci async
dan await
. Mendadak mengubah kata-kata ini menjadi kata kunci di versi yang lebih baru akan menyebabkan, misalnya, kode let async = 1;
berhenti berfungsi.
Revisi adalah mekanisme yang kami gunakan untuk mengatasi masalah ini. Saat kami ingin merilis fitur tanpa kompatibilitas ke belakang, kami menjadikannya bagian dari edisi Rust yang baru . Revisi bersifat opsional dan harus ditulis secara eksplisit, jadi paket yang ada tidak melihat perubahan ini sampai mereka secara eksplisit meningkatkan ke versi baru. Ini berarti bahwa Rust versi terbaru masih tidak akan dianggap async
sebagai kata kunci kecuali 2018 atau lebih baru dipilih. Pilihan ini dibuat untuk setiap paket Cargo.toml
. Paket baru yang dibuat cargo new
selalu disetel untuk menggunakan rilis stabil terbaru.
Editorial tidak berbagi ekosistem
: . , .
, . , , "". 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.