L'équipe de développement de Rust est heureuse d'annoncer la sortie d'une nouvelle version de Rust, 1.33.0. Rust est un langage de programmation qui permet à chacun de créer des logiciels fiables et efficaces.
Si vous avez une version précédente de Rust installée à l'aide de rustup
, alors pour mettre à niveau Rust vers la version 1.33.0, il vous suffit de faire:
$ rustup update stable
Si vous n'avez pas encore installé rustup
, vous pouvez l' installer à partir de la page correspondante de notre site Web. Des notes de version détaillées pour Rust 1.33.0 sont disponibles sur GitHub.
Ce qui est inclus dans la version stable 1.33.0
Améliorations majeures de cette version: extension significative des capacités const fn
et stabilisation de la nouvelle API Pin.
Étendre les capacités de const fn
const fn
désormais capable de faire beaucoup plus , à savoir:
- correspondance inconditionnelle (irréfutable) de motifs (par exemple,
const fn foo((x, y): (u8, u8)) { ... }
) let
liaisons (par exemple let x = 1;
)- liaisons mutables
let
(par exemple let mut x = 1;
) - expressions d'affectation (par exemple
x = y
) et opérateurs d'affectation (par exemple x += y
), y compris l'affectation à des projections (par exemple, un champ de structure ou le résultat d'un opérateur d'indexation - x[3] = 42
) - déclarations d'expression (par exemple
3;
)
Vous pouvez maintenant appeler "const unsafe fn" depuis "const fn" , par exemple:
const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } }
Grâce à ces améliorations, il est devenu possible de déclarer une constante un grand nombre de fonctions de la bibliothèque standard. Ils sont répertoriés ci-dessous dans la section bibliothèque.
API Pin
Ce problème introduit un nouveau mécanisme dans la langue, introduit type std :: pin :: Pin et marqueur type Unpin . L'idée principale est décrite en détail dans la documentation "std :: pin" du module :
Parfois, il peut être utile d'empêcher l'objet de bouger, c'est-à-dire garantir l'immuabilité de son adresse en mémoire. Le scénario principal d'utilisation de cette fonctionnalité est les structures auto-référencées, car le déplacement de tels objets entraînera des pointeurs invalides, ce qui peut conduire à un comportement non défini (UB).
Pin<P>
garantit que l'objet référencé par n'importe quel pointeur de type P
a un emplacement fixe en mémoire, c'est-à-dire il ne peut pas être déplacé et sa mémoire ne peut pas être libérée. Ces valeurs sont appelées «épinglées».
Il est prévu que ce mécanisme sera utilisé principalement par les auteurs des bibliothèques, nous n'allons donc pas approfondir les détails maintenant (qui peuvent être trouvés dans la documentation sur le lien ci-dessus). Cependant, la stabilisation de cette API est un événement important pour tous les utilisateurs de Rust, car il s'agit d'une étape clé vers l' async
/ await
très attendue. Le statut des travaux restants dans cette direction peut être contrôlé sur areweasyncyet.rs .
Importer en tant que "_"
Vous pouvez maintenant importer des entités en tant que "_" . Cela vous permet d'importer l'implémentation du type sans entrer son nom dans l'espace de noms courant, par exemple:
use std::io::Read as _;
Voir les notes de version pour plus de détails.
Stabilisation de la bibliothèque standard
Voici une liste de tout ce qui est devenu constant:
- Les méthodes overflowing_ {add, sub, mul, shl, shr} de tous les types numériques sont désormais constantes.
- Les méthodes rotation_left, rotation_right et wrapping_ {add, sub, mul, shl, shr} de tous les types numériques sont maintenant constantes.
- Les méthodes is_positive et is_negative de tous les types numériques signés sont désormais constantes.
- La méthode get de tous les types NonZero est désormais constante.
- Les méthodes count_ones, count_zeros, Leading_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le de tous les types numériques sont maintenant constantes.
- La méthode Ipv4Addr :: new est désormais constante.
De plus, les API suivantes sont stabilisées:
Voir les notes de version pour plus de détails.
Améliorations du fret
Cargo réassemble maintenant la caisse si l'un de ses fichiers a été modifié lors de la construction initiale.
Voir les notes de version pour plus de détails.
Crates.io
Comme annoncé précédemment , à partir de cette version, crates.io aura besoin d'une adresse e-mail de confirmation pour publier des caisses. À partir du 2019-03-01 00:00 UTC, la mise en œuvre de la cargo publish
du cargo publish
échouera avec les comptes sans courrier vérifié.
Ceci est nécessaire pour répondre aux exigences DMCA . Si vous n'avez pas remarqué les avertissements à ce sujet que cargo a écrits dans les dernières versions, rendez-vous sur crates.io/me pour indiquer et confirmer votre courrier. Cette adresse postale ne sera jamais publiée et sera utilisée exclusivement pour la fonctionnalité directe de crates.io.
Développeurs 1.33.0
Beaucoup de gens ont créé ensemble Rust 1.33. Nous n'aurions pas pu terminer le travail sans chacun de vous. Je vous remercie!