IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Rust 1.70.0, la nouvelle version du langage de programmation, est désormais disponible
Et apporte plusieurs fonctionnalités stabilisées et une activation par défaut du protocole sparse de Cargo

Le , par Anthony

32PARTAGES

6  0 
L'équipe Rust est heureuse d'annoncer une nouvelle version de Rust, 1.70.0. Rust est un langage de programmation permettant à chacun de construire des logiciels fiables et efficaces.


Si vous avez une version précédente de Rust installée via rustup, vous pouvez obtenir 1.70.0 avec :

Code : Sélectionner tout
$ rustup update stable

Si vous ne l'avez pas encore, vous pouvez obtenir rustup à partir de la page appropriée sur le site web, et consulter les notes de version détaillées pour 1.70.0 sur GitHub.

Si vous souhaitez tester les futures versions, vous pouvez envisager de mettre à jour localement pour utiliser le canal beta (rustup default beta) ou le canal nightly (rustup default nightly). N'hésitez pas à signaler les bugs que vous pourriez rencontrer !

Ce qu'il y a dans la version 1.70.0 stable

Sparse par défaut pour crates.io

Le protocole "sparse" de Cargo est maintenant activé par défaut pour la lecture de l'index de crates.io. Cette fonctionnalité avait été stabilisée avec Rust 1.68.0, mais nécessitait toujours une configuration pour l'utiliser avec crates.io. Le plan annoncé était d'en faire la valeur par défaut dans la version 1.70.0, et c'est chose faite !

Vous devriez constater une amélioration substantielle des performances lorsque vous récupérez des informations dans l'index de crates.io. Les utilisateurs situés derrière un pare-feu restrictif devront s'assurer que l'accès à https://index.crates.io est disponible. Si, pour une raison quelconque, vous devez conserver l'ancienne valeur par défaut d'utilisation de l'index git hébergé par GitHub, le paramètre de configuration registries.crates-io.protocol peut être utilisé pour changer la valeur par défaut.

Un effet secondaire à noter à propos du changement de la méthode d'accès est que cela change également le chemin vers le cache des crates, donc les dépendances seront téléchargées à nouveau. Une fois que vous vous êtes pleinement engagé à utiliser le protocole sparse, vous pouvez vouloir effacer les anciens chemins $CARGO_HOME/registry/*/github.com-*.

OnceCell et OnceLock

Deux nouveaux types ont été stabilisés pour l'initialisation unique de données partagées, OnceCell et sa contrepartie thread-safe OnceLock. Ils peuvent être utilisés partout où la construction immédiate n'est pas souhaitée, et peut-être même pas possible, comme les données non-const dans les variables globales.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use std::sync::OnceLock;

static WINNER: OnceLock<&str> = OnceLock::new();

fn main() {
    let winner = std::thread::scope(|s| {
        s.spawn(|| WINNER.set("thread"));

        std::thread::yield_now(); // give them a chance...

        WINNER.get_or_init(|| "main")
    });

    println!("{winner} wins!");
}

Des crates comme lazy_static et once_cell ont répondu à ce besoin dans le passé, mais maintenant ces blocs de construction font partie de la bibliothèque standard, portés à partir des modules unsync et sync de once_cell. Il y a encore d'autres méthodes qui peuvent être stabilisées dans le futur, ainsi que des types compagnons LazyCell et LazyLock qui stockent leur fonction d'initialisation, mais cette première étape de stabilisation devrait déjà couvrir de nombreux cas d'utilisation.

IsTerminal

Ce trait nouvellement stabilisé dispose d'une seule méthode, is_terminal, pour déterminer si un descripteur de fichier ou un handle donné représente un terminal ou un TTY. Il s'agit là d'un autre cas de normalisation d'une fonctionnalité qui existait dans des crates externes, comme atty et is-terminal, en utilisant la fonction isatty de la bibliothèque C sur les cibles Unix et une fonctionnalité similaire ailleurs. Un cas d'utilisation courant est que les programmes fassent la distinction entre l'exécution en mode script et en mode interactif, en présentant des couleurs ou même une interface utilisateur complète lorsqu'ils sont interactifs.

Code : Sélectionner tout
1
2
3
4
5
6
use std::io::{stdout, IsTerminal};

fn main() {
    let use_color = stdout().is_terminal();
    // if so, add color codes to program output...
}

Niveaux nommés des informations de débogage

L'option de compilation -Cdebuginfo ne supportait auparavant que les nombres 0..=2 pour des quantités croissantes d'informations de débogage, alors que Cargo propose par défaut 2 dans les profils dev et test et 0 dans les profils release et bench. Ces niveaux de débogage peuvent maintenant être définis par leur nom : "none" (0), "limited" (1), et "full" (2), ainsi que deux nouveaux niveaux, "line-directives-only" et "line-tables-only".

Les documentations Cargo et rustc appelaient toutes deux le niveau 1 " line tables only ", mais c'était plus que cela, avec des informations sur toutes les fonctions, mais pas sur les types et les variables. Ce niveau est maintenant appelé "limited", et le nouveau niveau "line-tables-only" est encore plus réduit au minimum nécessaire pour les backtraces avec les noms de fichiers et les numéros de lignes. Ce niveau pourrait éventuellement devenir le niveau utilisé pour -Cdebuginfo=1. L'autre niveau line-directives-only est destiné au profilage NVPTX, et n'est pas recommandé par ailleurs.

Notez que ces options nommées ne sont pas encore disponibles pour être utilisées via Cargo.toml. Ce support sera disponible dans la prochaine version 1.71.

Stabilité forcée dans le CLI de test

Lorsque les fonctions #[test] sont compilées, l'exécutable reçoit une interface de ligne de commande de la crate test. Cette CLI dispose d'un certain nombre d'options, dont certaines ne sont pas encore stabilisées et nécessitent de spécifier -Zunstable-options, comme beaucoup d'autres commandes dans la chaîne d'outils Rust. Cependant, alors que cela n'est censé être autorisé que dans les nightly builds, cette restriction n'était pas active dans test - jusqu'à présent. À partir de la version 1.70.0, les versions stable et beta de Rust n'autoriseront plus les options de test instables, ce qui les rendra vraiment réservées aux versions nocturnes, comme indiqué dans la documentation.

Il y a des cas connus où des options instables ont pu être utilisées sans que l'utilisateur le sache, en particulier --format json utilisé dans IntelliJ Rust et d'autres plugins IDE. Ces projets sont déjà en train de s'adapter à ce changement, et le statut de la sortie JSON peut être suivi dans son numéro de suivi.

Source : Annonce de Rust 1.70.0

Et vous ?

Que pensez-vous de cette dernière version du langage Rust ?

Trouvez-vous que les améliorations apportées au langage sont intéressantes ?

Voir aussi

Rust 1.69.0, la dernière version du langage de programmation multi-paradigme, est disponible, et inclut de nombreuses petites améliorations

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

Le langage de programmation Rust gagne en popularité parmi les développeurs et fait son entrée dans le top 20, selon Tiobe. Python, Java, C et C++ s'accaparent à eux seuls de 55% de parts de marché

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de smarties
Membre expert https://www.developpez.com
Le 05/06/2023 à 14:26
je vais pouvoir mettre à jour mes projets en enlevant les lazy_static, ça fera une dépendance en moins
0  0