Version du langage de programmation Rust 2021 (1.56)

La version du langage de programmation système Rust 1.56, 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. En plus du numéro de version habituel, la version est également désignée Rust 2021 et marque une stabilisation des changements proposés au cours des trois dernières années. Rust 2021 servira également de base pour augmenter les fonctionnalités au cours des trois prochaines années, de la même manière que la sortie de Rust 2018 est devenue la base du développement du langage au cours des trois dernières années.

Pour maintenir la compatibilité, les développeurs peuvent utiliser les étiquettes « 2015 », « 2018 » et « 2021 » dans leurs programmes, permettant aux programmes d'être liés à des tranches d'état de langage correspondant aux éditions sélectionnées de Rust. Les éditions ont été introduites pour séparer les modifications incompatibles et sont configurées dans les métadonnées des colis de fret via le champ « édition » dans la section « [colis] ». Par exemple, l'édition « 2018 » inclut les fonctionnalités stabilisées fin 2018 et couvre également toutes les modifications ultérieures qui ne rompent pas la compatibilité. L'édition 2021 comprend en outre des fonctionnalités de rupture d'interopérabilité proposées dans la version 1.56 actuelle et approuvées pour une mise en œuvre future. Outre le langage lui-même, les éditeurs prennent également en compte l’état des outils et de la documentation.

Incompatibilités majeures enregistrées dans Rust 2021 :

  • Capture séparée dans les fermetures - Les fermetures peuvent désormais capturer des noms de champs individuels au lieu de l'identifiant complet. Par exemple, "|| ax + 1" ne capturera que "ax" au lieu de "a".
  • Le trait IntoIterator pour les tableaux : array.into_iter() vous permet de parcourir les éléments du tableau par valeurs, plutôt que par références.
  • Le traitement des expressions « | » a été modifié dans macro_rules (OU booléen) dans les modèles - Le spécificateur ":pat" dans les correspondances respecte désormais "A | B".
  • Le gestionnaire de packages cargo inclut par défaut la deuxième version du résolveur de fonctionnalités, dont la prise en charge est apparue dans Rust 1.51.
  • Les traits TryFrom, TryInto et FromIterator ont été ajoutés au module de bibliothèque standard Prelude.
  • Les macros panic!(..) et assert!(expr, ..) utilisent désormais toujours format_args!(..) pour formater les chaînes, similaire à println!().
  • Les expressions ident#, ident»..." et ident'...' sont réservées dans la syntaxe du langage.
  • Déplacement des avertissements bare_trait_objects et ellipsis_inclusive_range_patterns vers les erreurs.

Nouveau dans Rust 1.56 :

  • Dans Cargo.toml, dans la section « [package] », le champ rust-version a été ajouté, grâce auquel vous pouvez déterminer la version minimale prise en charge de Rust pour le package crate. Si la version actuelle ne correspond pas au paramètre spécifié, Cargo cessera de fonctionner avec un message d'erreur.
  • Lors de la correspondance de modèles à l'aide d'expressions "binding @ pattern", la prise en charge est fournie pour spécifier des liaisons supplémentaires (par exemple, "let matrice @ Matrix { row_len, .. } = get_matrix();").
  • 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 :
    • std :: os :: unix :: fs :: chroot
    • UnsafeCell :: raw_get
    • BufWriter ::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec :: shrink_to
    • Chaîne ::shrink_to
    • OsString :: shrink_to
    • PathBuf ::shrink_to
    • BinaryHeap ::shrink_to
    • VecDeque ::shrink_to
    • HashMap :: shrink_to
    • HashSet ::shrink_to
  • L'attribut « const », qui détermine la possibilité d'utiliser dans n'importe quel contexte à la place des constantes, est utilisé dans les fonctions
    • std :: mem :: transmute
    • [T]::premier
    • [T] :: split_first
    • [T]::dernier
    • [T]::split_dernier
  • Le compilateur a été modifié pour utiliser LLVM version 13.
  • Un deuxième niveau de support a été implémenté pour la plateforme aarch64-apple-ios-sim et un troisième niveau pour les plateformes powerpc-unknown-freebsd et riscv32imc-esp-espidf. 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.

Rappelons que Rust se concentre sur la sécurité de la mémoire, fournit une gestion automatique de la mémoire et fournit un moyen d'atteindre un parallélisme élevé dans l'exécution 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.

Source: opennet.ru

Ajouter un commentaire