Rust 1.29 Release

A equipe de desenvolvimento do Rust tem o prazer de anunciar o lançamento de uma nova versão do Rust: 1.29.0. Rust é uma linguagem de programação de sistema que visa segurança, velocidade e execução de código paralelo.


Se você possui uma versão anterior do Rust instalada usando o Rustup, para atualizar o Rust para a versão 1.29.0, basta fazer o seguinte:


$ rustup update stable 

Se você ainda não instalou o Rustup, pode instalá-lo na página correspondente do nosso site. As notas de versão detalhadas do Rust 1.29.0 estão disponíveis no GitHub.


O que está incluído na versão estável 1.29.0


1,29 não faz muitas alterações. Espera-se que as ferrugens 1,30 e 1,31 sejam muito significativas, portanto a maior parte da iteração 1,29 foi preparada para mudanças futuras. As duas inovações mais notáveis ​​desta versão nem sequer se referem ao próprio idioma: esses são dois novos recursos do Cargo e ambos se referem a avisos.


  • cargo fix automaticamente avisos no código
  • cargo clippy - um analisador de código de ferrugem estático que ajuda a detectar erros comuns e simplesmente melhora o código

cargo fix


Com o lançamento do Rust 1.29, o Cargo ganhou um novo subcomando: cargo fix . Se você já escreveu em Rust, provavelmente encontrou avisos do compilador. Por exemplo, considere este código:


 fn do_something() {} fn main() { for i in 0..100 { do_something(); } } 

Nele, chamamos do_something centenas de vezes, mas nunca usamos a variável i . Rust nos adverte sobre isso:


 > cargo build Compiling myprogram v0.1.0 (file:///path/to/myprogram) warning: unused variable: `i` --> src\main.rs:4:9 | 4 | for i in 1..100 { | ^ help: consider using `_i` instead | = note: #[warn(unused_variables)] on by default Finished dev [unoptimized + debuginfo] target(s) in 0.50s 

Veja a dica sobre como renomear para _i ? Podemos aplicá-lo automaticamente com cargo fix :


 > cargo fix Checking myprogram v0.1.0 (file:///C:/Users/steve/tmp/fix) Fixing src\main.rs (1 fix) Finished dev [unoptimized + debuginfo] target(s) in 0.59s 

Se agora abrirmos src\main.rs , veremos o código corrigido:


 fn do_something() {} fn main() { for _i in 0..100 { do_something(); } } 

Agora _i usado no código e o aviso não é mais emitido.


A primeira versão do cargo fix de cargo fix corrige nem todos os avisos. cargo fix usa uma API especial do compilador para o seu trabalho, que oferece a correção apenas dos avisos nos quais temos certeza absoluta. Com o tempo, sua lista será expandida.


cargo clippy


Mais informações sobre os avisos: agora você pode experimentar a cargo-clippy através do Rustup. Clippy é um analisador estático que executa muitas verificações adicionais no seu código.


Por exemplo:


 let mut lock_guard = mutex.lock(); std::mem::drop(&lock_guard) operation_that_requires_mutex_to_be_unlocked(); 

Sintaticamente, este é o código correto, mas podemos obter um impasse porque chamamos drop para o link _ para lock_guard _, e não para o próprio lock_guard . Chamar drop para um link faz pouco sentido e é quase certamente um erro.


Instale a versão preliminar do Clippy através do Rustup:


 $ rustup component add clippy-preview 

e execute:


 $ cargo clippy error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. --> src\main.rs:5:5 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[deny(drop_ref)] on by default note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>> --> src\main.rs:5:20 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^ = help: for further information visit https://rust-lang-nursery.imtqy.com/rust-clippy/v0.0.212/index.html#drop_ref 

Como você pode ver na nota da mensagem, você pode obter uma lista completa de todos os avisos possíveis através do link.


Observe que esta é apenas uma versão de avaliação; O Clippy ainda não atingiu 1,0, portanto, o conjunto e o comportamento das verificações ainda podem mudar. clippy componente clippy assim que estiver estabilizado, mas, por enquanto, pedimos que você olhe a versão preliminar e conte-nos sobre sua experiência.


Sim, ainda há uma nuance: infelizmente, você não pode usar o clippy junto com cargo-fix . O trabalho está em andamento.


Veja as notas de versão para mais detalhes.


Estabilização da biblioteca padrão


As seguintes APIs foram estabilizadas nesta versão:



Além disso, agora você pode &str e OsString .


Veja as notas de versão para mais detalhes.


Aprimoramentos de carga


Acima, já descrevemos dois novos subcomandos Cargo. Além disso, o Cargo Cargo.lock , git merge . Esse comportamento pode ser desabilitado com o sinalizador --locked .


cargo doc recebeu uma nova bandeira: --document-private-items . Por padrão, cargo doc apenas as partes públicas da API, pois se destina a gerar documentação do usuário. Mas se você estiver trabalhando no seu pacote e ele possuir documentação interna, então --document-private-items permitirá a geração de documentação em geral para tudo.


Veja as notas de versão para mais detalhes.


Desenvolvedores 1.29.0


Muitas pessoas participaram do desenvolvimento do Rust 1.29. Não poderíamos ter concluído o trabalho sem cada um de vocês. Obrigada


De um tradutor: Agradeça à @Revertron por me ajudar a traduzir.

Source: https://habr.com/ru/post/pt423249/


All Articles