Rouille 1.35

L'équipe de développement de Rust est heureuse d'annoncer une nouvelle version de son langage : la 1.35. Rust est un langage de programmation qui permet d'écrire des programmes fiables et efficaces.

Si Rust est déjà installé via rustup, vous pouvez mettre à jour avec la commande :
$ mise à jour rustup stable

L'essentiel de la mise à jour est l'implémentation des traits de fermeture Fn, FnOnce, FnMut, pour Box ,Boîte ,Boîte , respectivement. Ajout de la possibilité de fermer des pointeurs vers des fonctions non sécurisées, l'appel de la macro dbg!() est désormais possible sans arguments, et la bibliothèque standard a été stabilisée.

Aux détails :

  • Dans la nouvelle version, nous avons ajouté des implémentations des traits Fn, FnOnce, FnMut pour Box ,Boîte ,Boîte , respectivement.
    Maintenant, ce code fonctionnera :
    fn foo(x : Boîte u8>) -> Vec {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Vous pouvez également appeler une clôture directement depuis Box :
    fn foo(x : Boîte ) {
    X()
    }

  • Les fermetures peuvent désormais être converties en pointeurs vers des fn non sécurisés.
    Maintenant, ce code est valide :
    /// Les invariants de sécurité sont ceux du pointeur `unsafe fn` passé.
    fn dangereux call_unsafe_fn_ptr(f: fn dangereux()) {
    F()
    }

    fn principal() {
    // SÉCURITÉ : Il n'y a pas d'invariants.
    // La fermeture est statiquement empêchée de faire des choses dangereuses.
    peu sûr {
    call_unsafe_fn_ptr(|| {
    dbg!();
    });
    }
    }

  • Ajout de la possibilité d'appeler la macro dbg!() sans arguments.
    Si vous transmettez une expression à cette macro, la macro imprimera son résultat. Exemple:
    fn principal() {
    soit mut x = 0 ;

    si dbg!(x == 1) {
    x += 1 ;
    }

    dbg!(x);
    }

    Lorsque vous exécutez ce code, vous verrez :
    [src/main.rs:4] x == 1 = faux
    [src/main.rs:8] x = 0

    Maintenant, vous pouvez écrire comme ceci :
    fn principal() {
    soit condition = vrai ;

    si condition {
    dbg!();
    }
    }

    Lorsque vous exécutez ce code, vous verrez :
    [src/main.rs:5]

  • Certaines parties de la bibliothèque standard ont été stabilisées
    • Nouvelles méthodes pour f32 et f64 :
      • f32 ::copier le signe
      • f64 ::copier le signe

      En fait, les fonctions copient le signe d'un autre nombre. Exemple:
      fn principal() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Ajout de nouvelles méthodes pour les types Range
      • Gamme : contient
      • RangeFrom :: contient
      • RangeTo :: contient
      • RangeInclusive :: contient
      • RangeToInclusive :: contient

      Avec ces méthodes, vous pouvez facilement vérifier si une certaine valeur est dans une séquence :
      fn principal() {
      si (0..=10).contient(&5) {
      println!("Cinq est inclus dans zéro à dix.");
      }
      }

    • Vous pouvez trouver une liste complète des API stabilisées ici
  • Dans cette mise à jour, Clippy (il s'agit d'un programme qui vérifie votre code pour de nombreuses erreurs) a ajouté une nouvelle vérification pour drop_bounds. Cette vérification fonctionne lorsque vous définissez une contrainte : T : Drop - pour les fonctions généralisées :
    fn foo (x : T){}

    Avoir une restriction T: Drop est le plus souvent une erreur, puisque certains types sont immédiatement exclus, comme u8. (Vous pouvez en savoir plus à ce sujet ici)

  • De nombreuses améliorations et correctifs dans Cargo (gestionnaire de packages linguistiques), liste complète des changements

Source: linux.org.ru

Achetez un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Achetez un hébergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster