رسٽ 1.82 عام مقصدي پروگرامنگ ٻولي جو رليز، جيڪو Mozilla پروجيڪٽ پاران قائم ڪيو ويو، پر ھاڻي ترقي يافته غير منافع بخش تنظيم Rust Foundation جي سرپرستي ھيٺ، شايع ڪيو ويو آھي. ٻولي ميموري جي حفاظت تي ڌيان ڏئي ٿي ۽ گاربيج ڪليڪٽر ۽ رن ٽائم جي استعمال کان پاسو ڪندي اعليٰ نوڪري جي برابري حاصل ڪرڻ جا وسيلا مهيا ڪري ٿي (رن ٽائم کي معياري لائبريري جي بنيادي شروعات ۽ سار سنڀال لاءِ گھٽ ڪيو ويو آهي).
رسٽ جي ميموري هينڊلنگ جا طريقا ڊولپر کي غلطين کان بچائيندا آهن جڏهن پوائنٽرز کي هٿي وٺرائيندا آهن ۽ انهن مسئلن کان بچائيندا آهن جيڪي گهٽ-سطح جي ميموري هينڊلنگ جي ڪري پيدا ٿيندا آهن، جهڙوڪ ميموري ايريا کي آزاد ٿيڻ کان پوءِ رسائي حاصل ڪرڻ، نول پوائنٽرز کي رد ڪرڻ، بفر اووررن وغيره وغيره. لائبريرين کي ورهائڻ، تعميرات مهيا ڪرڻ ۽ انحصار کي منظم ڪرڻ، پروجيڪٽ ڪارگو پيڪيج مينيجر کي ترقي ڪري ٿو. crates.io مخزن لائبريرين جي ميزباني لاءِ سپورٽ ڪئي وئي آهي.
ميموري حفاظت فراهم ڪئي وئي آهي زنگ واري وقت تي ريفرنس چيڪنگ ذريعي، اعتراض جي ملڪيت جي ٽريڪ رکڻ، اعتراض جي زندگين جي ٽريڪ رکڻ (اسڪوپس)، ۽ ڪوڊ جي عمل جي دوران ميموري رسائي جي صحيحيت جو جائزو وٺڻ. زنگ انٽيجر اوور فلوز جي خلاف پڻ تحفظ فراهم ڪري ٿو، استعمال ڪرڻ کان اڳ متغير قدرن جي لازمي شروعات جي ضرورت آهي، معياري لائبريري ۾ غلطين کي بهتر نموني سان سنڀاليندو آهي، ڊفالٽ طور ناقابل قابل حوالن ۽ متغيرن جي تصور کي لاڳو ڪري ٿو، منطقي غلطين کي گھٽائڻ لاءِ مضبوط جامد ٽائپنگ پيش ڪري ٿو.
مکيه جدت:
- "معلومات" حڪم ڪارگو پيڪيج مينيجر ۾ شامل ڪيو ويو آهي مخزن ۾ هڪ پيڪيج بابت معلومات ڊسپلي ڪرڻ لاء.
- "استعمال<..>" نحو لاءِ شامل ڪيل سپورٽ "impl Trait" ۾، جيڪا لڪايل قسمن بابت ڄاڻ بيان ڪري ٿي. مثال طور، "impl Trait + use<'x, T>" بيان ڪري ٿو ته صرف پيرا ميٽرز "x" ۽ "T" کي لڪايل قسم ۾ استعمال ڪرڻ جي اجازت آهي.
- خام پوائنٽر ٺاهڻ لاءِ هڪ الڳ نحو تجويز ڪيو ويو آهي، اڳ ۾ استعمال ٿيل ميڪرو کي تبديل ڪندي: "addr_of!(expr)" ميڪرو کي "&raw const expr" آپريٽر سان تبديل ڪيو ويو آهي، ۽ "addr_of_mut!(expr)" ميڪرو کي تبديل ڪيو ويو آهي. "&raw mut" آپريٽر expr" طرفان. struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82} ; // هڪ خام پوائنٽر ٺاهڻ جو پراڻو طريقو ڏيو ptr = std::ptr::addr_of!(p.not_aligned_field); // خام پوائنٽر ٺاهڻ جو نئون طريقو let ptr = &raw const p.not_aligned_field; let val = غير محفوظ { ptr.read_unaligned() } ؛ }
- اهو هاڻي ممڪن آهي ته محفوظ افعال ۽ مستقلن جي وضاحت ڪرڻ لاءِ هڪ ’مستحڪم‘ لائف ٽائم سان خارجي بلاڪن اندر ”غير محفوظ“ وصف سان (اڳي، سڀني عنصرن کي ”غير محفوظ خارجي“ ۾ صرف ”غير محفوظ“ وصف هجي ها: غير محفوظ خارجي { pub محفوظ جامد TAU: f64؛ پب محفوظ fn sqrt(x: f64) -> f64؛ pub unsafe fn strlen (p: *const u8) -> استعمال ڪريو؛ }
- no_mangle، link_section ۽ export_name خاصيتون، جيڪي اڻڄاڻايل رويي جي ڪري سگھن ٿيون، ھاڻي غير محفوظ سمجھي وينديون آھن ۽ ھڪڙي واضح "غير محفوظ" جھنڊو جي ضرورت آھي، مثال طور: #[unsafe(no_mangle)] pub fn my_global_function() { }
- پيٽرن جي ميلاپ کي اجازت ڏئي ٿو خالي قسمن کي ڇڏي ڏنو وڃي، جهڙوڪ "enum Void {}" يا بناوتن کي نظر ايندڙ خالي ميدان سان. استعمال ڪريو std::convert::Infallible؛ pub fn unwrap_without_panic (x: نتيجو ) -> T { Ok(x) = x؛ // "غلطي" کي ڇڏي سگھجي ٿو x }
- فلوٽنگ پوائنٽ نمبرن جا قسم (f32 ۽ f64) غير عددي NaN قدرن (0.0/0.0) کي پروسيس ڪرڻ دوران معياري طريقي سان عمل ڪن ٿا، ۽ پڻ اجازت ڏين ٿا فلوٽنگ پوائنٽ جي عملن جي استعمال جي const fn ۾.
- اسيمبلي داخل ڪرڻ جي صلاحيت مهيا ڪري ٿي operands استعمال ڪرڻ جي "const" وصف سان سڌو سنئون عددي قدرن کي استعمال ڪرڻ لاءِ انهن کي پهرين رجسٽر ۾ محفوظ ڪرڻ کان سواءِ. const MSG: &str = "هيلو، دنيا!\n"; غير محفوظ { core ::arch ::asm! }
- "مستحڪم" وصف سان اظهار کي خطاب ڪرڻ جي اجازت آهي محفوظ تناظر ۾ بغير ڪنهن غير محفوظ بلاڪ جي وضاحت ڪرڻ (“&raw mut” ۽ “&raw const” آپريٽر اوپيرينڊ جي قدر کي متاثر نه ڪندا آهن ۽ صرف ان ڏانهن هڪ اشارو ٺاهيندا آهن): جامد ميٽ STATIC_MUT: قسم = قسم::نئون( ); خارجي "سي" { جامد EXTERN_STATIC: قسم؛ } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; ڏيو extern_static_ptr = &raw const EXTERN_STATIC؛ }
- API جو هڪ نئون حصو مستحڪم جي درجي ۾ منتقل ڪيو ويو آهي، بشمول طريقن ۽ عملن جي خاصيتن کي مستحڪم ڪيو ويو آهي:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndices::offset
- std::option::option::is_none_or
- [T]::is_sorted
- [T]::is_sorted_by
- [T]::is_sorted_by_key
- ٻيهر ڪندڙ::is_sorted
- ٻيهر ڪندڙ::is_sorted_by
- ٻيهر ڪندڙ::is_sorted_by_key
- std::future::Ready::into_inner
- std::iter::repeat_n
- impl DoubleEndedIterator for take
جو ذريعو: opennet.ru
