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.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. .
"" 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!
. , .
, Nightly, -Zunstable-options --edition=2021
.
Rust - . , .
OpenCollective.
fan-tom, blandger, Belanchuk, TelegaOvoshey andreevlex.