Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2013
    Messages
    5 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mars 2013
    Messages : 5 023
    Points : 129 408
    Points
    129 408
    Par défaut Rust 1.41.0 apporte Cargo install qui met à jour les packages lorsqu'ils sont obsolètes
    Rust 1.41.0 est disponible et s'accompagne de Cargo install qui met à jour les packages lorsqu'ils sont obsolètes,
    et d'un format Cargo.lock moins sujet aux conflits

    L'équipe responsable du développement de Rust a annoncé la disponibilité de la version 1.41.0. Les points forts de Rust 1.41.0 incluent des restrictions assouplies pour les implémentations de traits, des améliorations apportées à cargo install et un Cargo.lock plus git-friendly.

    Restrictions assouplies lors de la mise en œuvre des traits

    Pour éviter les ruptures dans l'écosystème lorsqu'une dépendance ajoute un nouveau trait implicite, Rust applique la règle orpheline. L'essentiel est qu'un imp de trait n'est autorisé que si le trait ou le type mis en œuvre est local (défini dans) au crate actuel par opposition à un crate étranger. Ce que cela signifie exactement est cependant compliqué lorsque des génériques sont impliqués.

    Avant Rust 1.41.0, la règle des orphelins était inutilement stricte, gênant la composition. Par exemple, supposons que votre crate définisse la structure BetterVec<T> et que vous souhaitiez un moyen de convertir votre structure en Vec<T> de la bibliothèque standard. Le code que vous écririez est:

    Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    impl<T> From<BetterVec<T>> for Vec<T> {
        // ...
    }

    ... qui est une instance du modèle:

    Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    impl<T> ForeignTrait<LocalType> for ForeignType<T> {
        // ...
    }

    Dans Rust 1.40.0, cet imp était interdit par la règle des orphelins, car From et Vec sont définis dans la bibliothèque standard, qui est étrangère au crate actuel. Il y avait des façons de contourner la limitation, comme le modèle de nouveau type, mais elles étaient souvent lourdes, voire impossibles dans certains cas.

    Bien qu'il soit toujours vrai que From et Vec sont étrangers, le trait (dans ce cas, From) a été paramétré par un type local. Par conséquent, Rust 1.41.0 autorise cet imp :

    cargo installmet à jour les packages lorsqu'ils sont obsolètes

    Avec cargo install, vous pouvez installer des crates binaires dans votre système. La commande est souvent utilisée par la communauté pour installer des outils CLI populaires écrits en Rust.

    À partir de Rust 1.41.0, cargo install mettra également à jour les installations existantes de crate si une nouvelle version est sortie depuis que vous l'avez installée. Avant cette version, la seule option était de passer l'indicateur --force, qui réinstalle le crate binaire même si elle est à jour.

    Un format cargo.lock moins sujet aux conflits

    Pour garantir des builds cohérents, Cargo utilise un fichier nommé Cargo.lock, contenant les versions de dépendance et les sommes de contrôle. Malheureusement, la façon dont les données étaient organisées a entraîné des conflits de fusion inutiles lors du changement de dépendances dans des branches distinctes.

    Rust 1.41.0 introduit un nouveau format pour le fichier, explicitement conçu pour éviter ces conflits. Ce nouveau format sera utilisé pour tous les nouveaux fichiers de verrouillage, tandis que les fichiers de verrouillage existants reposeront toujours sur le format précédent.

    Nom : 1*5KIIZPyW3QCo0YSiVXtoWA.png
Affichages : 4865
Taille : 8,7 Ko

    Plus de garanties lors de l'utilisation de Box <T> dans FFI

    À partir de Rust 1.41.0, une Box<T>, où T: Sized est désormais compatible ABI avec les types de pointeur (T *) du langage C. Donc, si vous avez une fonction Rust "C" externe, appelée depuis C, votre fonction Rust peut maintenant utiliser Box<T>, pour certains T spécifiques, tout en utilisant T * dans C pour la fonction correspondante. Par exemple, du côté C, vous pouvez avoir:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // C header */
     
    // Returns ownership to the caller.
    struct Foo* foo_new(void);
     
    // Takes ownership from the caller; no-op when invoked with NULL.
    void foo_delete(struct Foo*);

    ... alors que du côté Rust, vous auriez:

    Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #[repr(C)]
    pub struct Foo;
     
    #[no_mangle]
    pub extern "C" fn foo_new() -> Box<Foo> {
        Box::new(Foo)
    }
     
    // The possibility of NULL is represented with the `Option<_>`.
    #[no_mangle]
    pub extern "C" fn foo_delete(_: Option<Box<Foo>>) {}

    Changement dans la bibliothèque

    Les ajouts suivants ont été faits à la bibliothèque standard :



    Les méthodes Result::map_or et Result::map_or_else ont été stabilisées. Comme Option::map_or et Option::map_or_else, ces méthodes sont des raccourcis vers le modèle .map(|val| process(val)).unwrap_or(default).

    Les valeurs numériques NonZero* implémentent désormais From<NonZero*> s'il s'agit d'une plus petite largeur entière. Par exemple, NonZeroU16 implémente désormais From<NonZeroU8>.

    Les méthodes weak_count et strong_count sur les pointeurs Weak ont été stabilisées :
    • std::rc::Weak::weak_count
    • std::rc::Weak::strong_count
    • std::sync::Weak::weak_count
    • std::sync::Weak::strong_count

    Ces méthodes retournent le nombre de pointeurs weak (rc::Weak<T> et sync::Weak<T>) ou strong (Rc<T> et Arc<T>) pointers respectivement à leur allocation.

    MaybeUninit<T> implémente désormais fmt::Debug.

    Source : Rust
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2019
    Messages : 13
    Points : 121
    Points
    121
    Par défaut
    Ahh c'est génial j'ai souvent voulu implémenter les traits d'autres crates. Ça va résoudre beaucoup beaucoup de problèmes je pense surtout à wasm quand un object doit implémenter le trait spécial qui permet sa compatibilité avec javascript.

Discussions similaires

  1. JButton qui met à jour un JLabel, possible ?
    Par nikwik dans le forum Débuter
    Réponses: 4
    Dernier message: 15/01/2011, 13h30
  2. Réponses: 0
    Dernier message: 18/08/2010, 21h01
  3. Macro qui met à jour un Workbook à partir d'un autre
    Par Sanny80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/11/2009, 10h31
  4. Réponses: 2
    Dernier message: 11/08/2006, 12h11
  5. Réponses: 5
    Dernier message: 25/11/2003, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo