Rust 1.28 Release

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(); //     . v.push(1); } 

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 .


Message d'erreur de format amélioré


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

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


All Articles