Merencanakan rilis Rust 2021

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 + 1



a



.







, . , || 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. .







  • bare-trait-objects



    dyn



    - Rust 2021.
  • ellipsis-inclusive-range-patterns



    ...



    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!










. , .







"Inside Rust".







, Nightly, -Zunstable-options --edition=2021



.












Rust - . , .

OpenCollective.







fan-tom, blandger, Belanchuk, TelegaOvoshey andreevlex.








All Articles