نشر فريق Rust إصدارًا تصحيحيًا جديدًا لـ Rust ، 1.41.1. Rust هي لغة برمجة تتيح للجميع إنشاء برامج موثوقة وفعالة.
إذا قمت بتثبيت الإصدار السابق من Rust باستخدام أدوات rustup
، فأنت بحاجة إلى تشغيل الأمر التالي للترقية إلى الإصدار 1.41.1:
rustup update stable
إذا لم تكن قد قمت بتثبيته بالفعل rustup
، يمكنك تثبيته من الصفحة المقابلة على موقعنا
ما هو مدرج في الإصدار المستقر 1.41.1
الصدأ 1.41.1 مخصص لاثنين من الانحدارات الحرجة التي ظهرت في الصدأ 1.41.0: الخلل في عمر ثابت والتجميع غير الصحيح الذي يسبب أخطاء التجزئة. لا تؤثر هذه الانحدارات على الإصدارات السابقة من Rust ، ونوصي بترقية مستخدمي Rust 1.41.0 في أسرع وقت ممكن. كانت هناك مشكلة أخرى تتعلق بالتفاعل بين العمر 'static
وتنفيذ السمة Copy
موجودة منذ Rust 1.0 وتم إصلاحها أيضًا من خلال هذا الإصدار.
فشل التحقق من static
العنصر
في Rust 1.41.0 ، بسبب بعض التغييرات في التمثيل الداخلي static
للقيم ، حل محلل الاقتراض عن طريق الخطأ بعض البرامج الخاطئة. على وجه الخصوص ، لم يتحقق محلل الاقتراض من صحة نوع static
العناصر. وهذا، بدوره، جعل من الممكن القيم تعيين مؤقتا مع عمر أقصر من 'static
ل static
متغير:
static mut MY_STATIC: &'static u8 = &0;
fn main() {
let my_temporary = 42;
unsafe {
MY_STATIC = &my_temporary;
}
}
في 1.41.1 ، لن يجمع هذا الرمز:
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
يمكنك معرفة المزيد حول هذا الخطأ في # 69114 و العلاقات العامة التي ثابتة .
التنفيذ Copy
مدى الحياة'static
بدءًا من Rust 1.0 ، تم تصنيف برنامج الخطأ التالي بنجاح:
#[derive(Clone)]
struct Foo<'a>(&'a u32);
impl Copy for Foo<'static> {}
fn main() {
let temporary = 2;
let foo = (Foo(&temporary),);
drop(foo.0);
drop(foo.0);
}
بالنسبة إلى Rust 1.41.1 ، تم إصلاح هذه المشكلة بنفس العلاقات العامة المذكورة أعلاه . ينتج عن ترجمة البرنامج الآن الخطأ التالي:
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 - .