د پروګرامینګ ژبې خپرول Rust 1.75 او unikernel Hermit 0.6.7

د Rust 1.75 عمومي هدف پروګرام کولو ژبې خپرول، چې د موزیلا پروژې لخوا تاسیس شوی، مګر اوس د خپلواک غیر انتفاعي موسسې Rust Foundation تر څارنې لاندې رامینځته شوی، خپور شوی. ژبه د حافظې خوندیتوب باندې تمرکز کوي او د لوړې دندې موازي کولو لپاره وسیلې چمتو کوي پداسې حال کې چې د کثافاتو راټولونکي او رن ټایم کارولو څخه مخنیوی کوي (د چلولو وخت د معیاري کتابتون لومړني پیل او ساتنې ته کم شوی).

د زنګ د حافظې اداره کولو میتودونه پرمخ وړونکي د خطا څخه ژغوري کله چې د پوائنټرونو مینځل کیږي او د هغو ستونزو په وړاندې ساتنه کوي چې د ټیټې کچې حافظې اداره کولو له امله رامینځته کیږي ، لکه د حافظې ساحې ته لاسرسی وروسته له دې چې خلاص شو ، د نول پوائنټرونو ته اشاره کول ، د بفر اوورونونه او نور. د کتابتونونو توزیع کولو، جوړونه چمتو کول او د انحصارونو اداره کول، پروژه د کارګو پیکج مدیر ته وده ورکوي. د crates.io ذخیره د کتابتونونو کوربه کولو لپاره ملاتړ کیږي.

د حافظې خوندیتوب د تالیف په وخت کې په زنګ کې د حوالې چیک کولو له لارې چمتو کیږي ، د شیانو ملکیت تعقیب ساتل ، د څیز ژوند وخت (سکوپس) ساتل ، او د کوډ اجرا کولو پرمهال د حافظې لاسرسي سموالي ارزول. زنګ د انټیجر د زیاتیدو پروړاندې محافظت هم چمتو کوي ، د کارونې دمخه د متغیر ارزښتونو لازمي ابتکار ته اړتیا لري ، په معیاري کتابتون کې خطاګانې په ښه توګه اداره کوي ، د ډیفالټ لخوا د بدلیدونکي حوالې او متغیر مفهوم پلي کوي ، د منطقي غلطیو کمولو لپاره قوي جامد ټایپ وړاندیز کوي.

اصلي نوښتونه:

  • په خصوصي ځانګړتیاو کې د "async fn" او "-> impl Trait" نوټیشن کارولو وړتیا اضافه کړه. د مثال په توګه، د "-> impl ټریټ" په کارولو سره تاسو کولی شئ د ځانګړتیا میتود ولیکئ چې تکرارونکی بیرته راګرځوي: trait کانټینر { fn توکي(&self) -> impl Iterator; } د 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 راتلونکی؛ }

  • د پوائنټرونو په پرتله د بایټ آفسیټونو محاسبه کولو لپاره API اضافه شوی. کله چې د خلاص پوائنټرونو سره کار کوئ ("*const T" او "* mut T")، ممکن عملیات ته اړتیا وي ترڅو پوائنټر ته آفسیټ اضافه کړي. پخوا، د دې لپاره دا ممکنه وه چې د "::add(1)" په څیر ساختمان وکاروئ، د "size_of::()" د اندازې سره سم د بایټونو شمیر اضافه کړئ. نوی API دا عملیات ساده کوي او دا ممکنه کوي چې د بایټ آفسیټونو اداره کولو پرته لومړی ډولونه "*const u8" یا "*mut u8" ته واړوي.
    • پوائنټر::بایټ_اضافه
    • پوائنټر::بایټ_افسیټ
    • پوائنټر::byte_offset_from
    • اشاره کوونکی::byte_sub
    • پوائنټر:: wrapping_byte_add
    • پوائنټر:: wrapping_byte_offset
    • پوائنټر:: wrapping_byte_sub
  • د rustc کمپیلر فعالیت زیاتولو لپاره دوامدار کار. د BOLT اصلاح کوونکی اضافه شوی، کوم چې د لینک وروسته مرحله کې پرمخ ځي او د مخکې چمتو شوي اجرا کولو پروفایل څخه معلومات کاروي. د BOLT کارول تاسو ته اجازه درکوي چې د پروسیسر کیچ د لا اغیزمنې کارونې لپاره د librustc_driver.so د کتابتون کوډ ترتیب بدلولو سره شاوخوا 2٪ د کمپیلر اجرا کول ګړندي کړئ.

    په 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_offset_from
    • اشاره کوونکی::byte_sub
    • پوائنټر:: wrapping_byte_add
    • پوائنټر:: wrapping_byte_offset
    • پوائنټر:: wrapping_byte_sub
  • د "const" خاصیت، کوم چې د ثابتو پر ځای په هر شرایطو کې د کارولو امکان ټاکي، په دندو کې کارول کیږي:
    • Ipv6Addr::to_ipv4_mapped
    • شایدUninit::assume_init_read
    • شاید یونیټ:: صفر شوی
    • mem:: تبعیض کوونکی
    • mem::صفر
  • د ملاتړ دریمه کچه د csky-unknown-linux-gnuabiv2hf، i586-unknown-netbsd او mipsel-unknown-netbsd پلیټ فارمونو لپاره پلي شوې. په دریمه کچه کې بنسټیز ملاتړ شامل دی، مګر د اتوماتیک ازموینې پرته، د رسمي ودانیو خپرول، یا دا ګوري چې آیا کوډ جوړیدلی شي.

برسیره پردې، موږ کولی شو د هرمیټ پروژې نوې نسخه یادونه وکړو، کوم چې یو ځانګړی کرنل (یونیکرنل) رامینځته کوي، چې د زنګ په ژبه لیکل شوي، د خپل ځان لرونکي غوښتنلیکونو جوړولو لپاره وسایل چمتو کوي چې د اضافي پرتونو پرته د هایپروایزر یا بېر هارډویر په سر کې پرمخ ځي. او د عملیاتي سیسټم پرته. کله چې جوړ شي، غوښتنلیک په ثابت ډول د کتابتون سره تړلی دی، کوم چې په خپلواکه توګه ټول اړین فعالیتونه پلي کوي، پرته له دې چې د OS کرنل او سیسټم کتابتونونو پورې تړلی وي. د پروژې کوډ د اپاچي 2.0 او MIT جوازونو لاندې ویشل شوی. اسمبلۍ په Rust، Go، Fortran، C او C++ کې لیکل شوي غوښتنلیکونو یوازینۍ اجرا کولو لپاره ملاتړ کیږي. پروژه خپل بوټلوډر هم رامینځته کوي چې تاسو ته اجازه درکوي د QEMU او KVM په کارولو سره هرمیټ لانچ کړئ.

سرچینه: opennet.ru

Add a comment