L'équipe de développement de Rust est heureuse d'annoncer la sortie d'une nouvelle version de Rust: 1.28.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.28.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 pour Rust 1.28.0 sont disponibles sur GitHub.
Ce qui est inclus dans la version stable 1.28.0
Allocateurs mondiaux
À l'aide d'allocateurs, les programmes Rust obtiennent de la mémoire au moment de l'exécution. Auparavant, Rust ne permettait pas de changer la façon dont la mémoire était allouée, ce qui limitait son utilisation dans certains cas. Sur certaines plates-formes, jemalloc a été utilisé, sur d'autres - un allocateur système, mais les utilisateurs ne pouvaient pas le contrôler. Dans la version 1.28.0, l'attribut #[global_allocator]
est stabilisé, ce qui permet aux programmes Rust de sélectionner un allocateur système, ainsi que de définir de nouveaux allocateurs, implémentant le GlobalAlloc
.
L'allocateur par défaut pour les programmes Rust sur certaines plateformes est jemalloc. La bibliothèque standard fournit désormais un descripteur d'allocateur système que vous pouvez utiliser pour passer à l'utilisation de l'allocateur système, si nécessaire, par déclaration statique avec l'attribut #[global_allocator]
.
use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new();
Cependant, vous devez parfois définir votre propre allocateur pour un domaine fonctionnel spécifique de votre application. Ceci est également relativement facile à faire en implémentant le GlobalAlloc
. Vous pouvez en savoir plus sur la façon de procéder dans la documentation .
Le travail d'amélioration des diagnostics se poursuit, cette fois en mettant l'accent sur le formatage:
format!("{_foo}", _foo = 6usize);
Auparavant, le message d'erreur à cet endroit était plutôt maigre:
error: invalid format string: expected `'}'`, found `'_'` | 2 | format!("{_foo}", _foo = 6usize); | ^^^^^^^^
Maintenant, un nouveau message de diagnostic indique la raison spécifique pour laquelle la chaîne de format n'est pas valide:
error: invalid format string: invalid argument name `_foo` | 2 | let _ = format!("{_foo}", _foo = 6usize); | ^^^^ invalid argument name in format string | = note: argument names cannot start with an underscore
Voir les notes de version pour plus de détails.
Stabilisation de la bibliothèque standard
En plus de la stabilisation des GlobalAlloc
déjà mentionnée, les types de numéros non NonZero
sont stabilisés dans cette version. Il s'agit de types d'encapsuleur autour de types entiers non signés standard: NonZeroU8
, NonZeroU16
, NonZeroU32
, NonZeroU64
, NonZeroU128
et NonZeroUsize
.
Ils vous permettent d'optimiser la taille des données stockées. Par exemple, l' Option<u8>
prend deux octets, tandis que l' Option<NonZeroU8>
un. Veuillez noter que cette optimisation persiste même lorsque NonZeroU8
enveloppé dans une autre structure; l'exemple ci-dessous montre que la Door
occupe toujours un octet, même lorsqu'elle est placée dans Option
. Cette optimisation s'applique également aux énumérations définies par l'utilisateur; l' Option
pas spéciale ici.
use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); }
De nombreux autres composants de bibliothèque ont également été stabilisés, dont une liste complète peut être trouvée dans les notes de version détaillées.
Améliorations du fret
Cargo ne vous permettra plus de publier des packages avec des scripts de construction qui modifient le répertoire src. Le répertoire src
du package doit être considéré comme immuable.
Développeurs 1.28.0
Beaucoup de gens ont participé au développement de Rust 1.28. Nous n'aurions pas pu terminer le travail sans chacun de vous. Je vous remercie!
De la part d'un traducteur: j'exprime ma gratitude aux membres de la communauté ruRust et personnellement ozkriff pour leur aide dans la traduction et la relecture