الصدأ 1.41.1 الإصدار: الإصدار التصحيحي

نشر فريق 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 {
        //     1.41.0:
        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); //     `foo`.
    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 - .


All Articles