Version du langage de programmation Rust 1.57

La version du langage de programmation système Rust 1.57, fondé par le projet Mozilla, mais désormais 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, assure une gestion automatique de la mémoire et fournit les moyens d'atteindre un parallélisme élevé des tâches sans utiliser de garbage collector ou d'exécution (le temps d'exécution est réduit à l'initialisation et à la maintenance de base de la bibliothèque standard).

La gestion automatique de la mémoire de Rust élimine les erreurs lors de la manipulation des pointeurs et protège contre les problèmes résultant de la manipulation de la mémoire de bas niveau, tels que l'accès à une région mémoire après sa libération, les déréférences de pointeurs nuls, les dépassements de tampon, etc. Pour distribuer les bibliothèques, assurer l'assemblage 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.

Principales nouveautés :

  • Le recours à la macro « panique ! » est stabilisé. dans des contextes créés lors de la compilation, tels que les déclarations "const fn". De plus, en plus d'utiliser « panique ! » Les déclarations const permettent l'utilisation de la macro « assert ! ». et quelques autres API de bibliothèque standard. La stabilisation ne couvre pas encore toute l'infrastructure de formatage, donc dans sa forme actuelle la macro « panique ! » ne peut être utilisé qu'avec des chaînes statiques (panic!("...")) ou avec une seule valeur interpolée "&str" lors de la substitution (panic!("{}", a)), qui doit se limiter à la substitution de "{ }" sans spécificateurs de formatage ni autres types. À l'avenir, l'applicabilité des macros dans des contextes constants sera étendue, mais les capacités stabilisées sont déjà suffisantes pour effectuer des vérifications d'assertion au stade de la compilation : const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Le gestionnaire de packages Cargo permet l'utilisation de profils avec des noms arbitraires, sans se limiter à "dev", "release", "test" et "bench". Par exemple, pour activer l'optimisation au stade de la liaison (LTO) uniquement lorsque les assemblages de produits finaux sont générés, vous pouvez créer un profil « production » dans Cargo.toml et y ajouter l'indicateur « lto = true ». Cependant, lors de la définition de vos propres profils, vous devez spécifier un profil existant pour en hériter des paramètres par défaut. L'exemple ci-dessous crée un profil « production » qui complète le profil « release » en incluant l'indicateur « lto = true ». Le profil lui-même est activé en appelant cargo avec l'option « --profile production », et les artefacts d'assemblage seront placés dans le répertoire « target/production ». [profile.production] hérite = "release" lto = true
  • L'utilisation de try_reserve pour les types Vec, String, HashMap, HashSet et VecDeque a été stabilisée, ce qui permet de réserver de l'espace à l'avance pour un certain nombre d'éléments d'un type donné afin de réduire la fréquence des opérations d'allocation mémoire et d'éviter plante pendant le fonctionnement en raison d'un manque de mémoire.
  • Il est permis de spécifier des macros avec des accolades dans des expressions telles que "m!{ .. }.method()" et "m!{ .. }?".
  • L'exécution des fonctions File::read_to_end et read_to_string a été optimisée.
  • La prise en charge de la spécification Unicode a été mise à jour vers la version 14.0.
  • Augmentation du nombre de fonctions marquées "#[must_use]" pour émettre un avertissement si la valeur de retour est ignorée, ce qui permet d'identifier les erreurs causées par l'hypothèse qu'une fonction modifiera les valeurs plutôt que de renvoyer une nouvelle valeur.
  • Ajout d'un backend expérimental pour la génération de code à l'aide de libgccjit.
  • 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 :
    • [T ; N]::as_mut_slice
    • [T ; N]::as_slice
    • collections ::TryReserveError
    • HashMap :: try_reserve
    • HashSet :: try_reserve
    • String :: try_reserve
    • String :: try_reserve_exact
    • Vec :: try_reserve
    • Vec :: try_reserve_exact
    • VecDeque :: try_reserve
    • VecDeque :: try_reserve_exact
    • Itérateur :: map_while
    • iter :: MapWhile
    • proc_macro :: est_disponible
    • Commande ::get_program
    • Commande ::get_args
    • Commande ::get_envs
    • Commande ::get_current_dir
    • CommandArgs
    • CommandEnvs
  • L'attribut « const », qui détermine s'il peut être utilisé dans n'importe quel contexte à la place de constantes, est utilisé dans la fonction suggest::unreachable_unchecked.
  • Le troisième niveau de support a été implémenté pour armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi et armv7a-kmc-. plateformes solid_asp3-eabihf. 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