Version du langage de programmation Rust 1.44

Publié version du langage de programmation système Rouille 1.44, fondé par le projet Mozilla. Le langage se concentre sur la sécurité de la mémoire, assure une gestion automatique de la mémoire et fournit des outils permettant d'atteindre un parallélisme élevé des tâches sans utiliser de garbage collector et d'exécution.

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. 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.

Dans le texte d'annonce de la nouvelle version, les développeurs de Rust se sont impliqués dans la politique et ont clairement refusé de publier un examen complet des modifications apportées à Rust 1.44 en signe de solidarité avec les manifestants contre la violence policière, indiquant que cette question est plus importante. que l'échange de connaissances techniques. Basique les innovations:

  • Le gestionnaire de packages Cargo intègre la commande « cargo tree », qui affiche un graphique de dépendances en forme d'arborescence. L'option « -duplicates » (« cargo tree -d ») est également ajoutée, qui vous permet d'évaluer les dépendances dans différentes versions du même package.

    mdbook v0.3.2 (/Utilisateurs/src/rust/mdbook)
    ├── ammoniac v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── journal v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── balisage5ever v0.9.0
    │ │ ├── journal v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5
    ...

  • Pour les applications non liées à un std ("#![no_std]"), la prise en charge des techniques de programmation asynchrone est implémentée sur la base de la fonction "async", du bloc async move { ... } et de l'opérateur ".await", qui simplifier l'écriture du flux de commandes principal des gestionnaires non bloquants.
  • La prise en charge d'un schéma de définition de hiérarchie de modules extensible a été ajoutée à l'analyseur. Par exemple, la construction suivante ne produira pas d'erreur, malgré l'absence réelle du module "foo/bar/baz.rs" (la construction est toujours sémantiquement invalide et peut provoquer une erreur, mais les modifications peuvent être vues et analysées sur le niveau macro et compilation conditionnelle) :

    #[cfg(FALSE)] mod foo {
    barre de mods {
    mod baz;
    }
    }

  • Le compilateur rustc a ajouté la possibilité d'utiliser l'indicateur « -C codegen-units » en mode incrémentiel. L'implémentation de catch_unwind a été retravaillée afin qu'elle n'ait aucun impact sur les performances si le processus de déroulement est désactivé et qu'aucune exception n'est levée.
  • La prise en charge de niveau 64 a été fournie pour les plates-formes aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos et x64_XNUMX-apple-tvos. Le troisième niveau implique un support de base, mais sans tests automatisés ni publication de versions officielles.
  • Une nouvelle partie des API a été transférée dans la catégorie stable, notamment les API stabilisées
    PathBuf :: with_capacity,
    PathBuf :: capacité,
    PathBuf::clair,
    PathBuf :: réserve,
    PathBuf::reserve_exact,
    PathBuf ::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Mise en page ::align_to,
    Mise en page :: pad_to_align,
    Mise en page :: tableau et
    Mise en page ::étendre.

  • Fonctions étendues de la bibliothèque standard :
    • Ajout d'une variante spéciale "vec![]" qui est directement reflétée dans Vec::new(), permettant à "vec![]" d'être utilisé dans un contexte au lieu de constantes.
    • Une implémentation (impl) du trait a été ajoutée pour convertir :: Infaillible Hash.
    • OsString implémente des pointeurs intelligents DerefMut и IndexMut, renvoyant "&mut OsStr".
    • Ajout de la prise en charge d'Unicode 13.
    • Implémenté dans une chaîne De<&mut str>.
    • IoSlice implémente le trait Copier.
    • Vec implémenté From<[T; N]>.
    • proc_macro::LexError implémente fmt::Display et Error.
  • L'attribut « const », qui détermine la possibilité de l'utiliser dans n'importe quel contexte à la place des constantes, est utilisé dans les méthodes from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes et to_ne_bytes pour tous les types entiers.
  • Ajout de la prise en charge de la génération de bibliothèques statiques au format « .a » au lieu de « .lib » pour les plateformes GNU sous Windows.
  • La configuration minimale requise pour LLVM a été augmentée à LLVM version 8.

Source: opennet.ru

Ajouter un commentaire