پروگرامنگ ٻولي جو رليز ٿيو Rust 1.75 ۽ unikernel Hermit 0.6.7

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

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

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

مکيه جدت:

  • شامل ڪيو ويو استعمال ڪرڻ جي صلاحيت “async fn” ۽ “-> impl Trait” نوٽيشن پرائيويٽ خاصيتن ۾. مثال طور، "-> impl Trait" استعمال ڪندي توهان هڪ خاص طريقو لکي سگهو ٿا جيڪو هڪ آئٽرٽر کي واپس ڪري ٿو: trait Container { fn items(&self) -> impl Iterator; } Impl ڪنٽينر لاءِ MyContainer { fn شيون(&self) -> impl Iterator {self.items.iter().cloned() } }

    توھان پڻ "async fn" استعمال ڪندي خاصيتون ٺاھي سگھو ٿا: خاص HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // کي وڌايو ويندو: // fn fetch(&self, url: Url) -> impl Future; }

  • شامل ڪيو ويو API بائيٽ آف سيٽ جي حساب ڪرڻ لاءِ پوائنٽرز جي نسبت. جڏهن بيئر پوائنٽرز سان ڪم ڪري رهيا آهن ("*const T" ۽ "* mut T")، آپريشن کي پوائنٽر ۾ آفسيٽ شامل ڪرڻ جي ضرورت پوندي. اڳي، ان لاءِ ”::add(1)“ وانگر اڏاوت استعمال ڪرڻ ممڪن هو، ”سائز_of::()“ جي سائيز سان ملندڙ بائيٽن جو تعداد شامل ڪندي. نئون API هن آپريشن کي آسان بڻائي ٿو ۽ ان کي ممڪن بڻائي ٿو بائيٽ آف سيٽس کي ترتيب ڏيڻ کان سواءِ پهرين قسم کي "*const u8" يا "*mut u8" ڏانهن ڪاسٽ ڪرڻ جي.
    • پوائنٽر::byte_add
    • پوائنٽر::byte_offset
    • پوائنٽر::byte_offset_from
    • پوائنٽر::byte_sub
    • پوائنٽر::wrapping_byte_add
    • پوائنٽر:: wrapping_byte_offset
    • پوائنٽر::wrapping_byte_sub
  • rustc compiler جي ڪارڪردگي کي وڌائڻ لاء جاري ڪم. شامل ڪيو ويو BOLT اصلاح ڪندڙ، جيڪو پوسٽ لنڪ اسٽيج ۾ هلندو آهي ۽ اڳ ۾ تيار ڪيل عملدرآمد پروفائل مان معلومات استعمال ڪري ٿو. BOLT استعمال ڪرڻ توهان کي اجازت ڏئي ٿو ڪمپلر جي عمل کي 2٪ تيز ڪرڻ سان librustc_driver.so لائبريري ڪوڊ جي ترتيب کي تبديل ڪندي پروسيسر ڪيش جي وڌيڪ موثر استعمال لاءِ.

    LLVM ۾ اصلاح جي معيار کي بهتر ڪرڻ لاءِ "-Ccodegen-units=1" آپشن سان rustc ڪمپلر جي تعمير شامل آهي. تجربا ڪيا ويا "-Ccodegen-units = 1" جي صورت ۾ ڪارڪردگي ۾ اضافو ڏيکاري ٿو تقريبن 1.5٪ طرفان. شامل ڪيل اصلاحون ڊفالٽ طور فعال ڪيون ويون آھن صرف x86_64-unknown-linux-gnu پليٽ فارم لاءِ.

    اڳ ذڪر ڪيل اصلاحن کي گوگل پاران آزمايو ويو ته جيئن زنگ ۾ لکيل Android پليٽ فارم جي اجزاء جي تعمير جو وقت گھٽجي. "-C codegen-units=1" استعمال ڪندي جڏهن Android تعمير ڪيو ته اسان کي ٽول ڪٽ جي سائيز کي 5.5٪ گھٽائڻ ۽ ان جي ڪارڪردگي کي 1.8٪ وڌائڻ جي اجازت ڏني، جڏهن ته ٽول ڪٽ جي تعمير جو وقت لڳ ڀڳ ٻيڻو ٿي ويو.

    لنڪ ٽائم گاربيج ڪليڪشن کي فعال ڪرڻ ("--gc-sections") ڪارڪردگي جو فائدو 1.9٪ تائين پهچايو، لنڪ-ٽائم آپٽمائزيشن (LTO) کي 7.7٪ تائين، ۽ پروفائل تي ٻڌل اصلاح (PGO) کي 19.8٪ تائين وڌايو. فائنل ۾، BOLT يوٽيلٽي کي استعمال ڪندي اصلاحون لاڳو ڪيون ويون، جن ان کي ممڪن بڻايو ته تعمير جي رفتار کي 24.7٪ تائين وڌايو، پر ٽول ڪٽ جي سائيز 10.9٪ تائين وڌي وئي.

    پروگرامنگ ٻولي جو رليز ٿيو Rust 1.75 ۽ unikernel Hermit 0.6.7

  • API جو هڪ نئون حصو مستحڪم جي درجي ۾ منتقل ڪيو ويو آهي، بشمول طريقن ۽ عملن جي خاصيتن کي مستحڪم ڪيو ويو آهي:
    • ايٽمي*::from_ptr
    • فائل ٽائمز
    • FileTimesExt
    • فائل::set_modified
    • فائل::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • اختيار:: as_slice
    • اختيار::as_mut_slice
    • پوائنٽر::byte_add
    • پوائنٽر::byte_offset
    • پوائنٽر::byte_offset_from
    • پوائنٽر::byte_sub
    • پوائنٽر::wrapping_byte_add
    • پوائنٽر:: wrapping_byte_offset
    • پوائنٽر::wrapping_byte_sub
  • "const" وصف، جيڪو مستقل جي بدران ڪنهن به حوالي سان استعمال ڪرڻ جي امڪان کي طئي ڪري ٿو، افعال ۾ استعمال ٿيندو آهي:
    • Ipv6Addr::to_ipv4_mapped
    • ٿي سگهي ٿوUninit::assume_init_read
    • ٿي سگهي ٿو Uninit::zeroed
    • mem :: تعصب ڪندڙ
    • mem::zeroed
  • سپورٽ جو ٽيون سطح csky-unknown-linux-gnuabiv2hf، i586-unknown-netbsd ۽ mipsel-unknown-netbsd پليٽ فارمن لاءِ لاڳو ڪيو ويو آهي. ٽئين سطح ۾ بنيادي مدد شامل آهي، پر خودڪار ٽيسٽنگ کان سواءِ، سرڪاري تعميرات کي شايع ڪرڻ، يا چيڪ ڪرڻ ته ڇا ڪوڊ ٺاهي سگهجي ٿو.

اضافي طور تي، اسان هرمٽ پروجيڪٽ جو هڪ نئون نسخو نوٽ ڪري سگهون ٿا، جيڪو هڪ خاص ڪرنل (يونيڪرنل) ٺاهي ٿو، جيڪو زنگ جي ٻولي ۾ لکيو ويو آهي، خودڪار ايپليڪيشنن جي تعمير لاء اوزار مهيا ڪري ٿو جيڪو اضافي پرت کان سواء هائپر وائزر يا بيئر هارڊويئر جي چوٽي تي هلائي سگهي ٿو. ۽ بغير آپريٽنگ سسٽم. جڏهن ٺهيل آهي، ايپليڪيشن کي مستحڪم طور تي لائبريري سان ڳنڍيل آهي، جيڪا آزاد طور تي سڀني ضروري ڪارڪردگي کي لاڳو ڪري ٿي، بغير OS ڪنييل ۽ سسٽم لائبريرين سان ڳنڍيل آهي. پروجيڪٽ ڪوڊ Apache 2.0 ۽ MIT لائسنس تحت ورهايو ويو آهي. راسٽ، گو، فورٽران، سي ۽ سي ++ ۾ لکيل ايپليڪيشنن جي اسٽينڊ اڪيلو عملدرآمد لاءِ اسيمبلي سپورٽ ڪئي وئي آهي. پروجيڪٽ پڻ پنهنجو بوٽ لوڊر ٺاهي رهيو آهي جيڪو توهان کي QEMU ۽ KVM استعمال ڪندي Hermit لانچ ڪرڻ جي اجازت ڏئي ٿو.

جو ذريعو: opennet.ru

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