Sortie de Rust 1.92. Projets Rust pour l'interface graphique, l'isolation de bac à sable et la création de firmwares

La version 1.92 du langage de programmation Rust, à l'origine développé par Mozilla, est désormais soutenue par l'organisation indépendante à but non lucratif Rust Foundation. Ce langage se concentre sur la sécurité de la gestion de la mémoire et propose 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 à 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 :

  • La stabilisation du type « never », désigné par le symbole « ! » et définissant des calculs qui ne retournent jamais de valeur, se poursuit (par exemple, la fonction « exits », le macro « panic! » et les boucles infinies ne retournent jamais le contrôle). Dans cette nouvelle version, les vérifications Lint « never_type_fallback_flowing_into_unsafe » et « dependency_on_unit_never_type_fallback » passent par défaut de la génération d'avertissements à celle de la génération d'erreurs de compilation. Ces vérifications se déclenchent en cas de problèmes dans le code liés à l'utilisation du type « never ».

    Selon une estimation préliminaire, des problèmes similaires se trouvent dans environ 500 packages crate. L'activation des vérifications lint permettra de se préparer à la stabilisation du type « never », actuellement considéré comme une fonctionnalité expérimentale. Les vérifications lint ne s'appliquent qu'à la compilation directe des packages et ne se manifestent pas lors de la compilation des dépendances. Elles peuvent également être désactivées via l'attribut « #[allow] ».

  • Le comportement de la vérification lint « unused_must_use », qui se déclenche lors de l'ignorance de la valeur renvoyée par une fonction si celle-ci ou le type de retour sont marqués avec l'attribut « #[must_use] », a été modifié. Dans la nouvelle version, les avertissements concernant l'ignorance des valeurs retournées par les types Result et ControlFlow, où l'état d'erreur est déterminé par un type sans valeur (« ! » ou « Infallible »), ne sont plus affichés. Par exemple, « fn can_never_fail() -> Result {…} ».
  • Le comportement du flag « -Cpanic=abort » a été modifié; lorsque ce flag est activé, la génération par défaut des tables de dépliage pour réaliser un backtrace est incluse. Pour revenir à l'ancien comportement, l'option « -Cforce-unwind-tables=no » est disponible.
  • Le contrôle des arguments de l'attribut « #[macro_export] » a été renforcé. Lorsqu'un attribut non valide est spécifié, une erreur sera affichée au lieu d'un avertissement. Les problèmes avec « #[macro_export] » seront vérifiés non seulement lors de la compilation directe d'un package crate, mais également lors de la compilation des dépendances.
  • Dans le code sécurisé, il est permis d'obtenir des pointeurs bruts («&raw [mut | const]») sur des champs dans des types union.
  • Un support de liaison dynamique a été mis en œuvre pour la plateforme cible mips64el-unknown-linux-muslabi64.
  • La version minimale prise en charge des outils externes LLVM a été élevée à la branche LLVM 20.
  • 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 :
    • NonZero::div_ceil
    • Location::file_as_c_str
    • RwLockWriteGuard::downgrade
    • Box::new_zeroed
    • Box::new_zeroed_slice
    • 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 for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
  • L'attribut «const» est appliqué dans les fonctions :
    • ::rotate_left
    • ::rotate_right
  • Le gestionnaire de paquets Cargo a assuré la répétition de l'opération «git fetch» en cas d'échec de la première requête. Des composants ont été ajoutés pour l'intégration avec l'émulateur de terminal Ghostty. Un nouveau chapitre sur l'optimisation du processus de construction a été ajouté à la documentation.

De plus, on peut noter les projets et événements récemment annoncés liés à Rust :

  • L'entreprise Ferrocene a annoncé avoir obtenu la certification IEC 61508 (SIL 2) pour la bibliothèque libcore, qui inclut un sous-ensemble d'appels de la bibliothèque standard de base Rust. La certification confirme la conformité de la bibliothèque aux exigences des systèmes industriels critiques. Ferrocene est connue pour la création d'outils de développement en Rust pour des applications destinées aux systèmes critiques, ainsi que pour le maintien de la spécification FLS (Ferrocene Language Specification), sur la base de laquelle la spécification de référence pour Rust est développée.
  • La version 0.14 de la bibliothèque Iced pour la création d'interfaces graphiques utilisateur utilisant le modèle de programmation réactive a été publiée. Iced implémente une architecture familière pour les développeurs connaissant le langage de construction d'interfaces déclaratif Elm. Un ensemble complet de widgets est proposé avec la possibilité de créer des gestionnaires asynchrones et d'appliquer une disposition adaptative des éléments de l'interface en fonction de la taille de la fenêtre et de l'écran. Plusieurs moteurs de rendu supportant Vulkan, Metal et DX12 sont fournis. Parmi les grands projets utilisant Iced, on peut noter l'environnement de bureau COSMIC.

    La nouvelle version inclut des widgets «table», «grid», «sensor», «float» et «pin», ainsi que des améliorations des fonctionnalités du widget pour travailler avec le format Markdown. Les fonctionnalités mises en œuvre incluent : le mode de rendu réactif ; des barres de défilement apparaissant au besoin ; une API pour l'animation ; le support des méthodes d'entrée ; le mode headless ; la possibilité d'apporter des modifications sans arrêter l'application (hot reloading) ; le décalage du décodage des images ; des outils pour le débogage et le profilage des performances.

  • Le projet Ribir développe une bibliothèque pour créer des applications multiplateformes avec une interface graphique, permettant d'utiliser une base de code commune pour former des applications graphiques sur différentes plateformes (Linux, Windows, macOS, avec des plans pour Android et iOS). Un langage déclaratif pour construire l'interface basé sur les macros Rust est disponible, ainsi que plus de 20 widgets, des thèmes et un rendu basé sur wgpu.
  • Un utilitaire nommé Island a été présenté, conçu pour le lancement isolé d'applications. Pour l'isolement sandbox, le mécanisme Landlock est utilisé. Island permet de créer des règles au format TOML et de les appliquer pour isoler les fichiers exécutables existants à l'aide de Landlock, sans nécessiter de modifications du code. Contrairement à Firejail, l'utilitaire Island ne requiert pas de droits root ni de privilèges spéciaux.
  • Google a présenté Wasefire, un outil de développement de firmwares sécurisés écrit en Rust. L'idée principale est de lancer des gestionnaires isolés (applet) au-dessus de l'environnement de base du firmware (plateforme). Le développement du firmware n'est pas lié aux langages de programmation — des composants du firmware peuvent être fournis au format WebAssembly avec les extensions WASI (WebAssembly System Interface) et exécutés à l'aide de Wasmtime.
  • La version 18 du firmware UEFI Patina, écrit en Rust, a été publiée. Patina remplace les composants de base du firmware UEFI et peut être utilisé pour migrer progressivement les firmwares existants écrits en C vers l'utilisation du langage Rust.
  • Le projet Brimstone développe un nouveau moteur JavaScript, écrit de zéro en Rust. Actuellement, plus de 97 % des fonctionnalités d'ECMAScript 2026 sont déjà prises en charge. La machine virtuelle pour exécuter le bytecode a été conçue en tenant compte de l'architecture du moteur V8.
  • Le projet Catten développe le noyau pour le système d'exploitation expérimental CharlotteOS, écrit en Rust. Ce noyau prend en charge la gestion des accès basée sur les "capabilities" (similaire à Fuchsia) et utilise une hiérarchie de ressources distribuée semblable à celle de Plan 9, avec une adressage des chemins de fichiers par URI.
  • La version 4.2.0 de l'interpréteur de commandes interactif Fish (friendly interactive shell) a été publiée. La branche 4.x se distingue par la traduction complète de la base de code du C++ vers Rust.
  • L'entreprise Cloudflare a ouvert le code de la bibliothèque Rust tokio-quiche, permettant d'intégrer le support des protocoles QUIC et HTTP/3 dans des applications asynchrones basées sur le framework Tokio.
  • Le projet Tor a publié les versions 1.7 et 1.8 d'Arti, une implémentation de l'outil Tor écrit en Rust. Lorsque le code d'Arti atteindra un niveau capable de remplacer complètement la version en C, les développeurs de Tor prévoient de faire d'Arti l'implémentation principale de Tor et de cesser progressivement le support de la version en C.

    La nouvelle version stabilise l'implémentation d'une définition restreinte des services onion utilisant l'autorisation client (« restricted-discovery »). En plus du proxy SOCKS, un support pour le proxy HTTP utilisant la méthode CONNECT a été ajouté. Une gestion adaptative des délais d'attente a été mise en place en fonction de la charge. Un support expérimental pour tokio-console a été intégré. Le développement des fonctionnalités pour les relais et les serveurs directoires (Directory Authority) se poursuit. La commande « arti hsc ctor-migrate » a été ajoutée pour transférer les clés du client C vers le magasin de clés d'Arti. Des paramètres pour gérer le lancement des services onion ont été ajoutés.

  • La base de données RustDB a été publiée, créée en Rust sous l'influence de PostgreSQL. Les opérations SQL de base (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), les transactions, le MVCC, le WAL (Write-Ahead Log), les index et la connexion via un protocole compatible avec PostgreSQL sont pris en charge. L'AI a été utilisée lors du développement de RustDB.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster