L'équipe Rust a publié une nouvelle version corrective de Rust, 1.41.1. Rust est un langage de programmation qui permet à chacun de créer des logiciels fiables et efficaces.
Si vous avez installé la version précédente de Rust à l'aide d'outils rustup
, pour mettre à niveau vers la version 1.41.1, il vous suffit d'exécuter la commande suivante:
rustup update stable
Si vous ne l'avez pas déjà installé rustup
, vous pouvez l' installer à partir de la page correspondante de notre site Web
Ce qui est inclus dans la version stable 1.41.1
Rust 1.41.1 est dédié à deux régressions critiques apparues dans Rust 1.41.0: inexactitude dans les durées de vie statiques et compilation incorrecte qui provoque des erreurs de segmentation. Ces régressions n'affectent pas les versions précédentes de Rust et nous recommandons aux utilisateurs de Rust 1.41.0 de mettre à niveau le plus rapidement possible. Un autre problème lié à l'interaction entre les durées de vie 'static
et les implémentations de traits était Copy
présent depuis Rust 1.0 et est également résolu par cette version.
Échec de vérification des static
éléments
Rust 1.41.0, - static
, . , static
. , , , 'static
, static
:
static mut MY_STATIC: &'static u8 = &0;
fn main() {
let my_temporary = 42;
unsafe {
MY_STATIC = &my_temporary;
}
}
1.41.1 :
error[E0597]: `my_temporary` does not live long enough
--> src/main.rs:6:21
|
6 | MY_STATIC = &my_temporary;
| ------------^^^^^^^^^^^^^
| | |
| | borrowed value does not live long enough
| assignment requires that `my_temporary` is borrowed for `'static`
7 | }
8 | }
| - `my_temporary` dropped here while still borrowed
#69114 PR, .
Copy
'static
Rust 1.0 :
#[derive(Clone)]
struct Foo<'a>(&'a u32);
impl Copy for Foo<'static> {}
fn main() {
let temporary = 2;
let foo = (Foo(&temporary),);
drop(foo.0);
drop(foo.0);
}
Rust 1.41.1 PR, . :
error[E0597]: `temporary` does not live long enough
--> src/main.rs:7:20
|
7 | let foo = (Foo(&temporary),);
| ^^^^^^^^^^ borrowed value does not live long enough
8 | drop(foo.0);
| ----- copying this value requires that
| `temporary` is borrowed for `'static`
9 | drop(foo.0);
10 | }
| - `temporary` dropped here while still borrowed
- , Foo<'a>
, 'a
, Copy
, 'a: 'static
. temporary
'0
'static
, , Foo<'0>
Copy
, drop
.
, .
, Rust 1.41.0, . , , . , LLVM, LLVM 9 LLVM 10.
Rust 1.41.0 LLVM 9 Rust 1.41.1 , . : #69225.
1.41.1
, Rust 1.41.1. , !
Rust - .