د 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٪ زیاته شوې.
- د 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