Version du langage de programmation Rust 1.60

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

  • Le compilateur rustc dispose d'un système stabilisé basé sur LLVM pour générer des données de couverture utilisées pour évaluer la couverture du code pendant les tests. Pour activer les données de couverture pendant l'assemblage, vous devez utiliser l'indicateur « -Cinstrument-coverage », par exemple en démarrant l'assemblage avec la commande « RUSTFLAGS= »-C instrument-coverage » cargo build ». Après avoir exécuté le fichier exécutable ainsi compilé, le fichier default.profraw sera enregistré dans le répertoire courant, pour le traitement que vous pourrez utiliser l'utilitaire llvm-profdata du composant llvm-tools-preview. La sortie traitée par llvm-profdata peut ensuite être transmise à llvm-cov pour générer un rapport de couverture de code annoté. Les informations sur le lien vers le code source sont extraites du fichier exécutable en cours d'examen, qui comprend les données nécessaires sur la connexion entre les compteurs de couverture et le code. 1| 1|fn main() { 2| 1| println!("Bonjour tout le monde !"); 3| 1|}
  • Dans le gestionnaire de colis cargo, la prise en charge du flag « -timings » a été stabilisée, ce qui inclut la génération d'un rapport détaillé sur l'avancement de la construction et le temps d'exécution de chaque étape. Le rapport peut être utile pour optimiser les performances du processus d'assemblage.
  • Le gestionnaire de packages cargo propose une nouvelle syntaxe pour le mécanisme de compilation conditionnelle et de sélection de dépendances facultatives, configurée dans le fichier Cargo.toml en répertoriant une liste de propriétés nommées dans la section [features] et activée en activant les propriétés lors de la construction du package. en utilisant l'indicateur "--features". La nouvelle version ajoute la prise en charge des dépendances dans des espaces de noms séparés et des dépendances faibles.

    Dans le premier cas, il est possible d'utiliser des éléments avec le préfixe « dep: » à l'intérieur de la section « [features] » pour créer un lien explicite vers une dépendance facultative sans représenter implicitement cette dépendance comme une fonctionnalité. Dans le second cas, la prise en charge du marquage avec le signe « ? » a été ajoutée. ("package-name?/feature-name") dépendances facultatives qui ne doivent être incluses que si une autre propriété inclut la dépendance facultative donnée. Par exemple, dans l'exemple ci-dessous, l'activation de la propriété serde activera la dépendance "serde", ainsi que la propriété "serde" pour la dépendance "rgb", mais uniquement si la dépendance "rgb" est activée ailleurs : [dépendances] serde = { version = " 1.0.133", optionnel = true } rgb = { version = "0.8.25", optionnel = true } [fonctionnalités] serde = ["dep:serde", "rgb?/serde"]

  • La prise en charge de la compilation incrémentielle, désactivée dans la dernière version, a été rétablie. Le bug du compilateur qui provoquait la désactivation de la fonctionnalité a été résolu.
  • Résolution de certains problèmes liés à la fourniture de minuteries instantanées avec une garantie de synchronisation monotone, qui prend en compte le temps passé par le système en mode veille. Auparavant, l'API du système d'exploitation était utilisée autant que possible pour faire fonctionner le minuteur, ce qui ne prenait pas en compte les situations problématiques qui brisent la monotonie du temps, telles que des problèmes matériels, l'utilisation de la virtualisation ou des erreurs dans le système d'exploitation.
  • 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 :
    • Arc :: new_cyclic
    • Rc :: new_cyclic
    • tranche ::EscapeAscii
    • <[u8]>::escape_ascii
    • u8 :: escape_ascii
    • Vec :: rechange_capacity_mut
    • Peut-êtreUninit :: assume_init_drop
    • Peut-êtreUninit :: assume_init_read
    • i8 :: abs_diff
    • i16 :: abs_diff
    • i32 :: abs_diff
    • i64 :: abs_diff
    • i128 :: abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize :: abs_diff
    • Affichage pour io :: ErrorKind
    • De pour le code de sortie
    • Pas pour ! (tapez "jamais")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected !
  • Le troisième niveau de support a été implémenté pour les plateformes mips64-openwrt-linux-musl* et armv7-unknown-linux-uclibceabi (softfloat). Le troisième niveau implique un support de base, mais sans tests automatisés, publication des versions officielles et vérification de la constructibilité du code.
  • Le compilateur a été modifié pour utiliser LLVM 14.

De plus, vous pouvez noter :

  • Ajout de la prise en charge du démarrage du compilateur rustc à l'aide du backend rustc_codegen_gcc, qui vous permet d'utiliser la bibliothèque libgccjit du projet GCC comme générateur de code dans rustc, ce qui permet à rustc de prendre en charge les architectures et les optimisations disponibles dans GCC. La promotion du compilateur signifie la possibilité d'utiliser un générateur de code basé sur GCC dans rustc pour construire le compilateur rustc lui-même. Côté pratique, cette fonctionnalité permet de construire des programmes rust pour des architectures qui n'étaient pas supportées auparavant dans rustc.
  • La version de la boîte à outils uutils coreutils 0.0.13 est disponible, dans laquelle un analogue du package GNU Coreutils, réécrit en langage Rust, est en cours de développement. Coreutils est livré avec plus d'une centaine d'utilitaires, dont sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln et ls. L'objectif du projet est de créer une implémentation alternative multiplateforme de Coreutils, capable de fonctionner sur les plateformes Windows, Redox et Fuchsia, ainsi que d'être distribuée sous la licence permissive MIT, au lieu de la licence copyleft GPL.

    La nouvelle version a amélioré les implémentations de nombreux utilitaires, notamment une compatibilité considérablement améliorée des utilitaires cp, dd, df, split et tr avec leurs homologues du projet GNU. Documentation en ligne fournie. L'analyseur clap est utilisé pour analyser les arguments de ligne de commande, ce qui a amélioré la sortie de l'indicateur « --help » et ajouté la prise en charge des abréviations de commandes longues (par exemple, vous pouvez spécifier « ls -col » au lieu de « ls -color »).

Source: opennet.ru

Ajouter un commentaire