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ódigocargo 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.