La version 1.90 du langage de programmation Rust a été publiée. Initialement développé par Mozilla, il est maintenant soutenu par l'organisation à but non lucratif Rust Foundation. Ce langage est axé sur la sécurité de la mémoire et fournit des outils pour atteindre un haut niveau de parallélisme dans l'exécution des tâches, tout en évitant l'utilisation d'un ramasse-miettes et d'un runtime (le runtime se limite à une initialisation de base et à la gestion de la bibliothèque standard).
Les méthodes de gestion de la mémoire en Rust éliminent les erreurs lors de la manipulation des pointeurs et protègent contre les problèmes liés à la gestion bas niveau de la mémoire, tels que l'accès à une zone mémoire après sa libération, la déréférence de pointeurs nuls, le dépassement de tampon, etc. Pour faciliter la diffusion des bibliothèques, assurer la compilation et gérer les dépendances, un gestionnaire de paquets nommé Cargo est en développement. Un dépôt pour le déploiement des bibliothèques, crates.io, est également supporté.
La sécurité de la mémoire dans Rust est assurée au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets, à la prise en compte de la durée de vie des objets (portée) et à l'évaluation de l'accès mémoire pendant l'exécution du code. Rust offre également des outils pour se protéger contre les débordements d'entiers, exige l'initialisation obligatoire des valeurs des variables avant leur utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept d'immuabilité (immutable) pour les références et les variables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.
Les principales nouveautés :
- Sous Linux, sur des ordinateurs avec architecture x86_64, le linker par défaut pour le lien dynamique des paquets crate est LLD du projet LLVM. L'utilisation de LLD par rapport à BFD a entraîné des améliorations en matière de performance pour le lien de gros fichiers exécutables et de projets avec une grande quantité d'informations de débogage, ainsi que pour l'accélération de la recompilation incrémentielle. Dans la plupart des cas, LLD est rétrocompatible avec BFD. En cas de problème, vous pouvez revenir à BFD en définissant la variable d'environnement RUSTFLAGS avec le flag « -C linker-features=-lld » ou en ajoutant dans le fichier de configuration .cargo/config.toml : [target.x86_64-unknown-linux-gnu] rustflags = [« -Clinker-features=-lld »]
- Le gestionnaire de paquets cargo a intégré l'option « —workspace » dans la commande « publish », permettant de publier automatiquement tous les paquets d'un espace de travail choisi (un ensemble de paquets utilisant un fichier Cargo.lock commun et un répertoire de résultats de compilation partagé), tout en préservant l'ordre des paquets et en tenant compte de leurs dépendances.
- Une nouvelle série d'API a été stabilisée dans la catégorie des API stables, notamment des méthodes et des implémentations de traits stabilisées :
- u{n}::checked_sub_signed
- u{n}::overflowing_sub_signed
- u{n}::saturating_sub_signed
- u{n}::wrapping_sub_signed
- impl Copy pour IntErrorKind
- impl Hash pour IntErrorKind
- impl PartialEq<&CStr> pour CStr
- impl PartialEq<CString> pour CStr
- impl PartialEq<Cow<CStr>> pour CStr
- impl PartialEq<&CStr> pour CString
- impl PartialEq<CStr> pour CString
- impl PartialEq<Cow<CStr>> pour CString
- impl PartialEq<&CStr> pour Cow
- impl PartialEq<CStr> pour Cow
- impl PartialEq<CString> pour Cow
- L'attribut «const» est appliqué dans les fonctions :
- <[T]>::reverse
- f32::floor
- f32::ceil
- f32::trunc
- f32::fract
- f32::round
- f32::round_ties_even
- f64::floor
- f64::ceil
- f64::trunc
- f64::fract
- f64::round
- f64::round_ties_even
- Pour les plateformes cibles basées sur la bibliothèque Musl, qui sont au troisième niveau de support, le lien dynamique est inclus par défaut : mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl et thumbv7neon-unknown-linux-musleabihf.
- La plateforme cible « x86_64-apple-darwin » est passée du premier niveau de support au deuxième (Apple prévoit d'abandonner le support de l'architecture x86_64). Le premier niveau de support implique la création de builds binaires, des tests approfondis et la fourniture de la plus haute garantie de support pour la plateforme : chaque modification du compilateur est vérifiée par l'exécution d'un ensemble complet de tests. Le deuxième niveau de support offre une garantie de construction, mais sans garanties lors du passage de l'ensemble de tests.
On peut également noter le développement par Microsoft d'un outil pour le développement de pilotes Windows en langage Rust. Un ensemble de paquets crate pour créer des pilotes basés sur WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) et UMDF (User-Mode Driver Framework), ainsi que des services Win32, est déjà disponible sur GitHub, utilisable sous Windows 11. L'objectif du projet est de fournir aux développeurs en langage Rust des bibliothèques et fonctions similaires à celles proposées dans l'outil WDK pour les développeurs de pilotes en langage C. À ce stade, l'outil de développement de pilotes en Rust utilise de nombreux appels unsafe lors de l'interaction avec les sous-systèmes Windows, mais il est prévu de préparer des abstractions sécurisées pour les structures du noyau et DDI (Device Driver Interface). Les développements du projet sont distribués sous les licences MIT et Apache 2.0.
Source : opennet.ru
