Version du langage de programmation Rust 1.34

A eu lieu version du langage de programmation système Rouille 1.34, développé par le projet Mozilla. Le langage 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é des tâches sans utiliser de garbage collector ou d'exécution.

La gestion automatique de la mémoire de Rust libère le développeur de la manipulation du pointeur et le protège contre les problèmes résultant de la manipulation de la mémoire de bas niveau, tels que les accès mémoire après libération, les déréférences de pointeur nul, les dépassements de tampon, etc. Un gestionnaire de packages est en cours de développement pour distribuer les bibliothèques, assurer l'assemblage et gérer les dépendances par le projet. Cargaison, vous permettant d'obtenir les bibliothèques nécessaires au programme en un clic. Un référentiel est pris en charge pour héberger des bibliothèques caisses.io.

principal les innovations:

  • Le gestionnaire de packages Cargo a ajouté des outils pour travailler avec des registres de packages alternatifs qui peuvent coexister avec le registre public crates.io. Par exemple, les développeurs d'applications propriétaires peuvent désormais utiliser leur propre registre privé, qui peut être utilisé lors de la liste des dépendances dans Cargo.toml, et appliquer un modèle de gestion de versions similaire à crates.io pour leurs produits, ainsi que référencer les dépendances aux deux caisses. io et à votre propre registre.

    Pour ajouter des registres externes à .cargo/config (situé dans $HOME ou dans le répertoire du package)
    prévu section « [registres] », et pour utiliser un registre externe, l'option « registry » est apparue dans la description de chaque dépendance dans Cargo.toml. Pour vous connecter à un registre supplémentaire, placez simplement le jeton d'authentification dans le fichier ~/.cargo/credentials et exécutez la commande
    "cargo login --registry=my-registry" et pour publier un package -
    "cargopublish -registry=my-registry" ;

  • Ajout d'une prise en charge complète de l'utilisation de l'opérateur « ? ». dans les tests docteurs, vous permettant d'utiliser un exemple de code de la documentation comme tests. Ancien opérateur
    "?" pourrait être utilisé pour gérer les erreurs lors de l'exécution des tests uniquement en présence de la fonction « fn main() » ou dans les fonctions « #[test] » ;

  • Dans les attributs personnalisés définis à l'aide de macros procédurales à condition la possibilité d'utiliser des ensembles arbitraires de jetons (« #[attr($tokens)] », « #[attr[$tokens]] et #[attr{$tokens}] »). Auparavant, les éléments ne pouvaient être spécifiés que sous une forme arborescente/récursive en utilisant des chaînes littérales, par exemple « #[foo(bar, baz(quux, foo = « bar »))] », mais il est désormais possible d'utiliser des énumérations (' #[range(0. .10)]') et des constructions comme « #[bound(T: MyTrait)] » ;
  • Types stabilisés (trait) EssayerDe и Essayer dans, permettant les conversions de type avec gestion des erreurs. Par exemple, des méthodes telles que from_be_bytes avec des types entiers utilisent des tableaux comme entrée, mais les données sont souvent de type Slice, et la conversion entre tableaux et tranches est problématique à effectuer manuellement. À l'aide de nouveaux traits, l'opération spécifiée peut être effectuée à la volée via un appel à .try_into(), par exemple, « let num = u32::from_be_bytes(slice.try_into()?) ». Pour les conversions qui réussissent toujours (par exemple, du type u8 vers u32), un type d'erreur a été ajouté Infaillible, permettant une utilisation transparente
    TryFrom pour toutes les implémentations existantes de « From » ;

  • La fonction est obsolète CommandExt ::before_exec, qui permettait d'exécuter un gestionnaire avant d'exécuter exec, qui était exécuté dans le contexte d'un processus enfant forké après l'appel fork(). Dans de telles conditions, certaines ressources du processus parent, telles que les descripteurs de fichiers et les zones mémoire mappées, pourraient être dupliquées, ce qui pourrait conduire à un comportement indéfini et à un fonctionnement incorrect des bibliothèques.
    Il est recommandé d'utiliser une fonction non sécurisée au lieu de before_exec CommandExt :: pre_exec.

  • Types d'entiers atomiques stabilisés signés et non signés dont la taille varie de 8 à 64 bits (par exemple, AtomiqueU8), ainsi que les types signés Non nulI[8|16|32|64|128].
  • Une nouvelle partie de l'API a été déplacée vers la catégorie stable, notamment Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] et les méthodes SystemTime ont été stabilisées ::checked_[add|sub]. Les fonctions iter::from_fn et iter::successors ont été stabilisées ;
  • Pour tous les types entiers, les méthodes vérifiées_pow, saturating_pow, Wrapping_pow et overflowing_pow sont implémentées ;
  • Ajout de la possibilité d'activer les optimisations au stade de la liaison en spécifiant l'option de construction « -C linker-plugin-lto ».

Source: opennet.ru

Ajouter un commentaire