Numéros de ligne utiles dans les messages de panique Option et ResultDans Rust 1.41.1, appeler unwrap() sur une valeur Option::None produirait un message d'erreur ressemblant à ceci:
| Code Rust : | Sélectionner tout |
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /.../src/libcore/macros/mod.rs:15:40
Dans Rust 1.42.0, toutes ces huit fonctions produisent des messages de panique qui fournissent le numéro de ligne où elles ont été appelées. Les nouveaux messages d'erreur ressemblent à ceci:
| Code Rust : | Sélectionner tout |
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:2:5
Ce comportement est rendu possible par une annotation, #[track_caller].
matches!
Cette version de Rust s'accompagne d'une nouvelle macro, matches!. Cette macro accepte une expression et un pattern et renvoie true si le modèle correspond à l'expression. En d'autres termes:
| Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 | // Using a match expression: match self.partial_cmp(other) { Some(Less) => true, _ => false, } // Using the `matches!` macro: matches!(self.partial_cmp(other), Some(Less)) |
| Code Rust : | Sélectionner tout |
1 2 3 4 5 | let foo = 'f'; assert!(matches!(foo, 'A'..='Z' | 'a'..='z')); let bar = Some(4); assert!(matches!(bar, Some(x) if x > 2)); |
Dans Rust 2018, l'équipe a supprimé le besoin de extern crate. Mais les macros procédurales étaient un peu spéciales, et donc lorsque vous écriviez une macro procédurale, vous deviez toujours utiliser extern crate proc_macro[nbsp][/nbsp];.
Dans cette version, si vous utilisez Cargo, vous n'avez plus besoin de cette ligne lorsque vous travaillez avec l'édition 2018; vous pouvez l'utiliser comme n'importe quelle autre Crate. Étant donné que la plupart des projets auront déjà une ligne similaire à use proc_macro::TokenStream;, ce changement signifie que vous pouvez supprimer la ligne extern crate proc_macro; et votre code fonctionnera toujours. Cette modification est faible, mais rapproche les macros procédurales du code normal.
Bibliothèques
- iter::Empty<T> implémente désormais Send et Sync pour tout T
- Pin::{map_unchecked, map_unchecked_mut} ne nécessite plus le type de retour pour implémenter Sized.
- io::Cursor implémente maintenant PartialEq et Eq.
- Layout::new est désormais const.
Compatibilités
Parfois, des erreurs sont commises. La méthode Error::description est maintenant considérée comme l'une de ces erreurs. Le problème vient de sa signature de type:
| Code Rust : | Sélectionner tout |
fn description(&self) -> &str
Cette API existe depuis Rust 1.0. L'équipe travaille depuis longtemps dans ce sens : dans Rust 1.27, l'équipe a fait une légère dépréciation cette méthode. En pratique, cela signifiait qu'elle avait donné à la fonction une implémentation par défaut. Cela signifie que les utilisateurs n'étaient plus obligés d'implémenter cette méthode lors de l'implémentation du trait Error. Dans cette version, elle l'a marqué comme étant obsolète et a pris certaines mesures pour réduire la méthode dans la documentation d'Error. En raison de la politique de stabilité, description ne sera jamais supprimée, c'est donc tout ce que l'équipe peut faire.
Source : note de version
Vous avez lu gratuitement 36 069 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.