Lanzamiento de Rust 1.41.0: nuevas garantías para Box en FFI, mejoras en la instalación de carga, alivio de restricciones para rasgos

El equipo de Rust se complace en anunciar el lanzamiento de una nueva versión, 1.41.0. Rust es un lenguaje de programación que permite a todos crear software confiable y eficiente.


Si instaló la versión anterior de Rust usando herramientas rustup, para actualizar a la versión 1.41.0 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, así como ver las notas detalladas de la versión en GitHub.


Lo que se incluye en la versión estable 1.41.0


Las principales innovaciones de Rust 1.41.0 son la reducción de restricciones en la implementación de rasgos, mejoras cargo install, el nuevo formato de archivo es Cargo.lockmás amigable para trabajar gity nuevas garantías para aquellos Box<T>asociados con FFI. Consulte las notas de la versión para obtener más información.


Reducción de restricciones en la implementación de rasgos


, , Rust (orphan rule). , , , , .. . , .


Rust 1.41.0 , . , BetterVec<T>, Vec<T> . :


impl<T> From<BetterVec<T>> for Vec<T> {
    // ...
}

… :


impl<T> ForeignTrait<LocalType> for ForeignType<T> {
    // ...
}

Rust 1.40.0 impl , From Vec , . , newtype, .


From Vec , ( From) . , Rust 1.41.0 impl.


RFC.


cargo install


cargo install . CLI-, Rust.


Rust 1.41.0, cargo install , . --force, .


Cargo.lock


, Cargo Cargo.lock, . , .


Rust 1.41.0 , . lock-, . , , PR, .


Box<T> FFI


Rust 1.41.0, , Box<T>, T: Sized, ABI C (T*). , extern "C" Rust C, Rust Box<T> - T, T* C. , C :


// C header */

//     
struct Foo* foo_new(void);

//     ; no-op   NULL.
void foo_delete(struct Foo*);

… Rust :


#[repr(C)]
pub struct Foo;

#[no_mangle]
pub extern "C" fn foo_new() -> Box<Foo> {
    Box::new(Foo)
}

//   NULL    `Option<_>`.
#[no_mangle]
pub extern "C" fn foo_delete(_: Option<Box<Foo>>) {}

, , Box<T> T* ABI, Box<T> -null, . , — Box', .


: Box<T> , C, Rust. C. Box<T>, C T* .


, Box<T>.



Rust 1.41.0, :



32- Apple


Rust 1.41.0 32- Apple, i686-apple-darwin. Rust 1.42.0 .


.



, Cargo Clippy . MIR, : "Inside Rust".


1.41.0


, Rust 1.41.0. , !



Rust - .


andreevlex, blandger, funkill, P0lunin nlinker.

Source: https://habr.com/ru/post/undefined/


All Articles