Planificación de un lanzamiento de Rust 2021

Nos complace anunciar la tercera edición del lenguaje Rust, Rust 2021, que saldrá en octubre. Rust 2021 contiene algunos pequeños cambios que, sin embargo, mejorarán significativamente la usabilidad de Rust.







¿Qué es el Comité Editorial?



El lanzamiento de Rust 1.0 estableció la "estabilidad sin estancamiento" como una regla básica de Rust. Desde la versión 1.0, la regla ha sido que, al lanzar una función en una versión estable, nos comprometemos a admitirla en todas las versiones futuras.







Sin embargo, hay ocasiones en las que la capacidad de realizar pequeños cambios en el idioma puede resultar útil, incluso si no tienen compatibilidad con versiones anteriores. El ejemplo más obvio es la introducción de una nueva palabra clave que invalida las variables con el mismo nombre. Por ejemplo, en la primera versión de Rust, no había palabras clave async



y await



. Cambiar repentinamente estas palabras por palabras clave en versiones posteriores provocaría, por ejemplo, que el código let async = 1;



dejara de funcionar.







Las revisiones son el mecanismo que utilizamos para abordar este problema. Cuando queremos lanzar una función sin compatibilidad con versiones anteriores, la incluimos en la nueva edición de Rust. Las revisiones son opcionales y deben escribirse explícitamente, por lo que los paquetes existentes no ven estos cambios hasta que se actualizan explícitamente a la nueva versión. Esto significa que incluso la última versión de Rust no se considerará async



una palabra clave a menos que se seleccione 2018 o una versión posterior. Esta elección se realiza para cada paquete Cargo.toml



. Los paquetes nuevos creados cargo new



siempre están configurados para usar la última versión estable.







Los editoriales no comparten el ecosistema



: . , .







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