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 !

La version 1.83 du langage de programmation Rust est disponible, introduisant de nouvelles capacités constantes, de nouvelles fonctions stables et des API stabilisées

Le , par Jade Emy

14PARTAGES

2  0 
L'équipe Rust a annoncé la sortie de la version 1.83 du langage de programmation Rust. Cette mise à jour introduit des extensions significatives aux contextes const, permettant à plus de code d'être évalué au moment de la compilation. cette version comprend une série de nouvelles fonctions qui sont désormais stables dans les contextes constants.

Rust est un langage de programmation généraliste qui met l'accent sur les performances, la sécurité des types et la concurrence. Il assure la sécurité de la mémoire, ce qui signifie que toutes les références pointent vers une mémoire valide. Il n'utilise pas de ramasse-miettes traditionnel ; à la place, les erreurs de sécurité de la mémoire et les courses aux données sont évitées par le "borrow checker", qui suit la durée de vie des références au moment de la compilation.

L'équipe Rust a annoncé la sortie de la version 1.83 du langage de programmation Rust. Cette mise à jour introduit des extensions significatives aux contextes const, permettant à plus de code d'être évalué au moment de la compilation.

Auparavant, les contextes const ne pouvaient pas faire référence à des éléments statiques, sauf dans les expressions d'initialisation d'éléments statiques. Cette restriction a été levée, bien que la lecture des éléments statiques mutables ou mutables à l'intérieur dans les contextes constants reste interdite. La valeur finale d'une constante ne peut pas faire référence à des éléments statiques mutables, ce qui garantit la cohérence tout au long de l'exécution du programme.

En outre, cette version comprend une série de nouvelles fonctions qui sont désormais stables dans les contextes constants. Ces améliorations ouvrent de nouvelles possibilités pour l'exécution de code dans des contextes constants.


Voici la présentation de quelques nouveautés de Rust 1.83 :

Nouvelles capacités const

Cette version inclut plusieurs extensions importantes de ce que le code s'exécutant dans des contextes const peut faire. Il s'agit de tout le code que le compilateur doit évaluer à la compilation : la valeur initiale des éléments const et static, les longueurs des tableaux, les valeurs discriminantes des enums, les arguments génériques const, et les fonctions appelables à partir de ces contextes (const fn).

Références aux éléments statiques. Jusqu'à présent, les contextes const, à l'exception de l'expression de l'initialisateur d'un élément static, n'avaient pas le droit de faire référence à des éléments static. Cette limitation a été levée :

Code : Sélectionner tout
1
2
static S: i32 = 25;
const C: &i32 = &S;


Notez cependant que la lecture de la valeur d'une statique mutable ou mutable intérieure n'est toujours pas autorisée dans les contextes const. De plus, la valeur finale d'une constante ne peut pas faire référence à une statique mutable ou mutable intérieure :

Code : Sélectionner tout
1
2
3
4
5
6
7
static mut S: i32 = 0;
 
const C1: i32 = unsafe { S };
// error: constant accesses mutable global memory
 
const C2: &i32 = unsafe { &S };
// error: encountered reference to mutable memory in `const`
Ces limitations garantissent que les constantes sont toujours "constantes" : la valeur qu'elles évaluent et leur signification en tant que modèle (qui peut impliquer le déréférencement de références) seront les mêmes tout au long de l'exécution du programme.

Cela dit, une constante est autorisée à évaluer un pointeur brut qui pointe vers une statique mutable ou mutable intérieure :

Code : Sélectionner tout
1
2
static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;


Références et pointeurs mutables. Il est désormais possible d'utiliser des références mutables dans des contextes constants :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
const fn inc(x: &mut i32) {
    *x += 1;
}
 
const C: i32 = {
    let mut c = 41;
    inc(&mut c);
    c
};


Les pointeurs bruts mutables et la mutabilité intérieure sont également pris en charge :

Code : Sélectionner tout
1
2
3
4
5
6
7
use std::cell::UnsafeCell;
 
const C: i32 = {
    let c = UnsafeCell::new(41);
    unsafe { *c.get() += 1 };
    c.into_inner()
};


Cependant, les références et pointeurs mutables ne peuvent être utilisés qu'à l'intérieur du calcul d'une constante, ils ne peuvent pas faire partie de la valeur finale de la constante :

Code : Sélectionner tout
1
2
const C: &mut i32 = &mut 4;
// error[E0764]: mutable references are not allowed in the final value of constants
Cette version est également livrée avec toute une série de nouvelles fonctions qui sont désormais stables dans les contextes constants (voir la fin de la section "API stabilisées").

Ces nouvelles capacités et ces API stabilisées devraient débloquer une toute nouvelle catégorie de code à exécuter dans des contextes constants.

Disponibilité

Si vous avez une version précédente de Rust installée via rustup, vous pouvez obtenir la version 1.83.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 du langage Rust.

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).

Source : Announcing Rust 1.83.0

Et vous ?

Pensez-vous que ces nouvelles fonctionnalités sont crédibles ou pertinentes ?
Quel est votre avis sur cette nouvelle version ?

Voir aussi :

La version 1.76.0 de Rust, le langage de programmation compilé multi-paradigme, est disponible et apporte une nouvelle documentation sur la compatibilité ABI, ainsi que d'autres améliorations

La communauté Rust reconnaît que le langage n'est pas sécurisé au travers d'une récente annonce de lancement d'une initiative de vérification de 7500 fonctions non sûres de la bibliothèque standard Rust

La Fondation Rust publie un nouveau document pour améliorer l'interopérabilité entre Rust et C++, après le lancement de l'« Interop Initiative » en février 2024 avec une contribution de 1 million de $ de Google

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