Apresentamos a você uma tradução da publicação sobre a nova versão da amada linguagem de programação Rust .
1. Introdução
A equipe de desenvolvimento do Rust tem o prazer de anunciar o lançamento de uma nova versão, 1.37.0. Rust é uma linguagem de programação que permite a todos criar software confiável e eficiente.
Se você instalou a versão anterior do Rust usando rustup, para atualizar para a versão 1.37.0, basta executar o seguinte comando:
$ rustup update stable 
Se você ainda não instalou o rustup , pode instalá-lo na página correspondente do nosso site, bem como ver notas de versão detalhadas no GitHub.
O que está incluído na versão estável?
As principais inovações do Rust 1.37.0 incluem links para opções de enum através de aliases de tipo, um cargo vendor , constantes sem nome, constantes de otimização guiada por perfil, a chave de default-run para projetos de carga e #[repr(align(N))] para enumerações. Veja as notas de versão detalhadas para mais informações.
Links para opções de enum por meio de aliases de tipo
A partir do Rust 1.37.0, as opções de enum referências são possíveis por meio de aliases de tipo:
 type ByteOption = Option<u8>; fn increment_or_zero(x: ByteOption) -> u8 { match x { ByteOption::Some(y) => y + 1, ByteOption::None => 0, } } 
Nos blocos impl , Self atua como um alias do tipo, portanto, no Rust 1.37.0, tornou-se possível consultar as opções de enumeração usando a sintaxe Self::Variant :
 impl Coin { fn value_in_cents(&self) -> u8 { match self { Self::Penny => 1, Self::Nickel => 5, Self::Dime => 10, Self::Quarter => 25, } } } 
Mais especificamente, agora o Rust permite que você consulte as opções de enumeração via "resolução relativa ao tipo" , <MyType<..>>::Variant . Uma descrição mais detalhada está disponível no relatório de estabilização .
Suporte de carga nativa para dependências do fornecedor
Após vários anos de existência como um pacote separado , a equipe de cargo vendor agora está integrada ao Cargo. Este comando extrai todas as dependências do seu projeto no diretório vendor/ e mostra o fragmento de configuração necessário para usar o código do fornecedor durante a montagem.
cargo vendor já cargo vendor usado em projetos reais: o compilador rustc usa para enviar todas as suas dependências para liberar tarballs, e projetos com repositórios mono usam-no para corrigir o código de dependência no controle de versão.
Usando constantes sem nome em macros
Agora você pode criar uma (unnamed) (const ) substituindo seu identificador por sublinhado ( _ ). Por exemplo, no compilador rustc encontramos este código:
 
Preste atenção ao segundo static_assert_size!(..) : graças ao uso de constantes sem nome, foi possível evitar conflitos de nome ao declarar novos elementos. Antes, você precisaria escrever static_assert_size!(MY_DUMMY_IDENTIFIER, usize, 8); . Com a introdução de constantes sem nome, torna-se mais fácil criar macros declarativas e processuais ergonômicas e reutilizáveis para fins de análise estática.
Otimização guiada por perfil
A otimização guiada por perfil (PGO) agora está disponível no compilador rustc , que pode ser ativado por meio dos sinalizadores -C profile-generate e -C profile-use compilador.
A Otimização Guiada por Perfil é uma técnica de otimização de software de compilador que analisa as execuções de teste em vez do código fonte. Ele funciona compilando um programa para otimização em dois estágios:
- Primeiro, o programa é criado usando as ferramentas incorporadas no compilador. Isso é feito passando o sinalizador rustc-C profile-generate. Em seguida, o programa da ferramenta deve ser executado nas amostras de dados e, posteriormente, gravará os dados de criação de perfil no arquivo.
- O programa é rustcnovamente , desta vez passando os dados de criação de perfil coletados de volta pararustcusando o sinalizador-C profile-use. Este assembly usará os dados coletados para permitir que o compilador tome melhores decisões sobre posicionamento, incorporação de código e outras otimizações.
Para obter mais informações sobre otimização guiada por perfil, consulte o capítulo correspondente no livro do compilador rustc .
Selecionando um arquivo executável em projetos Cargo
cargo run é uma ferramenta muito conveniente para testar rapidamente aplicativos de console. Quando vários arquivos executáveis estão presentes em um pacote, você deve declarar explicitamente o nome do arquivo executável que deseja executar usando o sinalizador --bin . Isso faz com que a cargo run não seja tão ergonômica quanto gostaríamos, especialmente quando um executável específico é chamado com mais frequência do que outros.
O Rust 1.37.0 resolve esse problema adicionando uma nova chave de default-run ao Cargo.toml (seção [package] ). Portanto, se o sinalizador --bin não for --bin , o Cargo iniciará o arquivo binário declarado na configuração.
#[repr(align(N))] para enumerações
A partir do Rust 1.37.0, o atributo #[repr(align(N))] pode ser usado para determinar o alinhamento de enumerações na memória (anteriormente esse atributo era permitido apenas para estruturas ( struct ) e uniões ( union )). Por exemplo, uma enumeração Align16 terá, como esperado, um alinhamento de 16 bytes, enquanto o alinhamento natural sem #[repr(align(16))] será 4 :
 #[repr(align(16))] enum Align16 { Foo { foo: u32 }, Bar { bar: u32 }, } 
A semântica de usar #[repr(align(N)) para enumerações é a mesma que definir um wrapper para uma estrutura AlignN<T> com esse alinhamento e, em seguida, usar AlignN<MyEnum> :
 #[repr(align(N))] struct AlignN<T>(T); 
Alterações na biblioteca padrão
O Rust 1.37.0 estabilizou os seguintes componentes da biblioteca padrão:
Outras mudanças
A sintaxe , o gerenciador de pacotes de carga e o analisador Clippy também sofreram algumas alterações.
Membros 1.37.0
Muitas pessoas se uniram para criar o Rust 1.37.0. Não poderíamos ter feito isso sem todos vocês, obrigado!
Gostaríamos de agradecer aos dois novos patrocinadores da infraestrutura Rust que forneceram os recursos necessários para criar o Rust 1.37.0: Amazon Web Services (AWS) e Microsoft Azure:
- A AWS forneceu hospedagem para artefatos de liberação (compiladores, bibliotecas, ferramentas e código fonte), concedeu acesso a esses artefatos aos usuários por meio do CloudFront, impediu regressões EC2 da Crater e gerenciou outra infraestrutura relacionada à Rust hospedada na AWS.
- Para testes extremamente exigentes do repositório rust-lang / rust, o Microsoft Azure forneceu construtores.
De tradutores
Em caso de dúvidas sobre o idioma Rust, eles poderão ajudá-lo no bate-papo do telegrama no idioma russo ou em um bate-papo semelhante para os recém-chegados .
Este artigo foi traduzido em conjunto por andreevlex , ozkriff , funkill e Gymmasssorla .