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 é
rustc
novamente , desta vez passando os dados de criação de perfil coletados de volta para rustc
usando 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 .