Rust 1.34 ပရိုဂရမ်းမင်းဘာသာစကား ဖြန့်ချိသည်။

Mozilla ပရောဂျက်မှ ဖန်တီးထားသော စနစ်ပရိုဂရမ်ဘာသာစကား Rust 1.34 ကို ထုတ်ပြန်လိုက်ပါပြီ။ ဘာသာစကားသည် မမ်မိုရီဘေးကင်းရေးကို အာရုံစိုက်ပြီး၊ အလိုအလျောက်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုကို ပံ့ပိုးပေးကာ အမှိုက်စုဆောင်းသူ သို့မဟုတ် အပြေးအချိန်ကို အသုံးမပြုဘဲ မြင့်မားသောအလုပ်အပြိုင်ရရှိရန် နည်းလမ်းများကို ပံ့ပိုးပေးပါသည်။

Rust ၏ အလိုအလျောက်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုသည် developer အား pointer ခြယ်လှယ်ခြင်းမှ လွတ်မြောက်စေပြီး အခမဲ့ memory access များ၊ null pointer dereferences၊ buffer overruns ကဲ့သို့သော အဆင့်နိမ့်မှတ်ဉာဏ်ခြယ်လှယ်မှုမှ ဖြစ်ပေါ်လာသည့် ပြဿနာများကို ကာကွယ်ပေးပါသည်။ စာကြည့်တိုက်များကို ဖြန့်ဝေရန်၊ စုစည်းမှုကို သေချာစေရန်နှင့် မှီခိုမှုကို စီမံခန့်ခွဲရန်၊ ပရောဂျက်သည် ပရိုဂရမ်အတွက် လိုအပ်သော စာကြည့်တိုက်များကို တစ်ချက်နှိပ်ရုံဖြင့် ရရှိနိုင်စေမည့် Cargo package manager ကို တီထွင်နေပါသည်။ crates.io repository ကို hosting libraries များအတွက် ပံ့ပိုးထားပါသည်။

အဓိက တီထွင်ဆန်းသစ်မှုများ-

  • Cargo package manager သည် crates.io public registry နှင့် အတူယှဉ်တွဲနေထိုင်နိုင်သော အစားထိုးပက်ကေ့ခ်ျစာရင်းသွင်းမှုများနှင့် လုပ်ဆောင်ရန် ကိရိယာများကို ပေါင်းထည့်ထားသည်။ ဥပမာအားဖြင့်၊ မူပိုင်အက်ပလီကေးရှင်းများ၏ developer များသည် ယခုအခါ Cargo.toml တွင် မှီခိုမှုများစာရင်းသွင်းရာတွင် အသုံးပြုနိုင်ပြီး ၎င်းတို့၏ထုတ်ကုန်များအတွက် crates.io နှင့် ဆင်တူသည့်ဗားရှင်းပုံစံကို အသုံးပြုကာ ကုန်ပစ္စည်းနှစ်ခုစလုံးတွင် မှီခိုမှုကိုရည်ညွှန်းနိုင်သည်။ io နှင့် သင့်ကိုယ်ပိုင် registry သို့။

    ~/.cargo/config တွင် ပြင်ပမှတ်ပုံတင်မှုတစ်ခုထည့်ရန်
    ရွေးချယ်မှုအသစ် “my-registry” ကို “[registries]” ကဏ္ဍတွင် ပံ့ပိုးပေးထားပြီး "[dependencies]" ကဏ္ဍရှိ Cargo.toml ရှိ ပြင်ပစာရင်းသွင်းခြင်းဆိုင်ရာ မှီခိုမှုကို ဖော်ပြရန်အတွက် "အခြား-သေတ္တာ" ရွေးချယ်မှုကို ထည့်သွင်းထားသည်။ နောက်ထပ် မှတ်ပုံတင်တစ်ခုသို့ ချိတ်ဆက်ရန်၊ အထောက်အထားစိစစ်ခြင်း တိုကင်ကို ~/.cargo/credentials ဖိုင်တွင် ရိုးရိုးရှင်းရှင်းထားကာ အမိန့်ကို ဖွင့်ပါ။
    "ကုန်တင်ကုန်ချဝင်ရောက်ခြင်း --registry=my-registry" နှင့် ပက်ကေ့ဂျ်တစ်ခုထုတ်ဝေရန် -
    "ကုန်တင်ဖြန့်ချိခြင်း -registry=my-registry";

  • “?” အော်ပရေတာ အသုံးပြုမှုအတွက် အပြည့်အဝ ပံ့ပိုးမှု ထည့်ပေးခဲ့သည်။ စမ်းသပ်မှုများအဖြစ် စာရွက်စာတမ်းများမှ နမူနာကုဒ်ကို သင်သုံးနိုင်စေမည့် doctests။ အရင်တုန်းက အော်တယ်။
    "?" “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 နှင့် TryInto စရိုက်များကို တည်ငြိမ်အောင်ပြုလုပ်ထားပြီး အမှားအယွင်းများကို ကိုင်တွယ်ခြင်းဖြင့် အမျိုးအစားကူးပြောင်းမှုများကို ခွင့်ပြုထားသည်။ ဥပမာအားဖြင့်၊ ကိန်းပြည့်အမျိုးအစားများပါရှိသော from_be_bytes ကဲ့သို့နည်းလမ်းများသည် arrays များကို input အဖြစ်အသုံးပြုသည်၊ သို့သော် data သည် မကြာခဏ Slice type ဖြင့်ရောက်လာပြီး arrays နှင့် slices များကြားသို့ပြောင်းခြင်းသည် manually ပြုလုပ်ရန်အခက်အခဲရှိသည်။ စရိုက်လက္ခဏာအသစ်များ၏အကူအညီဖြင့်၊ သတ်မှတ်ထားသောလုပ်ဆောင်ချက်ကို .try_into() သို့ခေါ်ဆိုခြင်းဖြင့် ဥပမာအားဖြင့် “let num = u32::from_be_bytes(slice.try_into()?)”။ အမြဲအောင်မြင်သော ကူးပြောင်းမှုများအတွက် (ဥပမာ၊ အမျိုးအစား u8 မှ u32) ကို ပွင့်လင်းမြင်သာစွာအသုံးပြုနိုင်ရန် Infallible error အမျိုးအစားကို ထည့်သွင်းထားပါသည်။
    "From" ၏ လက်ရှိအကောင်အထည်ဖော်မှုအားလုံးအတွက် TryFrom;

  • fork() ခေါ်ဆိုပြီးနောက် ခွဲထားသော ကလေးလုပ်ငန်းစဉ်၏ ဆက်စပ်မှုတွင် လုပ်ဆောင်ခဲ့သော exec မတိုင်မီ ကိုင်တွယ်လုပ်ဆောင်မှုကို ခွင့်ပြုထားသည့် CommandExt::before_exec လုပ်ဆောင်ချက်ကို ငြင်းပယ်ထားသည်။ ထိုသို့သောအခြေအနေများတွင်၊ ဖိုင်ဖော်ပြချက်များနှင့် မြေပုံပြုလုပ်ထားသော မှတ်ဉာဏ်ဧရိယာများကဲ့သို့သော ပင်မလုပ်ငန်းစဉ်၏အရင်းအမြစ်အချို့ကို ထပ်ပွားနိုင်ပြီး၊ သတ်မှတ်မထားသော အပြုအမူနှင့် စာကြည့်တိုက်များ၏ မှားယွင်းလုပ်ဆောင်မှုကို ဖြစ်ပေါ်စေနိုင်သည်။
    before_exec အစား၊ မလုံခြုံသောလုပ်ဆောင်ချက် CommandExt::pre_exec ကိုအသုံးပြုရန် အကြံပြုထားသည်။

  • 8|64|8|8|16] အရွယ်အစားရှိ အက်တမ် ကိန်းပြည့် အမျိုးအစားများ (ဥပမာ၊ AtomicU32) နှင့် လက်မှတ်မထိုးထားသော အမျိုးအစား NonZeroI[54|128|XNUMX|XNUMX|XNUMX] တို့ကို တည်ငြိမ်အောင် လက်မှတ်ရေးထိုးပြီး လက်မှတ်မထိုးထားသော အက်တမ်ကိန်းပြည့်အမျိုးအစားများ။
  • 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” တည်ဆောက်မှုရွေးချယ်မှုကို သတ်မှတ်ခြင်းဖြင့် လင့်ခ်အဆင့်တွင် ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်နိုင်သည့်စွမ်းရည်ကို ပေါင်းထည့်ခဲ့သည် (rustc သည် Rust ကုဒ်ကို LLVM ဘစ်ကုဒ်သို့ စုစည်းပေးသည်၊၊ ၎င်းသည် LTO ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်ခြင်းကို အသုံးချနိုင်သည်)။

source: opennet.ru

မှတ်ချက် Add