Version du langage de programmation Rust 1.65

La sortie du langage de programmation polyvalent Rust 1.65, fondé par le projet Mozilla, mais maintenant développé sous les auspices de l'organisation indépendante à but non lucratif Rust Foundation, a été publiée. Le langage se concentre sur la sécurité de la mémoire et fournit les moyens d'atteindre un parallélisme élevé des tâches tout en évitant l'utilisation d'un ramasse-miettes et d'un temps d'exécution (le temps d'exécution est réduit à l'initialisation et à la maintenance de base 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 :

  • Ajout du support des types associés génériques (GAT, Generic Associated Types), qui permettent de créer des alias de type associés à un autre type et d'associer des constructeurs de types à des traits. trait Foo { type Bar<'x>; }
  • L'expression « let ... else » a été implémentée, vous permettant de vérifier la condition de correspondance de modèle directement à l'intérieur de l'expression « let » et d'exécuter du code arbitraire si le modèle ne correspond pas. let Ok(count) = u64::from_str(count_str) else { panic!("Impossible d'analyser l'entier : '{count_str}'"); } ;
  • Autorisez l'utilisation d'une instruction break pour quitter prématurément les blocs nommés, en utilisant le nom du bloc (étiquette) pour identifier le bloc à terminer. let result = 'block: { do_thing(); if condition_not_met() { break 'bloc 1 ; } do_next_thing(); if condition_not_met() { break 'bloc 2 ; } do_last_thing(); 3} ;
  • Pour Linux, la possibilité d'enregistrer séparément les informations de débogage (split-debuginfo), auparavant disponible uniquement pour la plate-forme macOS, a été ajoutée. Lors de la spécification de l'option "-Csplit-debuginfo=unpacked", les données debuginfo au format DWARF seront enregistrées dans plusieurs fichiers objets distincts avec une extension ".dwo". Spécifier "-Csplit-debuginfo=packed" créera un seul package au format ".dwp" qui inclut toutes les données debuginfo du projet. Pour intégrer debuginfo directement dans la section .debug_* des objets ELF, vous pouvez utiliser l'option "-Csplit-debuginfo=off".
  • 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 :
    • std :: backtrace :: Backtrace
    • Lié ::as_ref
    • std :: io :: read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • L'attribut « const », qui détermine la possibilité de l'utiliser dans n'importe quel contexte à la place des constantes, est utilisé dans les fonctions <*const T&>::offset_from et <*mut T>::offset_from
  • Dans le cadre de la dernière étape du transfert de l'implémentation du protocole LSP (Language Server Protocol) vers rust-analyzer, l'implémentation obsolète de Rust Language Server (RLS) a été remplacée par un serveur stub qui émet un avertissement avec une suggestion de passer à à l'aide d'un analyseur de rouille.
  • Lors de la compilation, la prise en charge du déploiement en ligne du code intermédiaire MIR est activée, ce qui accélère la compilation des packages de caisse typiques de 3 à 10 %.
  • Pour accélérer les builds planifiés, le gestionnaire de packages Cargo permet de trier les tâches en attente d'exécution dans la file d'attente.

De plus, vous pouvez noter l'interview sur l'utilisation du langage Rust chez Volvo pour développer des composants de systèmes d'information automobiles. Il n'est pas prévu de réécrire le code existant et testé dans Rust, mais pour le nouveau code, Rust est l'une des options privilégiées pour améliorer la qualité à moindre coût. Des groupes de travail liés à l'utilisation du langage Rust ont également été créés au sein des associations automobiles AUTOSAR (AUTomotive Open System ARchitecture) et SAE (Society of Automotive Engineers).

De plus, David Kleidermacher, vice-président de l'ingénierie de Google, a parlé de la traduction du code utilisé dans la plateforme Android pour gérer les clés de chiffrement vers Rust, ainsi que de l'utilisation de Rust dans la mise en œuvre du protocole DNS sur HTTPS dans la pile. pour les puces UWB (Ultra-Wideband) et dans le framework de virtualisation (Android Virtualization Framework) associé à la puce Tensor G2. De nouvelles piles pour Bluetooth et Wi-Fi, réécrites en Rust, sont également en cours de développement pour Android. La stratégie générale consiste à renforcer progressivement la sécurité, d’abord en convertissant les composants logiciels les plus vulnérables et les plus vitaux vers Rust, puis en les étendant à d’autres sous-systèmes associés. L'année dernière, le langage Rust a été inclus dans la liste des langages autorisés pour développer la plateforme Android.

Source: opennet.ru

Ajouter un commentaire