L'équipe de développement de Rust est heureuse d'annoncer une nouvelle version de son langage : la 1.35. Rust est un langage de programmation qui permet d'écrire des programmes fiables et efficaces.
Si Rust est déjà installé via rustup, vous pouvez mettre à jour avec la commande :
$ mise à jour rustup stable
L'essentiel de la mise à jour est l'implémentation des traits de fermeture Fn, FnOnce, FnMut, pour Box ,Boîte ,Boîte , respectivement. Ajout de la possibilité de fermer des pointeurs vers des fonctions non sécurisées, l'appel de la macro dbg!() est désormais possible sans arguments, et la bibliothèque standard a été stabilisée.
Aux détails :
- Dans la nouvelle version, nous avons ajouté des implémentations des traits Fn, FnOnce, FnMut pour Box ,Boîte ,Boîte , respectivement.
Maintenant, ce code fonctionnera :
fn foo(x : Boîte u8>) -> Vec {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Vous pouvez également appeler une clôture directement depuis Box :
fn foo(x : Boîte ) {
X()
} - Les fermetures peuvent désormais être converties en pointeurs vers des fn non sécurisés.
Maintenant, ce code est valide :
/// Les invariants de sécurité sont ceux du pointeur `unsafe fn` passé.
fn dangereux call_unsafe_fn_ptr(f: fn dangereux()) {
F()
}fn principal() {
// SÉCURITÉ : Il n'y a pas d'invariants.
// La fermeture est statiquement empêchée de faire des choses dangereuses.
peu sûr {
call_unsafe_fn_ptr(|| {
dbg!();
});
}
} - Ajout de la possibilité d'appeler la macro dbg!() sans arguments.
Si vous transmettez une expression à cette macro, la macro imprimera son résultat. Exemple:
fn principal() {
soit mut x = 0 ;si dbg!(x == 1) {
x += 1 ;
}dbg!(x);
}Lorsque vous exécutez ce code, vous verrez :
[src/main.rs:4] x == 1 = faux
[src/main.rs:8] x = 0Maintenant, vous pouvez écrire comme ceci :
fn principal() {
soit condition = vrai ;si condition {
dbg!();
}
}Lorsque vous exécutez ce code, vous verrez :
[src/main.rs:5]
- Certaines parties de la bibliothèque standard ont été stabilisées
- Nouvelles méthodes pour f32 et f64 :
- f32 ::copier le signe
- f64 ::copier le signe
En fait, les fonctions copient le signe d'un autre nombre. Exemple:
fn principal() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Ajout de nouvelles méthodes pour les types Range
- Gamme : contient
- RangeFrom :: contient
- RangeTo :: contient
- RangeInclusive :: contient
- RangeToInclusive :: contient
Avec ces méthodes, vous pouvez facilement vérifier si une certaine valeur est dans une séquence :
fn principal() {
si (0..=10).contient(&5) {
println!("Cinq est inclus dans zéro à dix.");
}
} - Vous pouvez trouver une liste complète des API stabilisées ici
- Nouvelles méthodes pour f32 et f64 :
- Dans cette mise à jour, Clippy (il s'agit d'un programme qui vérifie votre code pour de nombreuses erreurs) a ajouté une nouvelle vérification pour drop_bounds. Cette vérification fonctionne lorsque vous définissez une contrainte : T : Drop - pour les fonctions généralisées :
fn foo (x : T){}Avoir une restriction T: Drop est le plus souvent une erreur, puisque certains types sont immédiatement exclus, comme u8. (Vous pouvez en savoir plus à ce sujet ici)
- De nombreuses améliorations et correctifs dans Cargo (gestionnaire de packages linguistiques), liste complète des changements
Source: linux.org.ru
