Version du langage de programmation Rust 1.66

La sortie du langage de programmation polyvalent Rust 1.66, 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 :

  • Dans les énumérations avec des représentations entières (l'attribut "#[repr(Int)]"), l'indication explicite du discriminant (numéro de variante dans l'énumération) est autorisée, même si l'énumération contient des champs. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Ajout de la fonction core::hint::black_box qui renvoie simplement la valeur reçue. Étant donné que le compilateur pense que cette fonction fait quelque chose, la fonction black_box peut être utilisée pour désactiver les optimisations du compilateur pour les boucles lors de l'exécution des tests de performances du code ou lors de l'examen du code machine généré (afin que le compilateur ne considère pas le code inutilisé et le supprime). Par exemple, dans l'exemple ci-dessous, black_box(v.as_ptr()) empêche le compilateur de penser que le vecteur v n'est pas utilisé. utilisez std::hint::black_box ; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Le gestionnaire de packages "cargo" propose la commande "remove", qui permet de supprimer les dépendances du manifeste Cargo.toml depuis la ligne de commande.
  • 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 :
    • proc_macro :: Span :: source_text
    • u* ::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i* ::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i* ::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wraping_sub_unsigned}
    • BTreeSet ::{first, last, pop_first, pop_last}
    • BTreeMap ::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Ajoutez des implémentations AsFd pour les types de verrous stdio lors de l'utilisation de WASI.
    • implémenter TryFrom > pour Boîte<[T ; N]>
    • core :: indice :: black_box
    • Durée ::try_from_secs_{f32,f64}
    • Option :: décompresser
    • std :: os :: fd
  • Les plages "..X" et "..=X" sont autorisées dans les modèles.
  • Lors de la construction du frontal du compilateur rustc et du backend LLVM, les modes d'optimisation LTO (Link Time Optimization) et BOLT (Binary Optimization and Layout Tool) sont utilisés pour augmenter les performances du code résultant et réduire la consommation de mémoire.
  • Prise en charge de niveau 5 implémentée pour les plates-formes armv5te-none-eabi et thumbvXNUMXte-none-eabi. Le troisième niveau implique un support de base, mais sans tests automatisés, publication de versions officielles et vérification de la capacité à créer le code.
  • Ajout de la prise en charge de la liaison aux bibliothèques génériques macOS.

De plus, on peut noter l'inclusion dans la base de code GCC du compilateur frontal du langage Rust (gccrs). L'interface est incluse dans la branche GCC 13, qui sortira en mai 2023. À partir de GCC 13, la boîte à outils GCC standard pourra être utilisée pour compiler des programmes Rust sans avoir besoin d'installer le compilateur rustc construit à l'aide des développements LLVM. L'implémentation de Rust dans GCC 13 sera en version bêta, non activée par défaut.

Source: opennet.ru

Ajouter un commentaire