
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` |
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 |

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 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 ?


Voir aussi :



Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.