« Il s'agit d'un article de blog plus court que d'habitude: reconnaissant qu'il est plus important de prendre position contre la brutalité policière qui sévit actuellement aux États-Unis et dans le monde que de partager les connaissances technologiques, nous avons décidé de réduire considérablement la quantité promotionnelle que nous faisons pour cette version.
« L'équipe Rust Core estime que la technologie est et sera toujours politique, et nous encourageons tout le monde à prendre le temps aujourd'hui de se renseigner sur les inégalités raciales et de soutenir le mouvement Black Lives Matter ».
Comme le souligne l’équipe, cette version de Rust n’est pas une mise à jour majeure. Néanmoins, nous pouvons noter quelques points intéressants.
L’ajout de la commande cargo tree qui va imprimer un graphe arborescent de vos dépendances. Par exemple
mdbook v0.3.2 (/Users/src/rust/mdbook)
├── ammonia v3.0.0
│ ├── html5ever v0.24.0
│ │ ├── log v0.4.8
│ │ │ └── cfg-if v0.1.9
│ │ ├── mac v0.1.1
│ │ └── markup5ever v0.9.0
│ │ ├── log v0.4.8 (*)
│ │ ├── phf v0.7.24
│ │ │ └── phf_shared v0.7.24
│ │ │ ├── siphasher v0.2.3
│ │ │ └── unicase v1.4.2
│ │ │ [build-dependencies]
│ │ │ └── version_check v0.1.5
Côté compatibilité
- Rustc génère désormais correctement les bibliothèques statiques sur les cibles GNU Windows avec l'extension .a, plutôt que le précédent .lib.
- Suppression du drapeau -C no_integrated_as de rustc.
- La propriété file_name dans la sortie JSON des erreurs de macro pointe désormais le fichier source réel plutôt que le format précédent de <macros NAME>. Remarque: cela peut ne pas pointer vers un fichier qui existe réellement sur le système de l'utilisateur.
- La version LLVM externe minimale requise a été transférée vers LLVM 8.
- mem::{zeroed, uninitialised} va maintenant signaler des erreurs système lorsqu'il est utilisé avec des types qui n'autorisent pas l'initialisation à zéro tels que NonZeroU8. Auparavant, cela générait un avertissement.
- Dans la version 1.45.0 (la prochaine version), la conversion d'un f64 en u32 à l'aide de l'opérateur as a été définie comme une opération de saturation. Ce comportement n'était pas défini auparavant, vous pouvez utiliser les méthodes {f64, f32}::to_int_unchecked pour continuer à utiliser le comportement actuel qui peut être souhaitable dans de rares situations sensibles aux performances.
Langage
- Vous pouvez maintenant utiliser async/.await avec #[no_std] activé.
- Cette version s’accompagne de l’ajout du lint unused_braces.
Modifications affectant la syntaxe uniquement
Rust 1.4.4 s’accompagne de l’analyse syntaxique du module hiérarchique
Code Rust : | Sélectionner tout |
1 2 3 4 5 6 | #[cfg(FALSE)] mod foo { mod bar { mod baz; // `foo/bar/baz.rs` doesn't exist, but no error! } } |
Ceux-ci sont toujours rejetés sémantiquement, vous recevrez donc probablement une erreur, mais ces modifications peuvent être vues et analysées par les macros et la compilation conditionnelle.
Bibliothèque
- vec![] va mapper directement à Vec::new(). Cela permet à vec![] D'être utilisé dans des contextes const.
- convert::Infallible implémente désormais Hash
- OsString implémente désormais DerefMut et IndexMut retourne un &mut OsStr.
- Unicode13 est désormais supporté
- String implémente désormais From<&mut str>.
- IoSlice implémente désormais Copy.
- Vec<T> implémente désormais From<[T; N]>. Où N peut prendre la valeur 32 au maximum.
- proc_macro::LexError implémente désormais fmt::Display et Error.
Parmi les API passés en version stable, nous pouvons citer :
- PathBuf::with_capacity
- PathBuf::capacity
- PathBuf::clear
- PathBuf::reserve
- PathBuf::reserve_exact
- PathBuf::shrink_to_fit
- f32::to_int_unchecked
- f64::to_int_unchecked
- Layout::align_to
- Layout::pad_to_align
- Layout::array
- Layout::extend
Source : billet Rust, référentiel Rust (GitHub)