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

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

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

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

  • "ထိတ်လန့်စရာ!" မက်ခရိုအသုံးပြုမှုကို တည်ငြိမ်သွားပါပြီ။ "const fn" ကြေငြာချက်များကဲ့သို့သော စုစည်းမှုအတွင်း ဖန်တီးထားသော အကြောင်းအရာများ။ ထို့အပြင်၊ "ထိတ်လန့်ခြင်း" ကိုအသုံးပြုခြင်းအပြင်၊ const ကြေငြာချက်များသည် “assert!” macro ကိုအသုံးပြုခြင်းကိုခွင့်ပြုသည်။ နှင့် အချို့သော စံပြစာကြည့်တိုက် API များ။ တည်ငြိမ်မှုသည် ဖော်မတ်ဖွဲ့စည်းခြင်းဆိုင်ရာ အခြေခံအဆောက်အအုံတစ်ခုလုံးကို အကျုံးမဝင်သေးပါ၊ ထို့ကြောင့် ၎င်း၏လက်ရှိပုံစံတွင် "ထိတ်လန့်ခြင်း!" မက်ခရိုဖြစ်သည်။ တည်ငြိမ်သောစာကြောင်းများဖြင့်သာ သုံးနိုင်သည် (ထိတ်လန့်ခြင်း!(“…”)) သို့မဟုတ် အစားထိုးသည့်အခါ (ထိတ်လန့်ခြင်း!("{}", a)))၊ အစားထိုးသည့်အခါ ပေါင်းစပ်ထားသောတန်ဖိုး "&str" တစ်ခုတည်းဖြင့်သာ အသုံးပြုနိုင်သည်။ ဖော်မတ်သတ်မှတ်ခြင်းများနှင့် အခြားအမျိုးအစားများမပါဘဲ }"။ အနာဂတ်တွင်၊ စဉ်ဆက်မပြတ်အကြောင်းအရာများတွင် မက်ခရို၏အသုံးချနိုင်မှုကို တိုးချဲ့လာမည်ဖြစ်သော်လည်း စုစည်းမှုအဆင့်တွင် အခိုင်အမာစစ်ဆေးမှုများလုပ်ဆောင်ရန် တည်ငြိမ်သောစွမ်းရည်များသည် လုံလောက်နေပြီဖြစ်သည်- const _: () = assert!(std::mem::size_of::() == 64 ); const _: () = assert!(std::mem::size_of::() == 8);
  • Cargo package manager သည် "dev", "release", "test" နှင့် "bench" တို့ကို ကန့်သတ်မထားဘဲ မတရားသောအမည်များဖြင့် ပရိုဖိုင်များကို အသုံးပြုခွင့်ပေးသည်။ ဥပမာအားဖြင့်၊ ချိတ်ဆက်ခြင်းအဆင့် (LTO) တွင် နောက်ဆုံးထုတ်ကုန်စည်းဝေးပွဲများကို ထုတ်ပေးသည့်အခါမှသာ ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်ရန် Cargo.toml တွင် "ထုတ်လုပ်မှု" ပရိုဖိုင်ကို ဖန်တီးပြီး ၎င်းတွင် "lto = true" အလံကို ထည့်နိုင်သည်။ သို့ရာတွင်၊ သင်၏ကိုယ်ပိုင်ပရိုဖိုင်များကို သတ်မှတ်သည့်အခါ၊ ၎င်းမှ မူရင်းဆက်တင်များကို အမွေဆက်ခံရန် ရှိပြီးသားပရိုဖိုင်ကို သတ်မှတ်ရပါမည်။ အောက်ဖော်ပြပါ ဥပမာသည် “ထုတ်လုပ်ခြင်း” ပရိုဖိုင်ကို “lto = true” အလံအပါအဝင် “ထုတ်လွှတ်ခြင်း” ပရိုဖိုင်ကို ဖြည့်စွက်ပေးသည်။ ပရိုဖိုင်ကို “-- ပရိုဖိုင်ထုတ်လုပ်မှု” ရွေးချယ်မှုဖြင့် ကုန်တင်ကုန်ချခေါ်ဆိုခြင်းဖြင့် အသက်သွင်းထားပြီး တပ်ဆင်မှုဆိုင်ရာ ပစ္စည်းများကို “ပစ်မှတ်/ထုတ်လုပ်မှု” လမ်းညွှန်တွင် ထားရှိမည်ဖြစ်သည်။ [profile.production] inherits = "လွှတ်ပေးရန်" lto = မှန်သည်။
  • Vec၊ String၊ HashMap၊ HashSet နှင့် VecDeque အမျိုးအစားများအတွက် try_reserve ကို တည်ငြိမ်အောင်ပြုလုပ်ထားပြီး၊ ၎င်းသည် မှတ်ဉာဏ်ခွဲဝေမှုလုပ်ဆောင်မှု အကြိမ်ရေကို လျှော့ချရန်နှင့် ရှောင်ရှားရန်အတွက် ပေးထားသည့်အမျိုးအစားတစ်ခု၏ အချို့သောဒြပ်စင်အရေအတွက်အတွက် နေရာကြိုတင်ကြိုတင်မှာယူနိုင်စေမည်ဖြစ်သည်။ Memory မရှိခြင်းကြောင့် လည်ပတ်နေစဉ်အတွင်း ပျက်သွားခြင်း
  • "m!{.. }.method()" နှင့် "m!{.. }?" ကဲ့သို့သော အသုံးအနှုန်းများတွင် curly braces များဖြင့် macro ကို သတ်မှတ်ခွင့်ပြုထားသည်။
  • File::read_to_end နှင့် read_to_string လုပ်ဆောင်ချက်များကို လုပ်ဆောင်မှုကို အကောင်းဆုံးဖြစ်အောင် ပြုလုပ်ထားပါသည်။
  • ယူနီကုဒ်သတ်မှတ်ချက်အတွက် ပံ့ပိုးမှုအား ဗားရှင်း 14.0 သို့ အပ်ဒိတ်လုပ်ထားသည်။
  • ပြန်တန်ဖိုးကို လျစ်လျူရှုပါက သတိပေးချက်ထုတ်ရန် "#[must_use]" ဟု အမှတ်အသားပြုထားသော လုပ်ဆောင်ချက်အရေအတွက်ကို ချဲ့ထွင်ခဲ့ပြီး၊ ၎င်းသည် တန်ဖိုးအသစ်တစ်ခုသို့ ပြန်ပေးမည့်အစား တန်ဖိုးများကို ပြောင်းလဲမည်ဟု ယူဆခြင်းကြောင့် ဖြစ်ပေါ်လာသော အမှားများကို ခွဲခြားသတ်မှတ်ပေးသည်။
  • libgccjit ကို အသုံးပြု၍ ကုဒ်ထုတ်လုပ်ခြင်းအတွက် စမ်းသပ်မှု နောက်ခံကို ထည့်ထားသည်။
  • API ၏ အစိတ်အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့ထားပြီး၊ နည်းလမ်းများနှင့် စရိုက်လက္ခဏာများကို အကောင်အထည်ဖော်ရာတွင် တည်ငြိမ်အောင်ပြုလုပ်ထားသည်-
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet-:try_reserve
    • စာတန်း-:try_reserve
    • စာတန်း-:try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro:: is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • ညွှန်ကြားချက်-:get_current_dir
    • CommandArgs
    • CommandEnvs
  • ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို အသုံးပြုနိုင်ကြောင်း ဆုံးဖြတ်သည့် "const" ရည်ညွှန်းချက်အား လုပ်ဆောင်ချက်အရိပ်အမြွက်တွင် အသုံးပြုသည်-:unreachable_unchecked။
  • ပံ့ပိုးမှုတတိယအဆင့်ကို armv6k-nintendo-3ds၊ armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi နှင့် armv7a-kmc-တို့အတွက် အကောင်အထည်ဖော်ခဲ့သည်။ solid_asp3-eabihf ပလပ်ဖောင်းများ။ တတိယအဆင့်တွင် အခြေခံပံ့ပိုးမှုပါဝင်သော်လည်း အလိုအလျောက်စမ်းသပ်ခြင်းမရှိဘဲ၊ တရားဝင်တည်ဆောက်မှုများကို ထုတ်ပြန်ခြင်း သို့မဟုတ် ကုဒ်ကိုတည်ဆောက်နိုင်သည်ရှိမရှိ စစ်ဆေးခြင်းမပြုဘဲဖြစ်သည်။

source: opennet.ru

မှတ်ချက် Add