رسٽ 1.53 جاري ڪيو ويو. گوگل لينڪس ڪرنل ۾ زنگ جي مدد شامل ڪرڻ لاءِ فنڊ ڏيندو

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

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

مکيه جدت:

  • arrays لاءِ، IntoIterator ٽريٽ لاڳو ڪيو ويو آھي، جيڪو توھان کي اجازت ڏئي ٿو صفن جي عنصرن جي ورھاستيءَ کي قدرن سان ترتيب ڏئي: for i ۾ [1, 2, 3] {.. }

    اهو پڻ ممڪن آهي ته آري کي انهن طريقن ڏانهن منتقل ڪيو وڃي جيڪي آئٽرٽر کي قبول ڪن ٿا، مثال طور: let set = BTreeSet::from_iter([1, 2, 3]); لاء (a، b) some_iterator.chain([1]).zip([1, 2, 3]) ۾ {.. }

    اڳي، IntoIterator صرف صفن جي حوالي سان لاڳو ڪيو ويو، يعني. قدرن کي ٻيهر ڏيڻ لاءِ حوالن جي استعمال جي ضرورت آهي (“&[1, 2, 3]”) يا “[1, 2, 3].iter()”. Arrays لاءِ IntoIterator جو نفاذ مطابقت جي مسئلن جي ڪري روڪيو ويو جيڪو اڳئين مرتب ڪندڙ array.into_iter() کان (&array).into_iter(). اهي مسئلا هڪ حل سان حل ڪيا ويا - مرتب ڪندڙ array.into_iter() کي (&array).into_iter() ۾ تبديل ڪرڻ جاري رکندو ڄڻ ته IntoIterator خاصيت جو ڪو به عمل نه هو، پر صرف ان صورت ۾ جڏهن طريقي کي ڪال ڪندي ".into_iter( استعمال ڪندي. )" نحو ۽ بغير ڪالن کي ڇڪڻ جي شڪل ۾ "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3]) )"

  • اهو ممڪن آهي بيان ڪرڻ جو اظهار "|" (منطقي يا آپريشن) ٽيمپليٽ جي ڪنهن به حصي ۾، مثال طور، بدران “Some(1) | ڪجھ (2)" توھان ھاڻي لکي سگھو ٿا "ڪجھ(1 | 2)": ميچ جو نتيجو { Ok(Some(1 | 2)) => { .. } Err(MyError { قسم: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • سڃاڻپ ڪندڙ ۾ غير ASCII اکرن جي استعمال جي اجازت آهي، بشمول يونيڪوڊ UAX 31 وضاحتن ۾ بيان ڪيل ڪي به قومي ڪردار، پر ايموجي ڪردارن کي ڇڏي. جيڪڏهن توهان مختلف پر ساڳيا اکر استعمال ڪندا آهيو، مرتب ڪندڙ هڪ ڊيڄاريندڙ جاري ڪندو. const BLÅHAJ: &str = "🦈"؛ ساخت 人 { 名字: String, } let α = 1؛ lets = 2؛ ڊيڄاريندڙ: سڃاڻپ ڪندڙ جوڙو 's' ۽ 's' جي وچ ۾ مونجهارو سمجهي ٿو
  • APIs جو ھڪڙو نئون حصو مستحڪم درجي ڏانھن منتقل ڪيو ويو آھي، ھيٺ ڏنل مستحڪم شامل آھن:
    • array ::from_ref
    • array ::from_mut
    • AtomicBool ::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BfReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • مدت::ZERO
    • مدت::MAX
    • مدت:: is_zero
    • مدت:: saturating_add
    • مدت:: saturating_sub
    • مدت:: saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • صفن لاءِ IntoIterator
    • {integer}::BITS
    • io::Error::Unsupported
    • غير زيرو*::leading_zeros
    • غير زيرو*::trailing_zeros
    • اختيار:: داخل ڪريو
    • ترتيب ڏيڻ::is_eq
    • ترتيب ڏيڻ::is_ne
    • ترتيب ڏيڻ::is_lt
    • ترتيب ڏيڻ::is_gt
    • ترتيب ڏيڻ::is_le
    • ترتيب ڏيڻ::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • ڏسڻ لائق ::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • سلائس::IterMut::as_slice
    • AsRef<[T]> سلائس لاءِ::IterMut
    • impl SliceIndex for (Bound ، پابند )
    • Vec::extend_from_within
  • wasm64-اڻڄاتل-اڻڄاتل پليٽ فارم جي حمايت جي ٽئين سطح تي عمل ڪيو ويو آهي. ٽئين سطح ۾ بنيادي مدد شامل آهي، پر خودڪار ٽيسٽنگ کان سواءِ، سرڪاري تعميرات کي شايع ڪرڻ، يا چيڪ ڪرڻ ته ڇا ڪوڊ ٺاهي سگهجي ٿو.
  • ڪارگو پئڪيج مئنيجر کي منتقل ڪيو ويو آھي نالو استعمال ڪرڻ لاءِ ”مين“ Git مخزن جي مکيه شاخ لاءِ (HEAD) ڊفالٽ طور. مخزنن ۾ ميزباني ڪيل انحصار جيڪي ماسٽر جي بدران مين جو نالو استعمال ڪن ٿا هاڻي برانچ = "main" کي ترتيب ڏيڻ جي ضرورت ناهي.
  • ڪمپيلر ۾، LLVM جي گھٽ ۾ گھٽ ورزن لاءِ گھربل LLVM 10 تائين وڌايو ويو آھي.

اضافي طور تي، اسان Rust ٻولي ۾ اجزاء کي ترقي ڪرڻ لاء اوزار جي لينڪس ڪرنل ۾ انضمام جي ترقي لاء فنڊ جي فراهمي کي نوٽ ڪري سگھون ٿا. اهو ڪم ISRG آرگنائيزيشن (انٽرنيٽ سيڪيورٽي ريسرچ گروپ) جي سرپرستي هيٺ پروسيمو پروجيڪٽ جي فريم ورڪ اندر ڪيو ويندو، جيڪو Let's Encrypt پروجيڪٽ جو باني آهي ۽ HTTPS کي فروغ ڏئي ٿو ۽ ٽيڪنالاجي جي ترقي کي فروغ ڏئي ٿو. انٽرنيٽ. فنڊ گوگل طرفان فراهم ڪيا ويندا، جيڪي ميگيل اوجيدا جي ڪم لاءِ ادا ڪندا، جو ليکڪ Rust-for-Linux پروجيڪٽ. اڳي، ISRG ۽ گوگل اڳ ۾ ئي فنڊ فراهم ڪري چڪا آهن متبادل HTTP پس منظر ٺاهڻ لاءِ curl افاديت ۽ نئين TLS ماڊل جي ترقي لاءِ Apache http سرور.

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

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

جو ذريعو: opennet.ru

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