Rust 1.29 Release

L'équipe de développement de Rust est heureuse d'annoncer la sortie d'une nouvelle version de Rust: 1.29.0. Rust est un langage de programmation système destiné à la sécurité, la vitesse et l'exécution de code parallèle.


Si vous avez une version précédente de Rust installée à l'aide de Rustup, alors pour mettre à niveau Rust vers la version 1.29.0, il vous suffit de faire:


$ rustup update stable 

Si vous n'avez pas encore installé Rustup, vous pouvez l' installer à partir de la page correspondante de notre site Web. Des notes de version détaillées de Rust 1.29.0 sont disponibles sur GitHub.


Ce qui est inclus dans la version stable 1.29.0


1.29 n'apporte pas beaucoup de changements. La rouille 1,30 et 1,31 devrait être très importante, de sorte que la majeure partie de l'itération 1,29 a été préparée pour de futurs changements. Les deux innovations les plus notables de cette version ne concernent même pas la langue elle-même: ce sont deux nouvelles fonctionnalités de Cargo et les deux concernent les avertissements.


  • cargo fix automatiquement les avertissements dans le code
  • cargo clippy - un analyseur de code Rust statique qui aide à détecter les erreurs courantes et à simplement améliorer le code

cargo fix


Avec la sortie de Rust 1.29, Cargo a une nouvelle sous-commande: cargo fix . Si vous avez déjà écrit en Rust, vous avez probablement rencontré des avertissements du compilateur. Par exemple, considérez ce code:


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

Dans ce document, nous appelons do_something cent fois, mais n'utilisons jamais la variable i . Rust nous en avertit:


 > 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 

Voir l'astuce pour renommer _i ? Nous pouvons l'appliquer automatiquement avec 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 maintenant nous ouvrons src\main.rs , nous verrons le code corrigé:


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

Maintenant, _i utilisé dans le code et l'avertissement n'est plus émis.


La première version du cargo fix de cargo fix ne corrige pas tous les avertissements. cargo fix utilise une API de compilation spéciale pour son travail, qui propose de corriger uniquement les avertissements dont nous sommes absolument sûrs. Au fil du temps, leur liste s'allongera.


cargo clippy


En savoir plus sur les avertissements: vous pouvez désormais essayer le cargo-clippy via Rustup. Clippy est un analyseur statique qui effectue de nombreuses vérifications supplémentaires sur votre code.


Par exemple:


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

Syntaxiquement, c'est le bon code, mais nous pouvons obtenir un blocage car nous avons appelé drop pour le lien _ vers lock_guard _, et non pour lock_guard lui-même. Appeler drop pour un lien n'a pas de sens et est presque certainement une erreur.


Installez la version préliminaire de Clippy via Rustup:


 $ rustup component add clippy-preview 

et lancez-le:


 $ 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 

Comme vous pouvez le voir dans la note du message, vous pouvez obtenir une liste complète de tous les avertissements possibles via le lien.


Veuillez noter qu'il ne s'agit que d'une version d'essai; Clippy n'a pas encore atteint 1.0, de sorte que l'ensemble et le comportement des contrôles peuvent encore changer. Nous publierons le composant clippy dès qu'il sera stabilisé, mais pour l'instant nous vous demandons de regarder la version préliminaire et de nous faire part de votre expérience.


Oui, il y a encore une nuance: malheureusement, vous ne pouvez pas utiliser clippy avec cargo-fix . Les travaux sont en cours.


Voir les notes de version pour plus de détails.


Stabilisation de la bibliothèque standard


Les API suivantes ont été stabilisées dans cette version:



De plus, vous pouvez maintenant &str et OsString .


Voir les notes de version pour plus de détails.


Améliorations du fret


Ci-dessus, nous avons déjà décrit deux nouvelles sous-commandes Cargo. De plus, Cargo Cargo.lock , git merge . Ce comportement peut être désactivé avec l'indicateur --locked .


cargo doc obtenu un nouveau drapeau: --document-private-items . Par défaut, cargo doc documente uniquement les parties publiques de l'API, car il est destiné à générer de la documentation utilisateur. Mais si vous travaillez sur votre paquet et qu'il a une documentation interne, alors --document-private-items permettra la génération de documentation en général pour tout.


Voir les notes de version pour plus de détails.


Développeurs 1.29.0


Beaucoup de gens ont participé au développement de Rust 1.29. Nous n'aurions pas pu terminer le travail sans chacun de vous. Je vous remercie!


D'un traducteur: Merci @Revertron de m'aider à traduire.

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


All Articles