Planejando uma versão Rust 2021

Temos o prazer de anunciar a terceira edição da linguagem Rust, Rust 2021, que será lançada em outubro. O Rust 2021 contém algumas pequenas alterações que, no entanto, melhorarão significativamente a usabilidade do Rust.







O que é o Conselho Editorial?



O lançamento do Rust 1.0 estabeleceu "estabilidade sem estagnação" como regra básica do Rust. Desde a versão 1.0, a regra é que, ao lançar um recurso em uma versão estável, nos comprometemos a oferecer suporte em todas as versões futuras.







No entanto, há momentos em que a capacidade de fazer pequenas alterações no idioma pode ser útil - mesmo se não houver compatibilidade com versões anteriores. O exemplo mais óbvio é a introdução de uma nova palavra-chave que invalida variáveis ​​com o mesmo nome. Por exemplo, na primeira versão do Rust, não havia palavras async



- chave e await



. Mudar repentinamente essas palavras para palavras-chave em versões posteriores faria com que, por exemplo, o código let async = 1;



parasse de funcionar.







As revisões são o mecanismo que usamos para resolver esse problema. Quando queremos lançar um recurso sem compatibilidade com versões anteriores, o tornamos parte da nova edição do Rust. As revisões são opcionais e devem ser escritas explicitamente, de forma que os pacotes existentes não vejam essas mudanças até que sejam explicitamente atualizados para a nova versão. Isso significa que mesmo a versão mais recente do Rust ainda não será considerada async



uma palavra-chave, a menos que 2018 ou posterior seja selecionado. Essa escolha é feita para cada pacote Cargo.toml



. Novos pacotes criados cargo new



são sempre configurados para usar a versão estável mais recente.







Editoriais não compartilham o ecossistema



: . , .







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