Version du langage de programmation Rust 1.68

La sortie du langage de programmation polyvalent Rust 1.68, 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 gestionnaire de packages Cargo et le référentiel crates.io ont stabilisé la prise en charge du protocole Sparse, qui définit une nouvelle façon de travailler avec un index qui reflète les versions disponibles de tous les packages existant dans le référentiel. Le nouveau protocole vous permet d'augmenter considérablement la vitesse de travail avec crates.io et de résoudre les problèmes de mise à l'échelle avec une nouvelle augmentation du nombre de packages dans le référentiel.

    Pour réduire les retards causés par le téléchargement d'un index complet, Sparse, au lieu d'accéder à l'index à l'aide de Git, implique le téléchargement direct via HTTPS uniquement des données d'index nécessaires, couvrant les dépendances d'un projet particulier. Un nouveau service, index.crates.io, est utilisé pour fournir des données d'index. Par défaut, le nouveau protocole est prévu pour être utilisé dans la branche Rust 1.70, et avant cela, pour l'activer, vous pouvez définir la variable d'environnement "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" ou ajouter le paramètre 'protocol =' au fichier "[registries. crates-io]" du fichier .cargo/config.toml 'sparse'.

  • Ajout de la macro "pin!", qui permet de créer une structure Pin<&mut T> à partir de l'expression "T" avec épinglage local de son état (contrairement à Box::pin, elle n'alloue pas de mémoire sur le tas, mais lie au niveau de la pile).
  • Un gestionnaire d'erreurs d'allocation de mémoire par défaut a été proposé, utilisé lors de l'utilisation du package d'allocation standard. Les applications qui activent uniquement l'allocation (sans std) appelleront désormais le gestionnaire « panic ! » en cas d'échec de l'allocation de mémoire, qui peut éventuellement être intercepté à l'aide de « #[panic_handler] ». Les programmes utilisant la bibliothèque std continueront à imprimer les informations d'erreur sur stderr et planteront.
  • 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 :
    • {core,std} ::pin ::pin !
    • implément De pour {f32,f64}
    • std :: chemin :: MAIN_SEPARATOR_STR
    • impl DerefMut pour PathBuf
  • L'attribut « const », qui détermine la possibilité de l'utiliser dans n'importe quel contexte à la place de constantes, est utilisé dans la fonction VecDeque::new.
  • Pour travailler sur la plateforme Android, il faut désormais au moins NDK r25 (API 19), soit La version Android minimale prise en charge a été augmentée à 4.4 (KitKat).
  • Le troisième niveau de support a été implémenté pour la plateforme Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). Le troisième niveau implique un support de base, mais sans tests automatisés, sans publication de versions officielles ni vérification si le code peut être construit.

Source: opennet.ru

Ajouter un commentaire