Rust 1.41.1 Release: Release Corrective

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 'staticet les implémentations de traits était Copypré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 {
        //     1.41.0:
        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); //     `foo`.
    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 - .


All Articles