Version Rust 1.41.0: nouvelles garanties pour Box dans FFI, améliorations dans l'installation du chargement, assouplissement des restrictions pour les traits

L'équipe Rust est heureuse d'annoncer la sortie d'une nouvelle version, 1.41.0. 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.0, 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, ainsi que voir les notes de version détaillées sur GitHub.


Ce qui est inclus dans la version stable 1.41.0


Les principales innovations de Rust 1.41.0 sont l'assouplissement des restrictions sur la mise en œuvre des traits, les améliorations cargo install, le nouveau format de fichier est Cargo.lockplus convivial gitet les nouvelles garanties pour ceux Box<T>associés à FFI. Voir les notes de version pour plus d'informations.


Assouplissement des restrictions sur la mise en œuvre des traits


, , 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