Version du langage de programmation Rust 1.67

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

  • Pour les fonctions asynchrones avec Future::Output, il est désormais possible de spécifier des annotations "#[must_use]" qui incluent un avertissement si la valeur de retour est ignorée, ce qui permet d'identifier les erreurs causées par l'hypothèse que la fonction modifiera les valeurs. plutôt que de renvoyer une nouvelle valeur. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().await; } avertissement : sortie inutilisée du futur renvoyée par `bar` qui doit être utilisée —> src/lib.rs:5:5 | 5 | bar().attendre; | ^^^^^^^^^^^ | = remarque : `#[warn(unused_must_use)]` activé par défaut
  • L'implémentation des files d'attente FIFO std::sync::mpsc (multiproducteur mono-consommateur) a été mise à jour, qui a été basculée vers l'utilisation du module crossbeam-channel tout en conservant l'API précédente. La nouvelle implémentation se distingue par la résolution d'un certain nombre de problèmes, des performances supérieures et une maintenance simplifiée du code.
  • 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 :
    • {entier} ::checked_ilog
    • {entier} ::checked_ilog2
    • {entier} ::checked_ilog10
    • {entier} ::ilog
    • {entier} ::ilog2
    • {entier} ::ilog10
    • NonZeroU* ::ilog2
    • NonZeroU* ::ilog10
    • Non nul*::BITS
  • L'attribut « const », qui détermine la possibilité de l'utiliser dans n'importe quel contexte à la place de constantes, est utilisé dans les fonctions :
    • char::from_u32
    • char ::from_digit
    • char::to_digit
    • core :: char :: from_u32
    • core :: char :: from_digit
  • Un troisième niveau de support a été implémenté pour l'utilisation de Rust dans le noyau Linux (linuxkernel), ainsi que pour la Sony PlayStation 1 (mipsel-sony-psx), PowerPC avec AIX (powerpc64-ibm-aix), QNX Neutrino RTOS ( aarch64-unknown-nto-) plates-formes qnx710, x86_64-pc-nto-qnx710). 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.

De plus, on peut noter la publication par ARM de correctifs permettant d'utiliser le langage Rust pour développer des pilotes et des modules du noyau Linux assemblés pour des systèmes basés sur l'architecture AArch64.

Source: opennet.ru

Ajouter un commentaire