Planification d'une version de Rust 2021

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