رسٽ 1.59 پروگرامنگ ٻولي جو رليز ڪيو اسيمبلي داخل ڪرڻ لاءِ سپورٽ سان

رسٽ 1.59 عام مقصدي پروگرامنگ ٻولي جو رليز، جيڪو Mozilla پروجيڪٽ پاران قائم ڪيو ويو، پر ھاڻي ترقي يافته غير منافع بخش تنظيم Rust Foundation جي سرپرستي ھيٺ، شايع ڪيو ويو آھي. ٻولي ميموري جي حفاظت تي ڌيان ڏئي ٿي ۽ گاربيج ڪليڪٽر ۽ رن ٽائم جي استعمال کان پاسو ڪندي اعليٰ نوڪري جي برابري حاصل ڪرڻ جا وسيلا مهيا ڪري ٿي (رن ٽائم کي معياري لائبريري جي بنيادي شروعات ۽ سار سنڀال لاءِ گھٽ ڪيو ويو آهي).

رسٽ جي ميموري هينڊلنگ جا طريقا ڊولپر کي غلطين کان بچائيندا آهن جڏهن پوائنٽرز کي هٿي وٺرائيندا آهن ۽ انهن مسئلن کان بچائيندا آهن جيڪي گهٽ-سطح جي ميموري هينڊلنگ جي ڪري پيدا ٿيندا آهن، جهڙوڪ ميموري ايريا کي آزاد ٿيڻ کان پوءِ رسائي حاصل ڪرڻ، نول پوائنٽرز کي رد ڪرڻ، بفر اووررن وغيره وغيره. لائبريرين کي ورهائڻ، تعميرات مهيا ڪرڻ ۽ انحصار کي منظم ڪرڻ، پروجيڪٽ ڪارگو پيڪيج مينيجر کي ترقي ڪري ٿو. crates.io مخزن لائبريرين جي ميزباني لاءِ سپورٽ ڪئي وئي آهي.

ميموري حفاظت فراهم ڪئي وئي آهي زنگ واري وقت تي ريفرنس چيڪنگ ذريعي، اعتراض جي ملڪيت جي ٽريڪ رکڻ، اعتراض جي زندگين جي ٽريڪ رکڻ (اسڪوپس)، ۽ ڪوڊ جي عمل جي دوران ميموري رسائي جي صحيحيت جو جائزو وٺڻ. زنگ انٽيجر اوور فلوز جي خلاف پڻ تحفظ فراهم ڪري ٿو، استعمال ڪرڻ کان اڳ متغير قدرن جي لازمي شروعات جي ضرورت آهي، معياري لائبريري ۾ غلطين کي بهتر نموني سان سنڀاليندو آهي، ڊفالٽ طور ناقابل قابل حوالن ۽ متغيرن جي تصور کي لاڳو ڪري ٿو، منطقي غلطين کي گھٽائڻ لاءِ مضبوط جامد ٽائپنگ پيش ڪري ٿو.

مکيه جدت:

  • اهو ممڪن آهي ته اسيمبليء جي ٻولي داخل ڪرڻ جو استعمال، جيڪي ايپليڪيشنن ۾ گهربل آهن جيڪي گهٽ سطح تي عملدرآمد کي ڪنٽرول ڪرڻ جي ضرورت هونديون آهن يا خاص مشين جي هدايتن کي استعمال ڪرڻ جي قابل هوندا. اسيمبليءَ داخل ڪرڻ وارا ميڪروس استعمال ڪندي شامل ڪيا ويا آهن "asm!" ۽ "global_asm!" اسٽرنگ فارميٽنگ نحو استعمال ڪندي نالو ڏيڻ واري رجسٽر لاءِ ساڳي طرح استعمال ڪيو ويو آهي جيئن رسٽ ۾ اسٽرنگ متبادل لاءِ استعمال ڪيو ويندو آهي. ڪمپلر x86، x86-64، ARM، AArch64 ۽ RISC-V آرڪيٽيڪچرز لاءِ اسيمبليءَ جي هدايتن کي سپورٽ ڪري ٿو. داخل ڪرڻ جو مثال: استعمال ڪريو std::arch::asm؛ // شفٽ استعمال ڪندي x کي 6 سان ضرب ڪريو ۽ شامل ڪريو let mut x: u64 = 4؛ غير محفوظ { asm!( "mov {tmp}، {x}"، "shl {tmp}، 1"، "shl {x}، 2"، "شامل ڪريو {x}، {tmp}"، x = ان آئوٽ (reg) ) x، tmp = ٻاهر (reg) _، )؛ } assert_eq!(x, 4*6);
  • شامل ڪيل سپورٽ تباهي (متوازي) اسائنمنٽس لاءِ، جنهن ۾ اظهار جي کاٻي پاسي ڪيترائي خاصيتون، سلائسون يا ڍانچي بيان ڪيا ويا آهن. مثال طور: let (a, b, c, d, e); (a، b) = (1، 2)؛ [سي، ..، ڊي، _] = [1، 2، 3، 4، 5]؛ ساخت { e, .. } = ساخت { e: 5, f: 3}؛ assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Const generics لاءِ ڊفالٽ ويلز بيان ڪرڻ جي صلاحيت ڏني وئي آهي: struct ArrayStorage {arr: [T; ن]، } impl ArrayStorage { fn نئون (a: T، b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } }
  • ڪارگو پيڪيج مئنيجر انحصار ۾ غلط ڍانچي جي استعمال بابت ڊيڄاريندڙ مهيا ڪري ٿو جيڪي پروسيسر ۾ غلطين جي ڪري عمل ڪيا ويا آهن (مثال طور، هڪ غلطي جي ڪري، ڀريل ڍانچي جي شعبن کي محفوظ بلاڪ ۾ قرض وٺڻ جي اجازت ڏني وئي هئي). اهڙين اڏاوتن کي هاڻي زنگ جي مستقبل جي ورزن ۾ سهڪار نه ڪيو ويندو.
  • Cargo ۽ rustc وٽ ڊيبگنگ ڊيٽا (strip = "debuginfo") ۽ علامتن (strip = "symbols") کان ڌار ٿيل executable فائلون پيدا ڪرڻ جي هڪ بلٽ ان صلاحيت آهي، بغير ڪنهن الڳ يوٽيلٽي کي ڪال ڪرڻ جي. صفائي جي جوڙجڪ Cargo.toml ۾ "پٽي" پيٽرولر ذريعي لاڳو ڪئي وئي آهي: [profile.release] strip = "debuginfo"، "symbols"
  • واڌو تاليف ڊفالٽ طور بند ٿيل آهي. ان جو سبب چيو ويندو آهي هڪ عارضي ڪم ڪار جي لاءِ ڪمپلر ۾ هڪ بگ لاءِ جيڪو حادثن ۽ ڊيسيريلائيزيشن جي غلطين جي ڪري ٿي. هڪ بگ فڪس اڳ ۾ ئي تيار ڪيو ويو آهي ۽ ايندڙ رليز ۾ شامل ڪيو ويندو. واڌاري واري تاليف کي واپس ڪرڻ لاء، توھان استعمال ڪري سگھو ٿا ماحوليات متغير RUSTC_FORCE_INCREMENTAL=1.
  • API جو هڪ نئون حصو مستحڪم جي درجي ۾ منتقل ڪيو ويو آهي، بشمول طريقن ۽ عملن جي خاصيتن کي مستحڪم ڪيو ويو آهي:
    • std::thread::available_parallelism
    • نتيجو:: نقل
    • نتيجو:: ڪلون ٿيل
    • آرڪ::اسم!
    • آرڪ::گلوبل_اسم!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • U8 لاءِ ڪوشش ڪريو
    • char::TryFromCharError (ڪلون، ڊيبگ، ڊسپلي، جزوي ايق، ڪاپي، ايڪ، غلطي)
    • iter ::zip
    • NonZeroU8 ::is_power_of_two
    • NonZeroU16 ::is_power_of_two
    • NonZeroU32 ::is_power_of_two
    • NonZeroU64 ::is_power_of_two
    • NonZeroU128 ::is_power_of_two
    • ToLowercase ساخت لاء DoubleEndedIterator
    • ToUppercase ساخت لاء DoubleEndedIterator
    • TryFrom<&mut [T]> لاءِ [T; ن]
    • UnwindSafe هڪ ڀيرو جي جوڙجڪ لاءِ
    • RefUnwindSafe هڪ ڀيرو لاءِ
    • armv8 neon سپورٽ افعال aarch64 لاءِ ڪمپلر ۾ ٺهيل
  • "const" وصف، جيڪو مستقل جي بدران ڪنهن به حوالي سان استعمال ڪرڻ جي امڪان کي طئي ڪري ٿو، افعال ۾ استعمال ٿيندو آهي:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

جو ذريعو: opennet.ru

تبصرو شامل ڪريو