Version du langage de programmation Rust 1.42

Publié version du langage de programmation système Rouille 1.42, 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 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:

  • Ajouté par prise en charge de modèles pour faire correspondre des parties de tranches (tableaux dynamiques, tranche). Auparavant, les correspondances exactes étaient autorisées, mais il est désormais possible d'utiliser des constructions marquées « .. » pour couvrir les éléments restants du tableau. Par exemple:

    fn foo(mots : &[&str]) {
    faire correspondre les mots {

    // vérifie les éléments de départ du tableau et ignore
    les éléments qui les suivent
    ["Bonjour", "Monde", "!", ..] => println!("Bonjour tout le monde !"),

    // vérifie les deux premiers éléments "Foo" et "Bar", et le reste n'a pas d'importance
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignore tout, mais le dernier élément doit être "!".
    [.., "!"] => println!("!!!"),

    // dans la tranche de départ, nous incluons tout sauf le dernier élément, qui devrait être "z"
    [start @ .., "z"] => println!("commence par : {:?}", start),

    // dans la tranche de fin, nous mettons tout sauf le premier élément, qui devrait être « a ».
    ["a", end @ ..] => println!("se termine par : {:?}", end),

    reste => println!("{:?}", reste),
    }
    }

  • Ajout d'une nouvelle macro « correspond ! », qui prend une expression et un modèle en entrée, et renvoie « true » si le modèle correspond à l'expression. Le modèle peut utiliser les opérations « | » et si".

    match self.partial_cmp(autre) {
    Certains (Moins) => vrai,
    _ => faux,
    }

    matches!(self.partial_cmp(other), Some(Moins))

    soit foo = 'f';
    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

    laissez bar = Certains (4);
    assert!(matches!(bar, Some(x) if x > 2));

  • Dans les messages de panique affichés en cas d'utilisation incorrecte
    Les types Option et Résultat affichent désormais les numéros de ligne avec un lien vers le code qui a effectué l'appel problématique, plutôt que des liens vers le code implémentant l'appel dans libcore. Par exemple, le changement affecte les appels à unwrap et expect sur Option::None, ou se bloque lors de l'utilisation d'unwrap_err, expect, expect_err et de méthodes similaires sur le type Result.

  • Le gestionnaire de packages Cargo permet la substitution automatique de « proc_macro crate » dans le bloc « extern » pour les packages avec des macros procédurales. Ce changement permet d'appliquer la directive "use" aux macros procédurales sans avoir à spécifier "extern crate proc_macro;" dans le code. Par exemple, si le programme utilise la ligne « use proc_macro::TokenStream; », alors le code continuera désormais à fonctionner si « extern crate proc_macro; » en est supprimé.
  • Les capacités de la bibliothèque standard ont été étendues. Dans iter :: Vide ajoutée Prise en charge de l'envoi et de la synchronisation pour toutes les valeurs T.
    Pin d'appel : {map_unchecked, map_unchecked_mut} livré d'avoir à renvoyer une valeur de type pour l'implémentation "Sized".
    Dans io :: Curseur mis en œuvre PartialEq et Eq. L'attribut « const » détermine la possibilité d'utilisation dans n'importe quel contexte à la place des constantes, appliqué pour la méthode Layout::new.

  • Une nouvelle partie de l'API a été transférée dans la catégorie stable, notamment les CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::clé, DebugMap::valeur,
    ManuallyDrop :: prendre,
    ptr::slice_from_raw_parts_mut et ptr::slice_from_raw_parts.

  • La méthode Error::description est obsolète.
  • Prise en charge de deuxième niveau pour les plates-formes armv7a-none-eabi et riscv64gc-unknown-linux-gnu. La prise en charge de la bibliothèque standard pour la plateforme riscv64gc-unknown-linux-gnu a été fournie.
    Plateformes Apple 32 bits rétrogradé jusqu'au troisième niveau de support, ce qui implique un support de base, mais sans tests automatisés ni publication de versions officielles. Le déclassement du support est dû au fait qu'Apple ne prend plus en charge les plates-formes 32 bits.

Source: opennet.ru

Ajouter un commentaire