Sortie de Rust 1.79. Création d'un consortium pour le développement de systèmes hautement fiables sur Rust

La version 1.79 du langage de programmation général Rust, à l'origine un projet de Mozilla et désormais développé sous l'égide d'une organisation indépendante à but non lucratif, la Rust Foundation, a été publiée. Ce langage se concentre sur une manipulation sécurisée de la mémoire et fournit des moyens d'atteindre un haut niveau de parallélisme des tâches, tout en évitant l'utilisation d'un ramasse-miettes et d'un runtime (qui se limite à une 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 :

  • Le support des constantes inline a été ajouté, permettant d'indiquer directement dans le code à l'aide de blocs « const { … } » qui sont traités dans le contexte des constantes, éliminant ainsi la nécessité de définir des constantes séparément. Le code indiqué dans le bloc « const { … } » est évalué au moment de la compilation et utilisé comme constante, sans exécution pendant l'exécution du programme. Contrairement à la définition de constantes par l'expression « const ITEM: … = … », il n'est pas nécessaire d'indiquer de type dans les blocs « const { … } » car ils gèrent automatiquement l'inférence de type. Par exemple, le code avec une définition séparée de constante

    const EMPTY: Option<Vec> = None;
    let foo = [EMPTY; 100];

    peut être remplacé par une utilisation sur place :

    let foo = [const { None }; 100];

  • La syntaxe « T: Trait » pour définir des contraintes dans une position de type associatif a été stabilisée, ce qui permet de simplifier la définition d'expressions avec des contraintes de type imbriquées qui nécessitaient auparavant d'indiquer un impl Trait imbriqué ou plusieurs conditions « where ».
  • Le prolongement automatique de la durée de vie des valeurs temporaires utilisées dans les constructions « match » et « if » a été assuré.

    let a = if true {
    ..;
    &temp() // la durée de vie sera prolongée
    } else {
    ..;
    &temp() // la durée de vie sera prolongée
    };

  • La possibilité d'importer la fonction main depuis d'autres modules et packages crate a été stabilisée.
  • Lors de la compilation de la bibliothèque standard, un drapeau « -Cforce-frame-pointers=yes » est utilisé dans le compilateur, ajoutant des données pour la reconstruction de la pile lors du profilage des programmes.
  • 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 :
    • {integer}::unchecked_add
    • {integer}::unchecked_mul
    • {integer}::unchecked_sub
    • ::split_at_unchecked
    • ::split_at_mut_unchecked
    • ::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • ::is_aligned
    • ::is_aligned
    • NonNull::is_aligned
    • ::len
    • ::len
    • ::is_empty
    • ::is_empty
    • NonNull::::is_empty
    • CStr::count_bytes
    • io::Error::downcast
    • num::NonZero
    • path::absolute
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • Le mot-clé «const», qui détermine la possibilité d'utilisation dans n'importe quel contexte à la place des constantes, est utilisé dans les fonctions :
    • Atomic*::into_inner
    • io::Cursor::new
    • io::Cursor::get_ref
    • io::Cursor::position
    • io::empty
    • io::repeat
    • io::sink
    • panic::Location::caller
    • panic::Location::file
    • panic::Location::line
    • panic::Location::column
  • Stabilisé
    une partie des fonctionnalités pouvant être utilisées lors de la compilation en représentation intermédiaire Webassembly (WASM).
  • Un troisième niveau de support a été mis en œuvre pour les plateformes aarch64-apple-visionos, aarch64-apple-visionos-sim et riscv32ima-unknown-none-elf. Le troisième niveau implique un support de base, mais sans tests automatisés, publication de versions officielles et vérification de la possibilité de compilation du code.
  • Un deuxième niveau de support a été mis en œuvre pour les plateformes cibles aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm et x86_64-pc-windows-gnullvm. Le deuxième niveau de support implique une garantie de compilation.

De plus, l'organisation Rust Foundation, qui supervise l'écosystème associé au langage Rust, a annoncé la création d'un consortium « Safety-Critical Rust Consortium », visant à utiliser le langage Rust dans des solutions nécessitant une fiabilité accrue (Safety-Critical Software), dont les échecs peuvent menacer des vies humaines, nuire à l'environnement ou causer des dommages matériels graves. Le consortium compte parmi ses membres des entreprises telles qu'ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle et Woven by Toyota. Parmi les tâches à accomplir par le consortium, on mentionne la rédaction de guides et le développement de bibliothèques, de linters et d'analysateurs statiques, ainsi que l'application de méthodes de vérification formelle de la fiabilité et le développement de sous-ensembles du langage pour des systèmes hautement fiables.

Parmi les projets liés aux systèmes hautement fiables, on peut citer Verus — un outil pour vérifier la correction du code écrit en Rust. La vérification s'effectue par la définition d'une spécification décrivant le comportement acceptable du code. Pendant l'exécution du code compilé, Verus vérifie la conformité à la spécification pour confirmer la correction du fonctionnement.

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