Rust 1.92 est disponible. Projets Rust pour le développement d'interfaces graphiques, de bacs à sable et de firmware.

Le langage de programmation Rust 1.92, fondé par le projet Mozilla mais désormais développé sous l'égide de la Fondation Rust, une organisation indépendante à but non lucratif, est disponible. Ce langage met l'accent sur la sécurité de la mémoire et fournit des outils permettant d'obtenir un parallélisme élevé dans l'exécution des tâches, sans recourir à un ramasse-miettes ni à un environnement d'exécution (l'environnement d'exécution se limitant à l'initialisation et à la maintenance de la bibliothèque standard).

Les méthodes de gestion de la mémoire de Rust évitent au développeur les erreurs lors de la manipulation des pointeurs et protègent contre les problèmes qui surviennent en raison de la gestion de la mémoire de bas niveau, comme l'accès à une zone mémoire après qu'elle a été libérée, le déréférencement des pointeurs nuls, les dépassements de mémoire tampon, etc. Pour distribuer les bibliothèques, fournir des builds et gérer les dépendances, le projet développe le gestionnaire de packages Cargo. Le référentiel crates.io est pris en charge pour l'hébergement de bibliothèques.

La sécurité de la mémoire est fournie dans Rust au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets, au suivi des durées de vie des objets (portées) et à l'évaluation de l'exactitude de l'accès à la mémoire pendant l'exécution du code. Rust fournit également une protection contre les débordements d'entiers, nécessite une initialisation obligatoire des valeurs de variables avant utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept de références et de variables immuables par défaut, propose un typage statique fort pour minimiser les erreurs logiques.

Principales nouveautés :

  • Le type « never », indiqué par le symbole « ! » et définissant les calculs qui ne se terminent jamais (par exemple, la fonction « exits », la macro « panic! » et les boucles infinies), a continué d'être stabilisé. Dans la nouvelle version, les vérifications Lint « never_type_fallback_flowing_into_unsafe » et « dependency_on_unit_never_type_fallback » génèrent désormais des erreurs de compilation par défaut au lieu d'avertissements. Ces vérifications sont déclenchées lorsque des problèmes sont détectés dans le code utilisant le type « never ».

    D'après les premières estimations, environ 500 paquets crate présentent des problèmes similaires. L'activation des vérifications de code (lint) contribuera à la stabilisation du type « never », actuellement considéré comme une fonctionnalité expérimentale. Ces vérifications ne sont déclenchées que lors de la compilation directe des paquets et n'affectent pas la compilation des dépendances. Elles peuvent également être désactivées à l'aide de l'attribut « #[allow] ».

  • Le comportement de la vérification de lint « unused_must_use », déclenchée lorsqu'une valeur de retour est ignorée si la fonction ou le type de retour est marqué avec l'attribut « #[must_use] », a été modifié. La nouvelle version ne génère plus d'avertissements concernant l'ignorance des valeurs de retour pour les types Result et ControlFlow, lorsque l'état d'erreur est déterminé par un type sans valeur (« ! » ou « Infallible »). Par exemple : « fn can_never_fail() -> Result<(), Infallible> {…} ».
  • Le comportement de l'option « -Cpanic=abort », qui, lorsqu'elle est spécifiée, active la génération par défaut des tables de déroulement pour le traçage des erreurs, a été modifié. L'option « -Cforce-unwind-tables=no » permet de rétablir le comportement précédent.
  • La validation des arguments de l'attribut « #[macro_export] » a été renforcée. La spécification d'attributs invalides entraînera désormais une erreur au lieu d'un avertissement. Les problèmes liés à « #[macro_export] » seront vérifiés non seulement lors de la création directe des paquets crate, mais aussi lors de la création des dépendances.
  • Dans le code sûr, il est autorisé d'obtenir des pointeurs bruts («&raw [mut | const]») vers des champs dans des types union.
  • La prise en charge de la liaison dynamique a été implémentée pour la plateforme cible mips64el-unknown-linux-muslabi64.
  • La version minimale requise de la chaîne d'outils externes LLVM a été mise à jour vers la branche LLVM 20.
  • Une nouvelle partie de l'API a été déplacée vers la catégorie stable, dont les méthodes et les implémentations des traits ont été stabilisées :
    • Non-zéro ::div_ceil
    • Emplacement::file_as_c_str
    • RwLockWriteGuard::downgrade
    • Boîte::new_zeroed
    • Boîte::nouvelle_tranche_zéro
    • Rc::new_zeroed
    • Rc::new_zeroed_slice
    • Arc::new_zeroed
    • Arc::new_zeroed_slice
    • btree_map::Entry::insert_entry
    • btree_map::VacantEntry::insert_entry
    • impl Extend pour proc_macro::TokenStream
    • impl Extend pour proc_macro::TokenStream
    • impl Extend pour proc_macro::TokenStream
    • impl Extend pour proc_macro::TokenStream
  • Le signe « const » est utilisé dans les fonctions :
    • <[_]>::rotate_left
    • <[_]>::rotate_right
  • Le gestionnaire de paquets Cargo relance désormais la commande « git fetch » en cas d'échec de la première requête. Des composants pour l'intégration avec l'émulateur de terminal Ghostty ont été ajoutés. Un nouveau chapitre sur l'optimisation du processus de compilation a été ajouté au manuel.

Par ailleurs, nous souhaitons mettre en lumière les projets et événements récemment annoncés en lien avec Rust :

  • Ferrocene a annoncé la certification IEC 61508 (SIL 2) pour sa bibliothèque libcore, qui inclut un sous-ensemble d'appels de la bibliothèque de base standard Rust. Cette certification confirme la conformité de la bibliothèque aux exigences des systèmes industriels critiques. Ferrocene est reconnu pour la création de kits d'outils facilitant le développement d'applications Rust pour les systèmes critiques de sécurité (SCS) et pour la maintenance de la spécification du langage Ferrocene (FLS), qui sert de base à la spécification de référence de Rust.
  • Iced 0.14, une bibliothèque permettant de créer des interfaces graphiques utilisateur à l'aide d'un modèle de programmation réactive, est désormais disponible. Iced implémente une architecture familière aux développeurs connaissant le langage d'interface déclaratif Elm. Elle propose un ensemble de widgets prêts à l'emploi, avec la possibilité de créer des gestionnaires asynchrones et d'adapter la disposition des éléments d'interface à la taille de la fenêtre et de l'écran. Plusieurs moteurs de rendu sont disponibles, compatibles avec Vulkan, Metal et DirectX 12. Parmi les principaux projets utilisant Iced figure l'environnement de bureau COSMIC.

    La nouvelle version ajoute les widgets « table », « grid », « sensor », « float » et « pin », ainsi que des fonctionnalités étendues pour la prise en charge de Markdown. Les fonctionnalités suivantes ont été implémentées : rendu réactif ; barres de défilement apparaissant à la demande ; API d’animation ; prise en charge des méthodes de saisie ; mode sans interface graphique ; possibilité d’effectuer des modifications sans interrompre l’application (rechargement à chaud) ; décodage d’images en parallèle ; et outils de débogage et de profilage des performances.

  • Le projet Ribir développe une bibliothèque pour la création d'applications GUI multiplateformes, permettant d'utiliser un code source unique pour concevoir des applications GUI pour différentes plateformes (Linux, Windows, macOS, et prochainement Android et iOS). Un langage d'interface déclaratif basé sur les macros Rust, plus de 20 widgets, des thèmes et un moteur de rendu basé sur wgpu sont disponibles.
  • Island, un utilitaire conçu pour l'exécution d'applications en environnement isolé (sandbox), est présenté. Il utilise le mécanisme Landlock pour l'isolation. Island permet de créer des règles au format TOML et de les appliquer aux exécutables Landlock existants sans modifier le code source. Contrairement à Firejail, Island ne requiert ni privilèges root ni autorisations particulières.
  • Google a lancé Wasefire, une boîte à outils basée sur Rust pour le développement de firmwares sécurisés. Le principe est d'exécuter des gestionnaires (applets) distincts et isolés au-dessus de l'environnement (plateforme) du firmware sous-jacent. Le développement de firmwares est indépendant du langage : les composants peuvent être fournis en WebAssembly avec des extensions WASI (WebAssembly System Interface) et exécutés avec Wasmtime.
  • Patina 18, un firmware UEFI écrit en Rust, est disponible. Patina remplace les composants essentiels du firmware UEFI et permet de migrer progressivement les firmwares existants écrits en C vers Rust.
  • Le projet Brimstone développe un nouveau moteur JavaScript, entièrement écrit en Rust. Dans sa version actuelle, il prend déjà en charge plus de 97 % des fonctionnalités d'ECMAScript 2026. La machine virtuelle d'exécution du bytecode est basée sur l'architecture du moteur V8.
  • Le projet Catten développe un noyau pour le système d'exploitation expérimental CharlotteOS, écrit en Rust. Ce noyau prend en charge le contrôle d'accès basé sur les capacités (similaire à Fuchsia) et utilise une hiérarchie de ressources distribuée similaire à Plan 9, avec des chemins de fichiers adressés par des URI.
  • Fish 4.2.0, un interpréteur de commandes interactif et convivial, est disponible. La branche 4.x se distingue par la migration complète de son code source de C++ vers Rust.
  • Soundflare a rendu open source la bibliothèque Rust tokio-quiche afin d'intégrer la prise en charge de QUIC et HTTP/3 dans les applications asynchrones basées sur le framework Tokyo.
  • Le projet Tor a publié Arti 1.7 et 1.8, une implémentation en Rust de la chaîne d'outils Tor. Une fois que le code source d'Arti sera suffisamment avancé pour remplacer complètement l'implémentation en C, les développeurs de Tor prévoient d'en faire l'implémentation principale et d'abandonner progressivement la maintenance de l'implémentation en C.

    La nouvelle version stabilise l'implémentation de la découverte restreinte pour les services Onion utilisant l'autorisation client (« restricted-discovery »). Outre les proxys SOCKS, la prise en charge des proxys HTTP utilisant la méthode CONNECT a été ajoutée. Des délais d'expiration adaptatifs ont été implémentés en fonction de la charge. Une prise en charge expérimentale de tokio-console a été ajoutée. Développement de fonctionnalités pour les relais et les serveurs Répertoires (Autorité des répertoires). Ajout de la commande « arti hsc ctor-migrate » pour migrer les clés du client C vers le magasin de clés Arti. Ajout de paramètres pour la gestion du lancement des services Onion.

  • RustDB, un système de gestion de bases de données (SGBD) inspiré de PostgreSQL et écrit en Rust, est désormais disponible. Il prend en charge les opérations SQL de base (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), les transactions, MVCC, le journal de transactions (WAL), les index et la connectivité via un protocole compatible PostgreSQL. RustDB a été développé à l'aide de l'intelligence artificielle.

Source: opennet.ru

Ajouter un commentaire