Liberação Rust 1.41.0: novas garantias para Box na FFI, melhorias na instalação de carga, flexibilizando restrições para características

A equipe Rust tem o prazer de anunciar o lançamento de uma nova versão, 1.41.0. Rust é uma linguagem de programação que permite a todos criar software confiável e eficiente.


Se você instalou a versão anterior do Rust usando ferramentas rustup, para atualizar para a versão 1.41.0, basta executar o seguinte comando:


rustup update stable

Se você ainda não o instalou rustup, pode instalá-lo na página correspondente do nosso site, bem como ver notas de versão detalhadas no GitHub.


O que está incluído na versão estável 1.41.0


As principais inovações do Rust 1.41.0 são a redução de restrições na implementação de características, melhorias cargo install, o novo formato de arquivo é Cargo.lockmais amigável de se trabalhar gite novas garantias para os Box<T>associados ao FFI. Veja as notas de versão para mais informações.


Facilitando as restrições na implementação de características


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