د زنګ د اتوماتیک حافظې مدیریت د پوائنټرونو مینځلو په وخت کې غلطۍ له مینځه وړي او د ټیټې کچې حافظې له مینځه وړلو څخه رامینځته شوي ستونزو څخه ساتي ، لکه د حافظې ساحې ته لاسرسی وروسته له دې چې خلاص شو ، د نول پوینټر ډیریفرنسونه ، بفر اوورونونه او داسې نور. د بسته بندۍ مدیر د کتابتونونو توزیع کولو لپاره رامینځته کیږي ، د غونډې ډاډ ترلاسه کوي او د پروژې لخوا انحصار اداره کوي.
اصلي
- د اوږدې مودې له منځه وړل
نیمګړتیا کله چې د انټیجرونو او فلوټینګ پوائنټ شمیرو ترمینځ تبادلې ترسره کوئ. څرنګه چې د زنګ کمپیلر LLVM د بیک انډ په توګه کاروي، د ډول تبادلې عملیات د LLVM منځګړی کوډ لارښوونو له لارې ترسره شوي لکهfptoui ، کوم چې یو د پام وړ ځانګړتیا لري - نا تعریف شوی چلند که چیرې پایله شوې ارزښت د هدف ډول سره مناسب نه وي. د مثال په توګه، کله چې د فلوټ ارزښت 300 د f32 ډول سره د انټیجر ډول u8 ته بدل کړئ، پایله غیر متوقعه ده او ممکن په مختلفو سیسټمونو کې توپیر ولري. ستونزه دا ده چې دا فیچر په کوډ کې ښکاري چې د "ناامنه" په توګه نه نښه کیږي.د Rust 1.45 پورې، د اندازې د اندازې د اندازې چلند په کلکه تنظیم شوی، او د "لکه" د تبادلې عملیات د اوور فلو لپاره معاینه کوي او مجبوروي چې ارزښت د هدف ډول اعظمي یا لږ تر لږه ارزښت ته بدل کړي (د مثال په توګه، د پورتنۍ بیلګې په توګه، ارزښت 300 به په 255 بدل شي). د دې ډول چکونو غیر فعالولو لپاره، اضافي API کالونه "{f64, f32}::to_int_unchecked" چمتو شوي، په ناامنه حالت کې کار کوي.
fn cast(x: f32) -> u8 {
x د u8 په توګه
}fn main() {
let too_big = 300.0 ;
let too_small = -100.0 ;
اجازه راکړئ nan = f32::NAN؛اجازه راکړئ x: f32 = 1.0;
اجازه راکړئ y: u8 = ناامنه { x.to_int_unchecked() };println!("too_big_casted = {}", cast(too_big)); // محصول 255
println!("too_small_casted = {}", cast(too_small)); // محصول 0
println!("not_a_number_casted = {}", cast(nan)); // محصول 0
} - د ثبات کارول
پروسیجر میکرو د فعالیت په څیر څرګندونې، ټیمپلیټونه، او بیانونه. پخوا، دا ډول میکرو په هر ځای کې نه ویل کیدی، مګر یوازې د کوډ په ځینو برخو کې (د جلا کال په توګه، د نورو کوډونو سره نه تړل شوي). د هغه لارې پراخول چې میکرو بلل کیدی شي، د دندو په څیر، د ویب چوکاټ کار کولو لپاره یو له اړتیاو څخه و.راکټ د زنګ په مستحکم خپرونو کې. مخکې، په راکټ کې د هینډلرونو په ټاکلو کې د اضافي انعطاف ترلاسه کولو لپاره د "proc_macro_hygiene" په نوم د تجربوي ځانګړتیا فعالولو ته اړتیا وه، کوم چې د زنګ په مستحکم نسخو کې شتون نلري. دا فعالیت اوس د ژبې مستحکم ریلیزونو کې جوړ شوی. - د رینج ارزښتونو تکرارولو لپاره د "چار" ډول سره د رینج کارولو اجازه ورکړل شوې (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
د ch لپاره په 'a'..='z' {
چاپ!("{}", ch);
}
println!(); // به "abcdefghijklmnopqrstuvwxyz" چاپ کړي - د APIs نوې برخه باثباته کټګورۍ ته لیږدول شوې، په شمول ثبات
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc:: کمزوری:: as_ptr،
rc:: کمزوری::from_raw،
rc:: کمزوری:: په_را،
str::strip_prefix,
str::strip_sufix,
همغږي:: کمزوری::as_ptr,
همغږي:: کمزوری:: څخه_را،
همغږي:: کمزوری:: په_را،
چار:: UNICODE_VERSION
Span::solved_at,
سپان:: ځای پر ځای،
Span::mixed_site,
unix::process::CommandExt::arg0. - د rustc تالیف کونکي د "target-feature" بیرغ په کارولو سره د مختلف هدف پلیټ فارم ب featuresو د پورته کولو لپاره ملاتړ اضافه کړی ، د مثال په توګه ، "-C target-feature=+avx2, + fma". نوي بیرغونه هم اضافه شوي:
د حادثې د اداره کولو ستراتیژۍ ته په پام سره، د غیر آرامۍ کال میزونو رامینځته کولو لپاره "force-unwind-tables"؛ "embed-bitcode" د کنټرول لپاره چې ایا LLVM بټکوډ په تولید شوي rlibs کې شامل دی. د "embed-bitcode" بیرغ په کارګو کې د ډیفالټ لخوا فعال شوی ترڅو د جوړیدو وخت او ډیسک ځای مصرف غوره کړي. - د mipsel-sony-psp او thumbv7a-uwp-windows-msvc پلیټ فارمونو لپاره د دریمې کچې ملاتړ چمتو شوی. په دریمه کچه کې بنسټیز ملاتړ شامل دی، مګر د اتوماتیک ازموینې او د رسمي ودانیو خپرولو پرته.
سربیره پردې، دا په پام کې نیول کیدی شي
مقاله په هغه لړۍ کې لومړۍ ده چې د تخنیکونو ښودلو ته وقف شوې چې د ټیټ کچې برنامې او OS پراختیا کې غوښتنې کې دي.
سرچینه: opennet.ru