Rust est un langage de programmation système axé sur la sécurité, la rapidité et la concurrence.
Pour mettre à jour votre version stable, il suffit d’exécuter la commande habituelle.
1 | $ rustup update stable |
Si vous ne disposez pas de rustup, vous pouvez en obtenir une copie sur la page de téléchargement du site officiel. N’hésitez pas également à consulter la release note de la 1.26.2
sur GitHub !
Quoi de neuf ?
De nouveaux correctifs ont été apportés, principalement axés sur les expressions (et les vérifications sous-jacentes) permises par le compilateur. Comme pour la 1.26.1
, cette mise à jour n’a pour but que de stabiliser les fonctionnalités existantes.
Bug dans la règle des emprunts mutables
En dehors des blocs unsafe
, le compilateur ne permet pas deux accès en écriture sur une même ressource en simultané. Toutefois, un bug est survenu, suite à un recyclage apporté par la 1.26.0
visant à améliorer l’ergonomie de match
, permettant ainsi de casser la règle précédemment citée.
Ici, par exemple, nous disposons de deux accès en écriture sur bar
au même moment.
1 2 3 4 5 6 7 8 | let mut foo = Some("foo".to_string()); let bar = &mut foo; match bar { Some(baz) => { bar.take(); // Should not be permitted, as baz has a unique reference to the bar pointer. }, None => unreachable!(), } |
En réponse à cela, la version 1.26.2
vient corriger ce problème. Désormais, la vérification est interrompue et renvoie une erreur lorsque le cas survient.
1 2 3 4 5 6 7 8 9 10 11 12 | error[E0499]: cannot borrow `*bar` as mutable more than once at a time --> src/main.rs:6:9 | 5 | Some(baz) => { | --- first mutable borrow occurs here 6 | bar.take(); // Should not be permitted, as baz has a ... | ^^^ second mutable borrow occurs here ... 9 | } | - first borrow ends here error: aborting due to previous error |
En définitive, l’équipe Rust a pris la décision de publier ce patch le plus rapidement possible pour éviter d’étendre inutilement le laps de temps pendant lequel les compilateurs stables sont affectés par ce bug.