IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Rust Discussion :

Rust 1.60.0 est disponible, elle réactive la compilation incrémentale


Sujet :

Rust

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    mai 2019
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2019
    Messages : 747
    Points : 9 983
    Points
    9 983
    Par défaut Rust 1.60.0 est disponible, elle réactive la compilation incrémentale
    Rust 1.60.0 est disponible, elle réactive la compilation incrémentale
    et introduit deux nouveaux changements pour améliorer la prise en charge des fonctionnalités de Cargo

    L'équipe Rust a annoncé la disponibilité de Rust 1.60.0, elle permettra Contrôle du code à la source, de stabiliser la prise en charge de la collecte d'informations sur la construction avec l'indicateur –timings et apporte une Nouvelle syntaxe pour les fonctionnalités de Cargo. Avec Rust 1.60, la compilation incrémentale est réactivée.

    Rappelons que Rust est un langage de programmation compilé multiparadigme, conçu par Graydon Hore alors employé chez Mozilla Research, avec la contribution du créateur de JavaScript Brendan Eich. Utilisé par plusieurs grandes entreprises et par de nombreux développeurs dans le monde, Rust est devenu le langage de base pour certaines des fonctionnalités fondamentales du navigateur Firefox et de son moteur Gecko, ainsi que pour le moteur Servo de Mozilla.

    Nom : Rust2B.png
Affichages : 2670
Taille : 20,2 Ko

    Notons également qu’en début d’année dernière, AWS, Huawei, Google, Microsoft et Mozilla se sont associés pour lancer la fondation Rust et se sont engagés à lui consacrer un budget de deux ans à hauteur d'un million de dollars. Ce budget permettra au projet de développer des services, des programmes et des événements qui aideront les responsables du projet Rust à développer le meilleur Rust possible.

    L'annonce a été faite par Ashley Williams, Directeur exécutif par intérim de la fondation, le 8 février sur le site Internet de l'organisation. « Aujourd'hui, au nom de l'équipe de Rust, je suis heureux d'annoncer la création de la Fondation Rust, une nouvelle organisation indépendante à but non lucratif chargée de gérer le langage de programmation et l'écosystème Rust, en mettant l'accent sur le soutien de l'ensemble des responsables qui régissent et développent le projet ».

    Outre l'arrivée de nouveaux talents dans son équipe Rust, Facebook a également annoncé qu'elle rejoignait officiellement la Fondation Rust. « Facebook Open Source est heureux d'annoncer son soutien à la fondation Rust en qualité de membre important. Aux côtés des autres membres de la fondation, Facebook s'engage à soutenir et à faire croître l'écosystème et la communauté open source Rust », a indiqué Facebook sur son blog.

    Faisant référence à un cours récemment publié par Microsoft sur les premiers pas avec Rust, Miguel de Icaza, ingénieur distingué de Microsoft a tweeté : « le Rustening a commencé chez Microsoft ». Ce que la plupart des adeptes de Rust sur Twitter voient comme un signe que l'entreprise augmente encore ses faveurs pour son langage de prédilection. Bien sûr, ce n'est pas la première fois que Microsoft se tourne vers Rust pour gérer les 70 % de vulnérabilités de Microsoft qui, selon l'entreprise, proviennent de l'utilisation du langage de programmation C++, peu sûr pour la mémoire, dans ses logiciels.

    Contrôle du code à la source

    Le support de l'instrumentation de couverture basée sur LLVM a été stabilisé dans rustc. Vous pouvez l'essayer sur votre code en reconstruisant votre code avec -Cinstrument-coverage, par exemple comme ceci :

    RUSTFLAGS="-C instrument-coverage" cargo build

    Après cela, il est possible d'exécuter le binaire résultant, qui produira un fichier default.profraw dans le répertoire courant. (Le chemin et le nom de fichier peuvent être remplacés par une variable d'environnement ; voir la documentation pour plus de détails). Le composant llvm-tools-preview comprend llvm-profdata pour le traitement et la fusion de la sortie brute du profil (comptes d'exécution des régions de couverture) ; et llvm-cov pour la génération de rapports. llvm-cov combine la sortie traitée, provenant de llvm-profdata, et le binaire lui-même, parce que le binaire incorpore un mappage des compteurs aux régions réelles du code source.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rustup component add llvm-tools-preview
    $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata merge -sparse default.profraw -o default.profdata
    $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-cov show -Xdemangler=rustfilt target/debug/coverage-testing \
        -instr-profile=default.profdata \
        -show-line-counts-or-regions \
        -show-instantiations

    Les commandes ci-dessus sur un simple binaire helloworld produisent ce rapport annoté, montrant que chaque ligne de l'entrée a été couverte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        
        1|      1|fn main() {
        2|      1|    println!("Hello, world!");
        3|      1|}
    Pour plus de détails, veuillez lire la documentation dans le livre rustc. La fonctionnalité de base est stable et existera sous une certaine forme dans toutes les futures versions de Rust, mais le format de sortie spécifique et l'outillage LLVM qui le produit sont sujets à changement. Pour cette raison, il est important de s'assurer que vous utilisez la même version pour llvm-tools-preview et le binaire rustc utilisé pour compiler votre code.

    cargo –timings

    Cargo a stabilisé la prise en charge de la collecte d'informations sur la construction avec l'indicateur --timings.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cargo build --timings
       Compiling hello-world v0.1.0 (hello-world)
          Timing report saved to target/cargo-timings/cargo-timing-20220318T174818Z.html
        Finished dev [unoptimized + debuginfo] target(s) in 0.98s

    Le rapport est également copié dans target/cargo-timings/cargo-timing.html. Un rapport sur la version de Cargo a été mis en ligne ici. Ces rapports peuvent être utiles pour améliorer les performances de construction. Plus d'informations sur les rapports de timing peuvent être trouvées dans la documentation.

    Nouvelle syntaxe pour les fonctionnalités de Cargo

    Cette version introduit deux nouveaux changements pour améliorer la prise en charge des fonctionnalités de Cargo et leur interaction avec les dépendances optionnelles : Les dépendances à espacement de noms et les fonctionnalités de dépendance faible.

    Cargo supporte depuis longtemps les fonctionnalités avec des dépendances optionnelles, comme l'illustre l'extrait ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [dependencies]
    jpeg-decoder = { version = "0.1.20", default-features = false, optional = true }
    
    [features]
    # Enables parallel processing support by enabling the "rayon" feature of jpeg-decoder.
    parallel = ["jpeg-decoder/rayon"]
    Il y a deux choses à noter dans cet exemple :

    • la syntaxe jpeg-decoder/rayon active la dépendance jpeg-decoder et active la fonctionnalité rayon de la dépendance jpeg-decoder ;
    • la dépendance facultative jpeg-decoder définit implicitement une fonctionnalité du même nom. L'activation de la fonctionnalité jpeg-decoder activera la dépendance jpeg-decoder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [dependencies]
    serde = { version = "1.0.133", optional = true }
    rgb = { version = "0.8.25", optional = true }
    	
    [features]
    serde = ["dep:serde", "rgb?/serde"]

    Les fonctionnalités à espacement de noms permettent de résoudre le premier problème. Vous pouvez maintenant utiliser le préfixe dep : dans la table [features] pour faire explicitement référence à une dépendance optionnelle sans l'exposer implicitement comme une fonctionnalité. Cela vous donne plus de contrôle sur la façon de définir la fonctionnalité correspondant à la dépendance optionnelle, y compris en cachant les dépendances optionnelles derrière des noms de fonctionnalités plus descriptifs.

    Les fonctionnalités de dépendance faible traitent le deuxième problème où la syntaxe optional-dependency/feature-name activerait toujours la dépendance optionnelle. Cependant, il arrive souvent que vous souhaitiez activer la fonctionnalité sur la dépendance optionnelle uniquement si une autre fonctionnalité a activé la dépendance optionnelle. À partir de la version 1.60, il est possible d'ajouter un "?" comme dans package-name?/feature-name qui n'activera la fonctionnalité donnée que si une autre fonctionnalité a activé la dépendance optionnelle. Par exemple, disons que nous avons ajouté un support de sérialisation à notre bibliothèque, et que cela nécessite d'activer une fonctionnalité correspondante dans certaines dépendances optionnelles. Cela peut être fait comme suit :

    Dans cet exemple, l'activation de la fonctionnalité serde activera la dépendance serde. Elle activera également la fonctionnalité serde pour la dépendance rgb, mais seulement si quelque chose d'autre a activé la dépendance rgb.

    Statut de la compilation incrémentale

    La compilation incrémentale est réactivée pour la version 1.60. L'équipe Rust continue de travailler à la correction des bogues dans la compilation incrémentale, mais aucun problème entraînant une rupture généralisée n'est connu à l'heure actuelle, nous avons donc choisi de réactiver la compilation incrémentale. De plus, l'équipe du compilateur continue à travailler sur une stratégie à long terme pour éviter de futurs problèmes de ce type. Ce processus n'en est qu'à ses débuts, nous n'avons donc rien à partager à ce sujet. Cette version réactive la compilation incrémentale, à moins que l'utilisateur ne l'ait explicitement choisie via la nouvelle variable d'environnement RUSTC_FORCE_INCREMENTAL=1

    Garanties instantanées de monotonicité

    Sur toutes les platesformes, Instant essaiera d'utiliser une API de système d'exploitation qui garantit un comportement monotone si celui-ci est disponible (ce qui est le cas sur toutes les plates-formes de niveau 1).

    En pratique, de telles garanties sont - dans de rares circonstances - brisées par des bogues du matériel, de la virtualisation ou du système d'exploitation. Pour contourner ces bogues et les plateformes n'offrant pas d'horloges monotones, Instant::duration_since, Instant::elapsed et Instant::sub saturent maintenant à zéro. Dans les anciennes versions de Rust, cela conduisait plutôt à une panique. Instant::checked_duration_since peut être utilisé pour détecter et gérer les situations où la monotonicité est violée, ou les Instants sont soustraits dans le mauvais ordre.

    Cette solution de contournement masque les erreurs de programmation où les instants précédents et suivants sont accidentellement échangés. Pour cette raison, les futures versions de Rust pourront réintroduire les paniques au moins dans ces cas, si cela est possible et efficace.

    Avant la version 1.60, les garanties de monotonicité étaient fournies par des mutex ou des atomics dans std, ce qui peut introduire d'importantes surcharges de performance à Instant::now(). De plus, le comportement de panique signifiait que le logiciel Rust pouvait paniquer dans un sous-ensemble d'environnements, ce qui était largement indésirable, car les auteurs de ce logiciel pouvaient ne pas être en mesure de réparer ou de mettre à niveau le système d'exploitation, le matériel ou le système de virtualisation sur lequel ils s'exécutent. De plus, l'introduction de paniques inattendues dans ces environnements rendait le logiciel Rust moins fiable et portable, ce qui est plus préoccupant que d'exposer aux utilisateurs finaux des bogues de plateforme généralement inintéressants dans la gestion des horloges monotones.

    API stabilisées

    Les méthodes et implémentations de traits suivantes sont maintenant stabilisées :

    • i8::abs_diff
    • u8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • Rc::new_cyclic
    • i128::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • isize::abs_diff
    • u8::escape_ascii
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • From<u8> for ExitCode
    • Vec::spare_capacity_mut
    • Not for ! (the "never" type)
    • Display for io::ErrorKind
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • arch::is_aarch64_feature_detected!
    • _Op_Assign<$t> for Wrapping<$t>


    Rust est l’un des langages de programmation les plus appréciés et dont la croissance est la plus rapide à l'heure actuelle. Avec la version précédente de Rust installée via rustup, il est possible d’obtenir la 1.60.0 avec :

    $ rustup update stable

    Source : Rust

    Et vous ?

    Quel est votre avis sur le sujet ?

    Voir aussi :

    Facebook rejoint AWS, Huawei, Google, Microsoft et Mozilla dans la Fondation Rust et renforce son équipe Rust par des nouveaux talents

    Microsoft annonce Rust preview pour Windows, alors que la comparaison entre Rust et C++ reste un sujet d'actualité

    Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation

    Rust 1.53.0 est disponible et s'accompagne de IntoIterator pour les tableaux, Cargo prend désormais en charge les référentiels git où la branche HEAD par défaut n'est pas "master"
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Futur Membre du Club
    Homme Profil pro
    none
    Inscrit en
    juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : juin 2015
    Messages : 2
    Points : 6
    Points
    6
    Par défaut Incrémentale ? être ou ne pas être...
    La compilation incrémentale est réactivée pour la version 1.60 [...] Cette version désactive la compilation incrémentale.

    C'est pas très clair...

  3. #3
    Membre expérimenté
    Profil pro
    retraité
    Inscrit en
    décembre 2010
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2010
    Messages : 625
    Points : 1 691
    Points
    1 691
    Par défaut
    A priori elle est de nouveau présente, mais pas active par défaut

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/04/2022, 15h10
  2. [Images] Modifier des photos automatiquement
    Par mikegre dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 19/09/2011, 14h46
  3. Générateur d'image aléatoire
    Par Mistic100 dans le forum Autres
    Réponses: 3
    Dernier message: 11/12/2007, 20h23
  4. Générateur d'image pour code
    Par roudoudouduo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/01/2007, 14h23
  5. [Rech] Meilleur générateur d'image disque
    Par Amélie Ladoque dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 09/06/2005, 14h26

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