Rust 1.36.0 est disponible en version stable et apporte le type MaybeUninit
ainsi qu'une nouvelle implémentation de HashMap
L’équipe responsable de Rust a annoncé la disponibilité de la nouvelle version Rust 1.36.0. Cette version apporte de nombreux changements, notamment la stabilisation du trait Future, le crate alloc, le type MaybeUninit
Future
Dans Rust 1.36.0, le trait tant attendu Futura été stabilisé!
Avec cette stabilisation, l'équipe espère donner aux crate importants, aux bibliothèques et à l'écosystème le temps de se préparer à async / .await.
Le crate alloc est stable
L’unité de compilation en Rust est le crate (caisse en anglais) contrairement au C par exemple, où c’est le fichier. Chacun des crates d’un projet peut utiliser une édition différente du langage. On peut, par exemple, créer un nouveau crate 2015 et utiliser un crate 2018, qui utilise de nouveaux mots-clés sans problèmes. Le langage peut donc avoir des changements incompatibles sans que le code des utilisateurs n’en soit impacté.
Avant la version 1.36.0, la bibliothèque standard était composée des crate std, core et proc_macro. Le crate core fournissait des fonctionnalités essentielles telles que Iterator et Copy et pouvait être utilisée dans les environnements #! , car il n’imposait aucune exigence. Pendant ce temps, std crate fournissait des types tels que Box
À partir de Rust 1.36.0, les parties de std qui dépendent d’un allocateur global, par exemple. Vec
Si vous êtes le responsable d'une bibliothèque qui ne s'appuie que sur certaines primitives d'allocation, pensez à rendre votre bibliothèque # compatible en utilisant ce qui suit en haut de votre fichier lib.rs:
#!
extern crate alloc;
use alloc::vec::Vec;
488980
MaybeUninit
Dans les versions précédentes de Rust, la fonction mem :: uninitialized vous permettait de contourner les vérifications d'initialisation de Rust en prétendant que vous aviez initialisé une valeur au type T sans rien faire. L’une des utilisations principales de cette fonction a été d’allouer des tableaux paresseux.
Cependant, mem :: uninitialized est une opération extrêmement dangereuse qui ne peut essentiellement pas être utilisée correctement car le compilateur Rust suppose que les valeurs sont correctement initialisées. Par exemple, l'appel de mem :: uninitialized ::
Pour remédier à cette situation, dans Rust 1.36.0, le type MaybeUninit
Comme MaybeUninit
NLL pour Rust 2015
Dans l'annonce de Rust 1.31.0, l'équipe avait parlé de NLL (Non-Lexical Lifetimes - Durée de vie non lexicale), une amélioration du langage qui rend le borrow checker plus intelligent et plus convivial. Par exemple, vous pouvez maintenant écrire:
fn main() {
let mut x = 5;
let y = &x;
let z = &mut x; // This was not allowed before 1.31.0.
}
Dans la version 1.31.0, NLL n'était stabilisé que pour Rust 2018, avec la promesse de le reporter également dans Rust 2015. Avec Rust 1.36.0, l'équipe annonce que c'est désormais le cas ! NLL est maintenant disponible pour Rust 2015.
Avec NLL dans les deux éditions, elle envisage de supprimer l'ancien borrow checker. Cependant, ce dernier a malheureusement accepté un code non sain qu'il n'aurait pas dû. En conséquence, NLL est actuellement dans un "mode de migration" dans lequel l'équipe va émettre des avertissements au lieu d’erreurs si le borrow checker NLL rejette le code que l’ancien vérificateur d’emprunt AST accepterait.
Une nouvelle implémentation de HashMap
Dans Rust 1.36.0, l’implémentation de HashMap
Support de -- offline dans Cargo
Pendant la plupart des versions, Cargo n'interagit pas avec le réseau. Parfois, cependant, Cargo doit le faire. C'est le cas lorsqu'une dépendance est ajoutée et que la dernière version compatible doit être téléchargée. Parfois, l’accès au réseau n’est pas une option, par exemple dans un avion ou dans des environnements de construction isolés.
Dans Rust 1.36, un nouveau drapeau Cargo a été stabilisé: --offline. L'indicateur modifie l'algorithme de résolution de dépendance de Cargo pour n'utiliser que des dépendances mises en cache localement. Lorsque les crate requises ne sont pas disponibles hors ligne et qu'un accès au réseau serait requis, Cargo se terminera avec une erreur. Pour pré-remplir le cache local en vue de la mise hors ligne, utilisez la commande cargo fetch, qui télécharge toutes les dépendances requises pour un projet.
Changement au niveau de la bibliothèque
La macro dbg! supporte désormais des arguments multiples.
De nombreuses API ont été passées en const à l'instar de :
De nouvelles API sont désormais disponibles en version stable, comme :
Source : note de version
Voir aussi :
:fleche: C2Rust : un outil qui permet de faire la traduction et la refactorisation de votre code écrit en langage C vers le langage Rust
:fleche: La version 1.35.0 de Rust est disponible avec les traits de fermeture FnOnce, FnMut et Fn pour Box
:fleche: La feuille de route 2019 de Rust, est disponible et place l'année sous le signe de la maturité
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.