Version Rust 1.39.0: asynchrone / attente, attributs pour les paramètres de fonction, nouvelles fonctions constantes

L'équipe Rust est heureuse d'annoncer la sortie d'une nouvelle version, 1.39.0. Rust est un langage de programmation qui permet à chacun de créer des logiciels fiables et efficaces.


Si vous avez installé la version précédente de Rust à l'aide de rustup , pour mettre à niveau vers la version 1.39.0, il vous suffit d'exécuter la commande suivante:


 $ rustup update stable 

Si vous n'avez pas encore installé rustup , vous pouvez l' installer à partir de la page correspondante de notre site Web, ainsi que voir les notes de version détaillées sur GitHub.


Ce qui est inclus dans la version stable 1.39.0


Les innovations les plus importantes incluent la .await async / .await , les références partagées aux valeurs mobiles dans les match-guards et les attributs des paramètres de fonction. Voir les notes de version détaillées pour plus d'informations.


Avec .await terminé, rencontrez async fn


Plus tôt dans Rust 1.36.0, nous avons annoncé la disponibilité du trait Future . Ensuite, nous avons noté que:


Nous espérons que cette innovation permettra aux caisses populaires, aux bibliothèques et à l'ensemble de l'écosystème de se préparer à la .await async / .await , qui devrait être stabilisée dans un avenir proche.

La promesse est donnée - la promesse est tenue. Nous sommes heureux d'annoncer que la .await async / .await tant attendue, qui nous permet de définir des fonctions et des blocs async ( async ) et d'attendre leur exécution ( .await ), est enfin stable!


Une fonction asynchrone définie à l'aide de la syntaxe async fn (au lieu de la fn habituelle) ne fait rien sauf que lorsqu'elle est appelée, elle renvoie un objet qui implémente la caractéristique Future . Cet objet est un calcul suspendu, qui peut être complété avec la syntaxe .await . De plus, async fn , async { ... } et async move { ... } agissent comme des fermetures et peuvent être utilisés pour définir des littéraux asynchrones.


Vous pouvez en savoir plus sur la sortie de async / .await dans le blog de Niko Matsakis .


Liens partagés vers les valeurs d'itinérance dans les match-guards


Lors de la correspondance d'une image, une variable appelée liaison peut être liée de l'une des manières suivantes:


  • Par référence, immuable ou mutable. Cela peut être fait explicitement, par exemple, avec la syntaxe ref my_var ou ref mut my_var respectivement. Presque toujours, le mode d'accrochage sera affiché automatiquement.


  • Par valeur - soit en copiant (si le type de la variable liée implémente le trait Copy ), soit en le transférant à la propriété .



Maintenant, il est autorisé d'utiliser des variables de modèle dans les contraintes if du modèle, si la propriété est transférée à cette variable (c'est-à-dire la variable dans le modèle binds-by-move). Auparavant, le code suivant était supprimé:


 fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums // ---- `nums`    (by move). if nums.iter().sum::<u8>() == 10 // ^------ `.iter()`     `nums` => { drop(nums); // ----------- `nums`      } _ => unreachable!(), } } 

À partir de Rust 1.39.0 , le compilateur acceptera le fragment ci-dessus sans avertissements et erreurs. Nous espérons que cette innovation augmentera la convivialité de l'expression de match .


Attributs des paramètres de fonction


À partir de Rust 1.39.0, les attributs peuvent être appliqués aux paramètres de fonction, aux fermetures et aux pointeurs de fonction. Auparavant, la fonction len() pouvait être représentée comme suit:


 #[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() } 

Mais Rust 1.39.0 rend l'écriture du code ci-dessus beaucoup plus simple:


 fn len( #[cfg(windows)] slice: &[u16], //        Windows. #[cfg(not(windows))] slice: &[u8], //       . ) -> usize { slice.len() } 

Les attributs utilisables incluent:


  1. Compilation conditionnelle: cfg et cfg_attr ;


  2. Gestion des chèques: allow , warn , deny et forbid ;


  3. Attributs d'assistance utilisés par les macros d'attributs procéduraux pour les éléments de syntaxe.


    Nous espérons que cette innovation aidera l'écosystème à écrire des DSL macro plus expressifs.



Les avertissements de migration de chèques d'emprunt deviennent de graves bogues dans Rust 2018


Dans la version 1.35.0, nous avons annoncé que le nouvel analyseur d'emprunt (NLL) était arrivé aux éditeurs de Rust 2015 après sa sortie aux éditeurs de Rust 2018 dans la version 1.31 .


Comme indiqué dans la version 1.35.0, l'analyseur d'emprunt précédent a été conçu avec des bogues qui permettaient une utilisation de la mémoire non sécurisée. Ces erreurs ont été corrigées à l'aide d'un nouvel analyseur qui implémente NLL. Étant donné que ces correctifs pouvaient casser le code de travail, l'équipe de Rust a décidé de les introduire progressivement, vérifiant que l'analyseur précédent devait accepter le code, que le nouvel analyseur rejetterait. Si c'est le cas, les erreurs deviendront plutôt des avertissements.


À partir de Rust 1.39.0, ces avertissements sont désormais des bogues dans l'édition Rust 2018 .
Dans la prochaine version de Rust 1.40.0, cette règle sera également appliquée au code de révision Rust 2015 , ce qui éliminera complètement l'ancien analyseur d'emprunt du compilateur.


Si vous êtes concerné par ces changements ou souhaitez en savoir plus, consultez le blog de Niko Matsakis .


Fonctions plus constantes dans la bibliothèque standard


À partir de Rust 1.39.0, les fonctions suivantes sont marquées comme const fn ( const fn ):



Fonctions stables dans la bibliothèque standard


Les fonctions suivantes ont été stabilisées dans Rust 1.39.0:



Autres changements


La syntaxe , le gestionnaire de paquets de fret et l' analyseur Clippy ont également subi quelques modifications.


Veuillez lire les notes de compatibilité pour voir si ces changements vous concernent.


Membres 1.39.0


Beaucoup de gens se sont réunis pour créer Rust 1.39.0. Nous n'aurions pas pu faire cela sans vous tous, merci !


Des traducteurs


Pour toute question sur la langue rouille, ils pourront vous aider dans le chat Telegram en russe ou dans un chat similaire pour les nouveaux arrivants .


Cet article a été traduit conjointement par andreevlex , blandger , funkill et Hippolot .

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


All Articles