La version 1.88 du langage de programmation général Rust, initialement développé par Mozilla, est désormais soutenue par l'organisation à but non lucratif Rust Foundation. Ce langage se concentre sur une gestion sûre de la mémoire et propose des outils pour atteindre un haut degré 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 à l'initialisation de base et à l'accompagnement 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 :
- Il est désormais possible de spécifier plusieurs expressions « let » à l'intérieur des blocs conditionnels « if » et « while » en utilisant l'opérateur « && » (et logique) pour les combiner. Les expressions « let » peuvent être combinées avec des expressions conditionnelles booléennes. Les variables déclarées dans les expressions let peuvent être utilisées dans les expressions conditionnelles suivantes, ainsi qu'à l'intérieur des blocs « if » et « while ». if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Ajout du support pour l'écriture de fonctions « nues », annotées avec l'attribut « #[unsafe(naked)] » et contenant un seul appel à « naked_asm! ». Les fonctions créées de cette manière n'ont pas d'épilogue et de prologue générés par le compilateur, permettant au développeur de contrôler entièrement le code assembleur de service attaché à la fonction (une fonction « nue » contient uniquement les instructions assembleur spécifiées par le développeur et n'inclut pas de gestionnaires spéciaux pour les arguments et les valeurs retournées ajoutées par le compilateur). Les fonctions « nues » sont considérées comme une alternative plus confortable aux fonctions définies dans le bloc « global_asm! ». #[unsafe(naked)] pub unsafe extern «sysv64» fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( «add rax, rdi, rsi», «ret» ); }
- Le langage de prédicats, utilisé dans les attributs de compilation conditionnelle « cfg » et « cfg_attr » (qui permettent d'activer ou de désactiver des parties du code en fonction de conditions données), a été complété par la prise en charge des littéraux booléens « true » et « false », qui sont identifiés avec des configurations toujours activées ou toujours désactivées. Ces littéraux peuvent également être utilisés dans le macro « cfg! » et dans les tables « [target] » dans les manifestes et configurations pour Cargo. Les expressions cfg(true) et cfg(false) peuvent être utilisées à la place de cfg(all()) et cfg(any()) pour exprimer plus clairement leurs intentions.
- Le gestionnaire de paquets Cargo inclut un lancement automatique du ramasse-miettes pour nettoyer le cache dans le répertoire personnel de l'utilisateur. Auparavant, les paquets sauvegardés dans le cache avec les dépendances chargées n'étaient pas supprimés, ce qui entraînait une augmentation continue de la consommation d'espace disque. Le mécanisme de ramasse-miettes actif supprimera automatiquement les fichiers crate téléchargés depuis l'extérieur qui n'ont pas été utilisés depuis plus de 3 mois, ainsi que les fichiers crate installés localement qui n'ont pas été consultés depuis plus d'un mois. Le nettoyage du cache ne se lance pas lors de l'utilisation des options « —offline » ou « —frozen » dans cargo.
- 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 :
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- hint::select_unpredictable
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
- ::as_chunks
- ::as_rchunks
- ::as_chunks_unchecked
- ::as_chunks_mut
- ::as_rchunks_mut
- ::as_chunks_unchecked_mut
- L'attribut «const» est appliqué dans les fonctions :
- NonNull::replace
- ::replace
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Cell::as_slice_of_cells
- Le premier niveau de support de la plateforme cible i686-pc-windows-gnu a été supprimé.
On peut également noter les événements liés à Rust :
- Le projet Munal OS développe un système d'exploitation expérimental, écrit en Rust et basé sur le concept de unikernel. Dans Munal OS, aucun multitâche préemptif, aucun mappage de pages mémoire et aucun espace d'adressage virtuel n'est utilisé (la mise en page mémoire est assurée par UEFI). Le noyau et les applications s'exécutent dans un même espace d'adressage en utilisant un modèle de sécurité basé sur l'isolation sandbox de WASM (incluant le moteur wasmi pour exécuter des applications sous forme de bytecode WebAssembly).
Le système d'exploitation dispose d'une interface graphique et prend en charge la gestion via le clavier et la souris. Pour le développement d'applications graphiques, un toolkit propriétaire avec une bibliothèque de widgets est utilisé. Pour l'interaction réseau, une pile TCP et un pilote de périphérique réseau sont proposés. Parmi les applications disponibles pour Munal OS : un navigateur web avec un support de base pour HTML et HTTPS, un éditeur de texte et un terminal pour exécuter du code en Python. Le code est ouvert sous la licence MIT.

- La version du noyau Asterinas 0.15.2 a été lancée, écrite en Rust et offrant une ABI compatible avec le noyau Linux. Ce noyau prend en charge les architectures x86-64 et RISC-V, et implémente 206 des 368 appels systèmes de Linux. Le développement du noyau implique 45 développeurs, principalement de diverses universités chinoises. Le noyau est construit en utilisant l'architecture « framekernel », où les composants du noyau sont placés dans un espace d'adresse commun, et la sécurité est obtenue par une séparation logique du code sûr et du code où des problèmes de sécurité peuvent survenir. Tous les appels systèmes, systèmes de fichiers et pilotes sont implémentés au niveau des OS Services et ne peuvent inclure des blocs unsafe. Le code est distribué sous la licence MPL 2.0.
- Pour le noyau Linux, l'outil rsched a été développé, permettant d'analyser les statistiques du planificateur de tâches. En pratique, cet outil permet d'évaluer les décisions du planificateur concernant la fourniture de ressources aux processus, ainsi que de suivre les délais qui surviennent lors de la planification. Pour collecter des données dans le noyau, le sous-système BPF est utilisé, et l'outil fonctionnant en espace utilisateur est écrit en Rust. L'auteur de l'outil est Chris Mason, créateur et architecte principal du système de fichiers Btrfs.
- La société Collabora a annoncé le développement d'une variante de l'outil Coccinelle pour le langage Rust. Coccinelle est initialement destiné à automatiser la recherche et la transformation de code en C dans le noyau Linux. Les transformations sont spécifiées sous forme de règles, ressemblant à des patchs abstraits, non liés à une position particulière dans le code.
- Les développeurs de GNOME ont présenté une bibliothèque pour le chargement d'images, glycin, écrite en Rust et assurant le décodage des images avec une isolation sandbox. La restitution du contenu décodé est prise en charge via gdk::Textures et extraction des métadonnées. Des liaisons pour utiliser glycin dans GTK4 sont fournies, ainsi qu'un backend pour intégrer glycin dans la bibliothèque GdkPixbuf, qui est utilisée dans GNOME pour charger des images. Glycin est déjà utilisé dans le visualiseur d'images Loupe, proposé par défaut dans GNOME. De plus, le backend pour GdkPixbuf permet d'utiliser glycin dans GNOME Shell, les générateurs de miniatures et d'autres applications GNOME, sans modifications apportées à ces programmes.
Source : opennet.ru

