Planen einer Rust 2021-Version

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