Version du langage de programmation Rust 1.62

La sortie du langage de programmation polyvalent Rust 1.62, 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 » propose la commande « add », qui vous permet d'ajouter de nouvelles dépendances au manifeste Cargo.toml ou de modifier les dépendances existantes à partir de la ligne de commande. La commande vous permet également de spécifier des fonctionnalités et des versions individuelles, par exemple : cargo add serde – fonctionnalités dériver cargo add nom@5
  • Ajout de la possibilité d'utiliser « #[derive(Default)] » avec des énumérations dans lesquelles l'option par défaut est définie à l'aide de l'attribut « #[default] ». #[derive(Default)] enum Peut-être { #[default] Rien, Quelque chose(T), }
  • Sur la plate-forme Linux, une implémentation plus compacte et plus rapide du mécanisme de synchronisation Mutex est utilisée, basée sur l'utilisation des futex fournis par le noyau Linux. Contrairement à l'implémentation précédemment utilisée basée sur la bibliothèque pthreads, la nouvelle version n'utilise que 5 octets au lieu de 40 pour stocker l'état Mutex. De même, les mécanismes de verrouillage Condvar et RwLock ont ​​été transférés vers futex.
  • Un deuxième niveau de support pour la plate-forme cible x86_64-unknown-none a été implémenté, conçu pour générer des fichiers exécutables pouvant fonctionner sans système d'exploitation. Par exemple, la plate-forme cible spécifiée peut être utilisée lors de l'écriture des composants du noyau. Le deuxième niveau de prise en charge concerne une garantie de montage.
  • Le troisième niveau de support a été implémenté pour les plateformes aarch64-pc-windows-gnullvm et x86_64-pc-windows-gnullvm. 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.
  • 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 :
    • bool :: then_some
    • f32 :: total_cmp
    • f64 :: total_cmp
    • Stdin :: lignes
    • windows :: CommandExt :: raw_arg
    • implicite valeur par défaut pour AssertUnwindSafe
    • Depuis > pour RC
    • Depuis > pour Arc<[u8]>
    • FusedIterator pour EncodeWide

    Source: opennet.ru

Ajouter un commentaire