
et d’autres fonctionnalités
L’équipe de développement du langage de programmation Rust a annoncé ce jeudi la disponibilité de la version stable de Rust 1.38.0. Cette nouvelle version apporte quelques nouvelles fonctionnalités à Rust comme la prise en charge de la compilation en pipeline, ainsi que quelques autres améliorations au langage.
Après la sortie de Rust 1.37.0 en août, l’équipe de développement de Rust a publié hier la version 1.38.0 du langage. Les fonctionnalités les plus marquantes de Rust 1.37.0 incluaient les références aux variantes enum via les alias type, le cargo vendor intégré, les éléments const non nommés, l’optimisation guidée par le profil, une clé d’exécution par défaut default - run dans Cargo et #[repr(align(N))] sur des enum.
La version 1.38.0 apporte la prise en charge de la compilation en pipeline et étend l’usage de l’attribut #[deprecated], introduit pour la première fois dans Rust 1.9.0, ce qui permet à présent de l'appliquer également aux macros. Rust 1.38.0 vous permet désormais de connaître le nom d’un type au cours du débogage à l’aide de l’attribut std::any::type_name. Voici plus en détail quelques nouveautés apparues dans Rust 1.38.0.
Compilation en pipeline
Pour plus de performance, Rust 1.38 prend en charge la compilation en pipeline selon laquelle Cargo commencera à construire des caisses (crates) dépendantes à l’instant où les métadonnées seront prêtes. Pour les constructions qui impliquent plusieurs caisses, cela peut conduire à des vitesses de compilation de l'ordre de 10~20 % plus rapides pour des constructions propres et optimisées. Notons qu’une caisse (crate) est une unité de compilation. Cela signifie que c’est un programme ou une bibliothèque. rustc ne compile qu’une caisse à la fois.
En effet, pour compiler une caisse désormais, le compilateur n'a pas besoin que les dépendances soient entièrement construites. Au lieu de cela, il n'a besoin que de leurs « métadonnées » (c'est-à-dire la liste des types, des dépendances, des exportations, etc.). Ces métadonnées sont produites au début du processus de compilation. À partir de Rust 1.38.0, Cargo en profitera et commencera automatiquement à construire des caisses dépendantes dès que les métadonnées seront prêtes.
Selon l’équipe, bien que le changement n'ait pas d'effet sur les builds pour une seule caisse, les tests ont montré une augmentation de la vitesse de compilation de 10 à 20 % pour des builds optimisés et propres de certains graphes de caisse. D'autres ne se sont pas beaucoup améliorés et l'accélération dépend du matériel exécutant la construction. Aucun changement de code n'est nécessaire pour en tirer profit.
Rust 1.38.0 étend l’utilisation de l'attribut #[deprecated] aux macros
L'attribut #[deprecated], introduit pour la première fois dans Rust 1.9.0, permet aux auteurs de caisses (crates) d'informer leurs utilisateurs qu'un élément de leur caisse est obsolète et sera supprimé dans une prochaine version. Rust 1.38.0 étend l'attribut, ce qui permet de l'appliquer également aux macros.
Linting de certaines utilisations incorrectes de mem::{uninitialized, zeroed}
Selon l’équipe de développement de Rust, std::mem::uninitialized n’est pas toujours utilisé en toute sécurité. Il faut utiliser à la place MaybeUninit<T>. L’utilisation de mem::uninitialized n’est pas encore déprécié, mais l’équipe a annoncé que cela sera fait dans une prochaine version. Cependant, à partir de la version 1.38.0, rustc fournira un lint (outil d’analyse de code source) pour une classe d'initialisations incorrectes en utilisant mem::uninitialized ou mem::zeroed. Vous pouvez en savoir plus sur la fonctionnalité en consultant la note de version de la version stable de Rust 1.38.0.
Obtenir le nom d’un type en utilisant std::any::type_name
D’après l’équipe, pour le débogage, il est parfois utile d'obtenir le nom d'un type. Par exemple, dans le code générique, vous pouvez vouloir voir, au moment de l'exécution, avec quels types concrets les paramètres de type d'une fonction ont été instanciés. Ceci peut maintenant être fait en utilisant std::any::type_name.
Comme toutes les fonctions de bibliothèque standard destinées uniquement au débogage, le contenu exact et le format de la chaîne ne sont pas garantis. La valeur retournée n'est qu'une description du type. Selon l’équipe, plusieurs types peuvent partager la même valeur de type_name. Elle a également annoncé que cette valeur peut changer dans les prochaines versions du compilateur.
Il existe aussi d'autres modifications dans la version Rust 1.38.0 et certaines fonctions existantes ont été stabilisées. On peut citer :
- slice::{concat, connect, join} accepte maintenant &[T] en plus de &T ;
- *const T et *mut T implémentent maintenant le marqueur::Unpin ;
- Arc<[T]> et Rc<[T]> implémentent maintenant FromIterator<T> ;
- etc.
Source : Rust
Et vous ?

Voir aussi



Vous avez lu gratuitement 3 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.