
Rust 1.93.0 est désormais stable et a été publié aujourd'hui. Il se concentre sur le renforcement des garanties de sécurité du compilateur tout en fournissant de nouveaux outils cruciaux pour les tâches critiques en termes de performances. Il s’agit d’une version solide qui donne l’impression que le langage est plus mature dans les domaines les plus importants.
Si vous créez des binaires statiques pour Linux (en particulier sur x86_64 ou aarch64), la fiabilité de votre réseau est sur le point d'être considérablement améliorée. Rust 1.93 fait passer la bibliothèque musl fournie à la version 1.2.5, ce qui résout certains problèmes de longue date liés à la résolution DNS dans les anciennes versions. C'est une excellente nouvelle si vous créez des binaires Linux portables qui gèrent la mise en réseau, car cela rend cette fonctionnalité beaucoup plus fiable.
Cela est particulièrement utile lorsqu'il s'agit de grands enregistrements DNS ou de serveurs de noms récursifs complexes. La mise à jour musl a supprimé certains symboles de compatibilité hérités. La rouille libc la caisse a utilisé ces symboles. Cependant, un correctif a été fourni pour ce problème il y a plus de deux ans, de sorte que la plupart des projets modernes ne devraient rencontrer aucun problème pendant le processus de mise à niveau.
En permettant aux allocateurs globaux d'accéder au stockage local des threads, la bibliothèque standard vous permet désormais d'utiliser en toute sécurité des fonctionnalités telles que std::thread_local! sans déclencher de problèmes de réentrée. Pour ceux d'entre vous qui écrivent du code de bas niveau hautement optimisé, le nouveau support de cfg attributs directement sur asm! les lignes sont fantastiques. Auparavant, si vous souhaitiez inclure conditionnellement quelques instructions d'assemblage basées sur les fonctionnalités cibles, vous deviez dupliquer l'intégralité de l'ensemble. asm! bloquer à l’intérieur des instructions de compilation conditionnelle.
Maintenant, vous pouvez appliquer une compilation conditionnelle, comme #[cfg(target_feature = "sse2")]directement aux lignes d'assemblage individuelles ou aux contraintes à l'intérieur du bloc. Cela rend l'écriture d'optimisations spécifiques à la plate-forme beaucoup plus propre et plus facile à maintenir.
La version stabilise un grand nombre d'API, offrant aux développeurs de nouveaux outils pour gérer la mémoire et les structures de données. Plusieurs nouvelles méthodes pour MaybeUninit les tranches sont désormais stables. Ceux-ci incluent assume_init_drop, assume_init_refet des méthodes comme write_copy_of_slice. Ceux-ci fournissent un contrôle granulaire sur la sécurité de la mémoire lorsqu’il s’agit de tampons non initialisés. Si vous travaillez avec FFI ou une gestion de mémoire personnalisée, vous apprécierez également que String::into_raw_parts et Vec::into_raw_parts sont désormais officiels.
Cela vous permet de déconstruire ces collections en leurs composants principaux tels que les pointeurs bruts, les longueurs et les capacités. Les accros aux performances apprécieront la stabilisation des opérations entières non contrôlées comme unchecked_neg, unchecked_shlet unchecked_shr. Ceux-ci sont cruciaux pour écrire du code extrêmement rapide et dangereux dans lequel le développeur garantit qu'aucun débordement ou décalage invalide ne se produira.
Pour un usage quotidien, le VecDeque la collection a des méthodes comme pop_front_if et pop_back_if. Cela permet aux utilisateurs de supprimer sous condition des éléments à chaque extrémité de la file d'attente, ce qui simplifie grandement la logique de la file d'attente.
Le deref_nullptr lint, qui détecte les tentatives de déréférencement de pointeurs nuls, est désormais refusé par défaut. Il s'agit d'un changement très bienvenu car il permet de détecter les problèmes de sécurité critiques au moment de la compilation plutôt que pendant l'exécution. De nouveaux avertissements ont également été ajoutés, notamment function_casts_as_integer et const_item_interior_mutations. Ceux-ci aident à appliquer les meilleures pratiques et à éviter les bugs subtils liés à la mutabilité intérieure au sein des éléments constants.
La variable d'environnement CARGO_CFG_DEBUG_ASSERTIONS est désormais activé dans les scripts de build basés sur le profil actif. Cela donne aux scripts de build plus de contexte sur la façon dont le code est compilé. En plus, cargo clean prend désormais en charge le --workspace flag, simplifiant le nettoyage pour les grands projets multi-packages. Si vous analysez fréquemment des graphiques de dépendance, cargo tree prend désormais en charge les formulaires longs pour son --format variables, ce qui rend les sorties complexes plus faciles à personnaliser.
Il y a beaucoup à voir dans cette nouvelle version, et vous serez heureux d'avoir mis à niveau. Si Rust est déjà installé, vous pouvez obtenir la mise à jour dès maintenant en exécutant rustup update stable.
Source: Rouille (1), Rouille (2)
Vous pouvez lire l’article original (en Angais) sur le sitewww.howtogeek.com