Rust 1.41.1 Lanzamiento: Lanzamiento correctivo

El equipo de Rust ha publicado una nueva versión correctiva de Rust, 1.41.1. Rust es un lenguaje de programación que permite a todos crear software confiable y eficiente.


Si instaló la versión anterior de Rust utilizando herramientas rustup, para actualizar a la versión 1.41.1 solo necesita ejecutar el siguiente comando:


rustup update stable

Si aún no lo ha instalado rustup, puede instalarlo desde la página correspondiente de nuestro sitio web


Lo que se incluye en la versión estable 1.41.1


Rust 1.41.1 está dedicado a dos regresiones críticas que aparecieron en Rust 1.41.0: incorrección en vidas estáticas y compilación incorrecta que causa errores de segmentación. Estas regresiones no afectan a versiones anteriores de Rust, y recomendamos que los usuarios de Rust 1.41.0 actualicen lo más rápido posible. Otro problema relacionado con la interacción entre vidas 'statice implementaciones de rasgos estuvo Copypresente desde Rust 1.0 y también se soluciona con esta versión.


Falla de verificación del staticelemento


En Rust 1.41.0, debido a algunos cambios en la representación interna de los staticvalores, el analizador de préstamos resolvió accidentalmente algunos programas erróneos. En particular, el analizador de préstamos no verificó la corrección del tipo de staticelementos. Esto, a su vez, permitió asignar temporalmente valores con una vida útil más corta que 'statica la staticvariable:


static mut MY_STATIC: &'static u8 = &0;

fn main() {
    let my_temporary = 42;
    unsafe {
        //     1.41.0:
        MY_STATIC = &my_temporary;
    }
}

En 1.41.1, dicho código no compilará:


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

Puede obtener más información sobre este error en el # 69114 y el RP que lo solucionó .


Implementación Copypara toda la vida'static


A partir de Rust 1.0, el siguiente programa de error se compiló correctamente:


#[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); //     .
}

Para Rust 1.41.1, este problema se ha solucionado con el mismo PR que el anterior . Compilar el programa ahora produce el siguiente error:



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