Rust ၏ အလိုအလျောက်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုသည် developer အား pointer ခြယ်လှယ်ခြင်းမှ လွတ်မြောက်စေပြီး အခမဲ့ memory access များ၊ null pointer dereferences၊ buffer overruns ကဲ့သို့သော အဆင့်နိမ့်မှတ်ဉာဏ် ခြယ်လှယ်မှုမှ ဖြစ်ပေါ်လာသည့် ပြဿနာများကို ကာကွယ်ပေးပါသည်။ စာကြည့်တိုက်များကို ဖြန့်ဝေရန်၊ စုဝေးမှုကို သေချာစေရန်နှင့် ပရောဂျက်မှ မှီခိုမှုများကို စီမံခန့်ခွဲရန် ပက်ကေ့ဂျ်မန်နေဂျာကို တီထွင်နေပါသည်။
အဓိက
- Cargo package manager သည် crates.io public registry နှင့် အတူယှဉ်တွဲနေထိုင်နိုင်သော အစားထိုးပက်ကေ့ခ်ျစာရင်းသွင်းမှုများနှင့် လုပ်ဆောင်ရန် ကိရိယာများကို ပေါင်းထည့်ထားသည်။ ဥပမာအားဖြင့်၊ မူပိုင်အက်ပလီကေးရှင်းများ၏ developer များသည် ယခုအခါ Cargo.toml တွင် မှီခိုမှုများစာရင်းသွင်းရာတွင် အသုံးပြုနိုင်ပြီး ၎င်းတို့၏ထုတ်ကုန်များအတွက် crates.io နှင့် ဆင်တူသည့်ဗားရှင်းပုံစံကို အသုံးပြုကာ ကုန်ပစ္စည်းနှစ်ခုစလုံးတွင် မှီခိုမှုကိုရည်ညွှန်းနိုင်သည်။ io နှင့် သင့်ကိုယ်ပိုင် registry သို့။
.cargo/config တွင် ပြင်ပစာရင်းသွင်းမှုများကို ပေါင်းထည့်ရန် ($HOME တွင် သို့မဟုတ် ပက်ကေ့ဂျ်လမ်းညွှန်တွင် တည်ရှိသည်)
ပေးထားသည်။ အပိုင်း “[registries]”၊ နှင့် ပြင်ပ မှတ်ပုံတင်ခြင်းကို အသုံးပြုရန်၊ “registry” ရွေးချယ်ခွင့်သည် Cargo.toml ရှိ မှီခိုမှုတစ်ခုစီ၏ ဖော်ပြချက်တွင် ပေါ်လာသည်။ နောက်ထပ် မှတ်ပုံတင်ခြင်းတစ်ခုသို့ ချိတ်ဆက်ရန်၊ အထောက်အထားစိစစ်ခြင်း တိုကင်ကို ~/.cargo/credentials ဖိုင်တွင် ရိုးရိုးရှင်းရှင်းထားကာ အမိန့်ကို ဖွင့်ပါ။
"ကုန်တင်ကုန်ချဝင်ရောက်ခြင်း --registry=my-registry" နှင့် ပက်ကေ့ဂျ်တစ်ခုထုတ်ဝေရန် -
"ကုန်တင်ဖြန့်ချိခြင်း -registry=my-registry"; - “?” အော်ပရေတာအသုံးပြုမှုအတွက် အပြည့်အဝပံ့ပိုးမှု ထပ်လောင်းထည့်ထားသည်။ စစ်ဆေးမှုများတွင်
စစ်ဆေးမှုများ စမ်းသပ်မှုအဖြစ် စာရွက်စာတမ်းမှ နမူနာကုဒ်ကို အသုံးပြုနိုင်သည်။ အရင်တုန်းက အော်တယ်။
"?" “fn main()” လုပ်ဆောင်ချက် သို့မဟုတ် “#[test]” လုပ်ဆောင်ချက်များတွင်သာ အမှားအယွင်းများကို ကိုင်တွယ်ဖြေရှင်းရန် အသုံးပြုနိုင်သည်။ - လုပ်ထုံးလုပ်နည်း မက်ခရိုကို အသုံးပြု၍ သတ်မှတ်ထားသော စိတ်ကြိုက် အရည်အချင်းများ
ပေးထားသည်။ တိုကင်များ၏ မထင်သလို အစုံလိုက်များကို အသုံးပြုနိုင်စွမ်း (“#[attr($tokens)]”၊ “#[attr[$tokens]] နှင့် #[attr{$tokens}]”)။ ယခင်က၊ ဥပမာ “#[foo(bar, baz(quux, foo = “bar”))]” ကို string literals သုံးပြီး tree/recursive form တွင်သာ သတ်မှတ်နိုင်သော်လည်း ယခုအခါ စာရင်းကောက်ခြင်း (' #[range(0. .10)]') နှင့် “#[bound(T: MyTrait)]” ကဲ့သို့ တည်ဆောက်မှုများ၊ - တည်ငြိမ်သောအမျိုးအစားများ (စရိုက်)
TryFrom иကြိုးစားပါ အမှားအယွင်း ကိုင်တွယ်မှုဖြင့် အမျိုးအစားကူးပြောင်းမှုများကို ခွင့်ပြုသည်။ ဥပမာအားဖြင့်၊ ကိန်းပြည့်အမျိုးအစားများပါရှိသော from_be_bytes ကဲ့သို့နည်းလမ်းများသည် arrays များကို input အဖြစ်အသုံးပြုသည်၊ သို့သော် data သည် မကြာခဏ Slice type ဖြင့်ရောက်လာပြီး arrays နှင့် slices များကြားသို့ပြောင်းခြင်းသည် manually ပြုလုပ်ရန်အခက်အခဲရှိသည်။ စရိုက်လက္ခဏာအသစ်များ၏အကူအညီဖြင့်၊ သတ်မှတ်ထားသောလုပ်ဆောင်ချက်ကို .try_into() သို့ခေါ်ဆိုခြင်းဖြင့် ဥပမာအားဖြင့် “let num = u32::from_be_bytes(slice.try_into()?)”။ အမြဲအောင်မြင်သော ကူးပြောင်းမှုများအတွက် (ဥပမာ၊ အမျိုးအစား u8 မှ u32) တွင် အမှားအမျိုးအစားတစ်ခုကို ထည့်ထားသည်မှားယှငျးနိုငျ ပွင့်လင်းမြင်သာစွာအသုံးပြုနိုင်ခြင်း။
"From" ၏ လက်ရှိအကောင်အထည်ဖော်မှုအားလုံးအတွက် TryFrom; - လုပ်ဆောင်ချက်ကို ရပ်တန့်ထားသည်။
CommandExt::before_exec fork() ခေါ်ဆိုပြီးနောက် ခွဲထားသော ကလေးလုပ်ငန်းစဉ်၏ ဆက်စပ်မှုတွင် လုပ်ဆောင်ခဲ့သော ကိုင်တွယ်သူအား exec မလည်ပတ်မီ ကွပ်မျက်ရန် ခွင့်ပြုထားသည်။ ထိုသို့သောအခြေအနေများတွင်၊ ဖိုင်ဖော်ပြချက်များနှင့် ပုံဖော်ထားသည့် မှတ်ဉာဏ်ဧရိယာများကဲ့သို့သော ပင်မလုပ်ငန်းစဉ်၏အရင်းအမြစ်အချို့ကို ထပ်တူပွားနိုင်ပြီး၊ သတ်မှတ်မထားသော အပြုအမူနှင့် စာကြည့်တိုက်များ၏ မှားယွင်းလုပ်ဆောင်မှုကို ဖြစ်ပေါ်စေနိုင်သည်။
before_exec အစား မလုံခြုံသော လုပ်ဆောင်ချက်ကို အသုံးပြုရန် အကြံပြုထားသည်။CommandExt::pre_exec . - 8 မှ 64 ဘစ်အထိ အရွယ်အစားရှိ အက်တမ်ကိန်းပြည့်အမျိုးအစားများ (ဥပမာ၊
AtomicU8 ) အပြင် လက်မှတ် အမျိုးအစားများNonZeroI [8|16|32|64|128]. - Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub အပါအဝင် API ၏ အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့လိုက်သည် ] နှင့် SystemTime နည်းလမ်းများကို တည်ငြိမ်အောင်ပြုလုပ်ထားပြီး ::checked_[add|sub]။ iter::from_fn နှင့် iter::successors လုပ်ဆောင်ချက်များကို တည်ငြိမ်အောင်ပြုလုပ်ထားသည်။
- ကိန်းပြည့်အမျိုးအစားအားလုံးအတွက်၊ checked_pow၊ saturating_pow၊ wrapping_pow နှင့် overflowing_pow နည်းလမ်းများကို အကောင်အထည်ဖော်သည်။
- “-C linker-plugin-lto” တည်ဆောက်မှုရွေးချယ်မှုကို သတ်မှတ်ခြင်းဖြင့် ချိတ်ဆက်ခြင်းအဆင့်တွင် ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်နိုင်သည့်စွမ်းရည်ကို ထည့်သွင်းထားသည်။
source: opennet.ru