صدأ 1.41.0: ضمانات جديدة لـ Box في FFI ، تحسينات في تركيب البضائع ، تخفيف القيود على السمات

يسر فريق Rust أن يعلن عن إصدار النسخة الجديدة 1.41.0. Rust هي لغة برمجة تتيح للجميع إنشاء برامج موثوقة وفعالة.


إذا قمت بتثبيت الإصدار السابق من Rust باستخدام أدوات rustup، فأنت بحاجة إلى تشغيل الأمر التالي للترقية إلى الإصدار 1.41.0:


rustup update stable

إذا لم تكن قد قمت بتثبيته بالفعل rustup، يمكنك تثبيته من الصفحة المقابلة على موقعنا ، وكذلك الاطلاع على ملاحظات الإصدار التفصيلية على GitHub.


ما هو مدرج في الإصدار المستقر 1.41.0


تتمثل الابتكارات الرئيسية لـ Rust 1.41.0 في تخفيف القيود المفروضة على تنفيذ السمات والتحسينات ، ويكون cargo installتنسيق الملف الجديد Cargo.lockأكثر ملاءمة للعمل به git، وضمانات جديدة لأولئك Box<T>المرتبطين بـ FFI. انظر ملاحظات الإصدار لمزيد من المعلومات.


تخفيف القيود على تنفيذ السمات


لمنع الأعطال في النظام البيئي ، عندما تضيف التبعية تطبيقات سمة جديدة ، يستخدم 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