Rust 1.29 Lanzamiento

El equipo de desarrollo de Rust se complace en anunciar el lanzamiento de una nueva versi贸n de Rust: 1.29.0. Rust es un lenguaje de programaci贸n del sistema destinado a la seguridad, la velocidad y la ejecuci贸n de c贸digo paralelo.


Si tiene una versi贸n anterior de Rust instalada con Rustup, para actualizar Rust a la versi贸n 1.29.0 solo necesita hacer:


$ rustup update stable 

Si a煤n no ha instalado Rustup, puede instalarlo desde la p谩gina correspondiente de nuestro sitio web. Las notas de lanzamiento detalladas de Rust 1.29.0 est谩n disponibles en GitHub.


Lo que se incluye en la versi贸n estable 1.29.0


1.29 no hace muchos cambios. Se espera que el 贸xido 1.30 y 1.31 sean muy significativos, por lo que la mayor parte de la iteraci贸n 1.29 se prepar贸 para futuros cambios. Las dos innovaciones m谩s notables de este lanzamiento ni siquiera se refieren al lenguaje en s铆: estas son dos caracter铆sticas nuevas de Cargo y ambas est谩n relacionadas con advertencias.


  • cargo fix corrige autom谩ticamente las advertencias en el c贸digo
  • cargo clippy : un analizador de c贸digo de 贸xido est谩tico que ayuda a detectar errores comunes y simplemente a mejorar el c贸digo

cargo fix


Con el lanzamiento de Rust 1.29, Cargo tiene un nuevo subcomando: cargo fix . Si alguna vez ha escrito en Rust, lo m谩s probable es que haya encontrado advertencias del compilador. Por ejemplo, considere este c贸digo:


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

En 茅l, llamamos do_something cien veces, pero nunca usamos la variable i . Rust nos advierte sobre esto:


 > 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 

驴Ves la pista sobre renombrar a _i ? Podemos aplicarlo autom谩ticamente con el 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 

Si ahora abrimos src\main.rs , veremos el c贸digo corregido:


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

Ahora _i usa _i en el c贸digo y ya no se emite la advertencia.


La primera versi贸n del cargo fix de cargo fix corrige no todas las advertencias. cargo fix utiliza un compilador API especial para su trabajo, que ofrece reparar solo aquellas advertencias en las que estamos absolutamente seguros. Con el tiempo, su lista se ampliar谩.


cargo clippy


M谩s sobre advertencias: ahora puedes probar cargo-clippy trav茅s de Rustup. Clippy es un analizador est谩tico que realiza muchas verificaciones adicionales en su c贸digo.


Por ejemplo:


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

Sint谩cticamente, este es el c贸digo correcto, pero podemos obtener un punto muerto porque llamamos a drop el _ enlace a lock_guard _, y no a lock_guard s铆. Llamar a drop para un enlace tiene poco sentido y es casi seguro un error.


Instale la versi贸n preliminar de Clippy a trav茅s de Rustup:


 $ rustup component add clippy-preview 

y ejecutarlo:


 $ 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 puede ver en la nota al mensaje, puede obtener una lista completa de todas las advertencias posibles por referencia.


Tenga en cuenta que esta es solo una versi贸n de prueba; Clippy a煤n no ha alcanzado 1.0, por lo que el conjunto y el comportamiento de las comprobaciones a煤n pueden cambiar. clippy componente clippy tan pronto como se estabilice, pero por ahora le pedimos que consulte la versi贸n preliminar y nos cuente su experiencia.


S铆, todav铆a hay un matiz: desafortunadamente, no puedes usar Clippy junto con cargo-fix Fix. Se est谩 trabajando en esto.


Vea las notas de la versi贸n para m谩s detalles.


Estabilizaci贸n de la biblioteca est谩ndar.


Las siguientes API se han estabilizado en esta versi贸n:



Adem谩s, ahora puede &str y OsString .


Vea las notas de la versi贸n para m谩s detalles.


Mejoras de carga


Arriba, ya hemos descrito dos nuevos subcomandos de Cargo. Adem谩s, Cargo Cargo.lock , git merge . Este comportamiento se puede deshabilitar con el indicador --locked .


cargo doc recibi贸 una nueva bandera: --document-private-items . De manera predeterminada, el cargo doc solo documenta las partes p煤blicas de la API, ya que est谩 destinado a generar documentaci贸n de usuario. Pero si est谩 trabajando en su paquete y tiene documentaci贸n interna, entonces --document-private-items permitir谩 la generaci贸n de documentaci贸n en general para todo.


Vea las notas de la versi贸n para m谩s detalles.


Desarrolladores 1.29.0


Mucha gente particip贸 en el desarrollo de Rust 1.29. No podr铆amos haber completado el trabajo sin cada uno de ustedes. Gracias


De un traductor: Gracias @Revertron por ayudarme a traducir.

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


All Articles