Rust 1.68 : le protocole de registre "sparse" de Cargo est désormais disponible en version stable,
cette version s'accompagne d'une nouvelle macro pin

Protocole "sparse" de Cargo

Le protocole de registre "sparse" de Cargo est désormais disponible en version stable pour la lecture de l'index des crates (l'unité de compilation en Rust), ainsi que l'infrastructure sur https://index.crates.io/ pour celles publiées dans le registre primaire crates.io. Le protocole git précédent (qui est toujours la valeur par défaut) clone un référentiel qui indexe tous les crates disponibles dans le registre.

Pour que Cargo puisse déterminer quelles crates existent sur crates.io, il télécharge et lit un "index" qui répertorie toutes les versions de tous les crates. L'index réside dans un référentiel git hébergé sur GitHub. Cargo récupère et stocke l'index dans le répertoire personnel de Cargo. Ce système permet à GitHub de gérer le traitement côté serveur et offre un moyen pratique de récupérer progressivement les nouvelles mises à jour.

Cependant, comme l'index a considérablement augmenté au fil du temps, ce système a commencé à atteindre des limites d'évolutivité, et les récupérations et mises à jour initiales continuent de ralentir. Vous avez peut-être remarqué une pause lorsque Cargo affiche Mise à jour de l'index crates.io ou lors de la phase de « résolution des deltas »*:

Citation Envoyé par affichage à l'écran
Updating crates.io index
Fetch [=================> ] 74.01%, (64415/95919) resolving deltas
Avec la RFC 2789, l'équipe a introduit un nouveau protocole pour améliorer la façon dont Cargo accède à l'index. Au lieu d'utiliser git, il récupère les fichiers de l'index directement via HTTPS. Cargo téléchargera uniquement les informations sur les dépendances de crates spécifiques de votre projet.

C'est dans ce contexte qu'elle a introduit un nouveau service sur https://index.crates.io/ pour héberger l'index crates.io. Si vous êtes derrière un pare-feu ou un proxy restrictif, vous devrez peut-être autoriser explicitement Cargo à accéder à ce site.

Le nouveau protocole devrait fournir une amélioration significative des performances lors de l'accès à crates.io, car il ne téléchargera que des informations sur le sous-ensemble de crates que vous utilisez réellement.

Pour utiliser le protocole sparse avec crates.io, définissez la variable d'environnement CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse ou modifiez votre fichier .cargo/config.toml pour ajouter*:

Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[registries.crates-io]
protocol = "sparse"

En somme

Cargo prend en charge deux protocoles de registre distants*: git et sparse. Le protocole git stocke les fichiers d'index dans un référentiel git et le protocole sparse récupère les fichiers individuels via HTTP :
  • Protocole Git : le protocole git n'a pas de préfixe de protocole dans l'URL d'index. Par exemple, l'URL de l'index git pour crates.io est https://github.com/rust-lang/crates.io-index. Cargo met en cache le référentiel git sur le disque afin qu'il puisse récupérer efficacement les mises à jour de manière incrémentielle.
  • Protocole sparse : le protocole sparse utilise le préfixe de protocole sparse+ dans l'URL du registre. Par exemple, l'URL d'index fragmenté pour crates.io est sparse+https://index.crates.io/. Le protocole fragmenté télécharge chaque fichier d'index à l'aide d'une requête HTTP individuelle. Étant donné que cela entraîne un grand nombre de petites requêtes HTTP, les performances sont considérablement améliorées avec un serveur qui prend en charge le pipelining et HTTP/2.

Il est actuellement prévu que le protocole sparse devienne la valeur par défaut pour crates.io dans la version 1.70.0 dans quelques mois.

Construction locale de PIN

La nouvelle macro pin! construit un Pin<&mut T> à partir d'une expression T, capturée anonymement dans l'état local. Ceci est souvent appelé épinglage de pile, mais cette "pile" peut également être l'état capturé d'une async fn ou d'un bloc. Cette macro est similaire à certains crates, comme tokio::pin!, mais la bibliothèque standard peut tirer parti des éléments internes de Pin et de l'extension de durée de vie temporaire pour une macro plus ressemblant à une expression.

Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
/// Exécute un future jusqu'à son achèvement.
fn block_on<F: Future>(future: F) -> F::Output {
    let waker_that_unparks_thread = todo!();
    let mut cx = Context::from_waker(&waker_that_unparks_thread);
    // Pin the future so it can be polled.
    let mut pinned_future = pin!(future);
    loop {
        match pinned_future.as_mut().poll(&mut cx) {
            Poll::Pending => thread::park(),
            Poll::Ready(result) => return result,
        }
    }
}

Dans cet exemple, le future d'origine sera déplacé dans un local temporaire, référencé par le nouveau pinned_future avec le type Pin<&mut F>, et ce pin est soumis au vérificateur d'emprunt normal pour s'assurer qu'il ne peut pas survivre à ce local.

Gestionnaire d'erreurs allocpar défaut

Lorsque alloc échoue dans Rust, des API comme Box::new et Vec::push n'ont aucun moyen d'indiquer cet échec, donc un chemin d'exécution divergent doit être pris. Lors de l'utilisation du crate std, le programme imprimera sur stderr et abandonnera. À partir de Rust 1.68.0, les binaires qui incluent std continueront d'avoir ce comportement. Les binaires qui n'incluent pas std, n'incluant que alloc, vont maintenant panic*! en cas d'échec d'allocation, qui peut être ajusté ultérieurement via un #[panic_handler] si vous le souhaitez.

À l'avenir, il est probable que le comportement de std sera également modifié pour correspondre à celui des binaires alloc-only.

Le projet Rust a publié ses plans pour un nouveau modèle de gouvernance

Le projet Rust interagit avec la Rust Foundation, qui gère principalement les actifs financiers de Rust, mais en est séparée. Le projet open source Rust, qui gère les standards du langage, a publié un nouveau plan de gouvernance, cumul de six mois de travail intense. Publié sous forme de demande de commentaires sur GitHub, il va maintenant être soumis à une période de commentaires. Il doit être ratifié par les chefs d'équipe avant d'être accepté.

Motivation

Historiquement, l'équipe centrale identifiait les tâches importantes qui n'étaient pas du ressort de l'équipe et tentait de les réaliser elle-même. Cependant, le fait de confier ces deux activités à la même équipe n'a pas eu d'impact et a conduit à l'épuisement.

Le conseil de direction établi par ce RFC se concentre sur l'identification et la priorisation du travail en dehors des compétences de l'équipe. Le Conseil délègue principalement ce travail, plutôt que de le faire lui-même. Le Conseil peut également servir d'organe de coordination, d'organisation et de responsabilité entre les équipes, par exemple pour les efforts inter-équipes, les feuilles de route et le succès à long terme du projet.

Ce RFC établit également des mécanismes de surveillance et de responsabilité entre le Conseil dans son ensemble, les membres individuels du Conseil, l'équipe de modération, les équipes du Projet et les membres du Projet.

Rust est devenu si populaire qu'une équipe dédiée a été présentée pour la définition du style de codage Rust par défaut. Il n'est pas surprenant que Rust connaisse une croissance rapide. D'autant plus que le gouvernement américain l'a indirectement approuvé récemment.

« Nous sommes actuellement dans une période de croissance, a déclaré Rebecca Rumbul, directrice exécutive et PDG de la Rust Foundation. Le gouvernement américain s'est levé devant les gens pour dire qu'il fallait utiliser des langages à mémoire sécurisée comme Rust par défaut pour certains types de projets, afin de garantir un bon niveau de sécurité. Nous avons donc reçu énormément de soutien et d'encouragements de la part des gens pour qu'ils adoptent Rust. »

La communauté Rust compte aujourd'hui plus de 2 millions de développeurs, qui construisent avec près de 100 000 compilations Rust, selon la Fondation. En effet, une enquête menée par Stack Overflow auprès d'environ 71 000 personnes a révélé qu'il s'agissait du langage le plus aimé.

« C'est un langage vraiment utile et vraiment performant, a déclaré Rumbul. La polyvalence qu'il offre, la vitesse et les performances qu'il fournit, la sécurité qu'il offre - il coche beaucoup de cases pour beaucoup de gens. » Chaque langage a des guides de style et, s'il est assez populaire, peut avoir plusieurs guides de style d'utilisateurs majeurs, comme Google, qui a son guide pour C++ (le langage dans lequel Chrome est écrit). Guido van Rossum de Python a également publié ses conventions de style.

Rust a un guide de style dans le "rustfmt" ou "Rust formatting tool" publié sur GitHub. L'outil formate automatiquement le code Rust pour permettre aux développeurs de se concentrer sur la sortie et vise à réduire la courbe d'apprentissage abrupte à laquelle sont confrontés les nouveaux développeurs Rust. Le guide demande aux développeurs « d'utiliser des espaces, pas des tabulations » et indique que « chaque niveau d'indentation doit être de 4 espaces », par exemple.

Comme l'explique Josh Triplett dans un récent billet de blog Rust : « Le style standardisé aide les développeurs Rust à se sentir à l'aise et à l'aise dans de nombreux projets différents, et le support d'outils de rustfmt facilite la maintenance et l'intégration dans l'intégration continue ».

Rust a été créé en 2006 et a été maintenu au sein de Mozilla jusqu'à récemment. La Fondation Rust n'a que deux ans d'existence. Son premier objectif était de s'étendre au-delà de son unique sponsor pour atteindre, eh bien, plus. Aujourd'hui, il s'agit d'une collaboration internationale et interprofessionnelle entre 40 entreprises de toutes tailles et de tous secteurs. Cela peut être un cadeau et une malédiction, car les mainteneurs peuvent être épuisés par l'afflux de nouveaux utilisateurs.

« Nous devons nous assurer que Rust peut faire face à cela », a déclaré Rumbul. « C'est génial que tout le monde vienne à la fête, mais nous devons nous assurer que toute notre infrastructure est capable de faire face à cela, que nos mainteneurs ne sont pas épuisés à cause de toutes ces nouvelles personnes qui leur demandent des conseils et qui ont besoin d'attention. Notre priorité est simplement de nous assurer que Rust peut évoluer, mais qu'il peut le faire efficacement sans que les gens s'épuisent ou que l'infrastructure s'effondre. »

Nom : rust.png
Affichages : 6455
Taille : 25,2 Ko

Popularité de Rust

Dans l'édition mars 2023 de l'index TIOBE de popularité des langages, Rust occupe la 19ème place. En octobre, Paul Jansen, PDG de Tiobe Software, voyait en Rust comme une « petite menace » pour C et C++ », deux langages qui pourraient être remplacés par Rust dans de nouveaux projets, selon certains développeurs, en raison de sa meilleure gestion de la sécurité de la mémoire.

Mais TIOBE ne représente pas la réalité des professionnels de l'IT, encore moins des professionnels francophones.

En effet, l'indice TIOBE Programming Community est un indicateur de la popularité des langages de programmation. L'index est mis à jour une fois par mois. Les notes sont basées sur le nombre d'ingénieurs qualifiés dans le monde, les cours et les fournisseurs tiers. Les moteurs de recherche populaires tels que Google, Bing, Yahoo!, Wikipédia, Amazon, YouTube et Baidu sont utilisés pour calculer les notes. Il est important de noter que l'index TIOBE ne concerne pas le meilleur langage de programmation ou le langage dans lequel la plupart des lignes de code ont été écrites. L'index peut être utilisé pour vérifier si vos compétences en programmation sont toujours à jour ou pour prendre une décision stratégique sur le langage de programmation à adopter lors du démarrage de la construction d'un nouveau système logiciel.

Force est de constater que, parmi les langages les plus demandés dans les offres d'emploi sur Developpez.com, Rust a occupé la 23ème place.

Emploi informatique 2021 : les langages de programmation les plus demandés et les mieux payés
Portail Emploi de Developpez.com
Emploi informatique 2021 : les tendances et les effets de mode

Source : Rust

Et vous ?

Que pensez-vous de Rust ? L'avez-vous déjà utilisé ?
Comment expliquer vous sa monté en popularité, notamment au sein de projets de grande envergure ?
Quelle amélioration / nouveauté préférez-vous dans la nouvelle version ?