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

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

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

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

  • မတရားအရွယ်အစား arrays များအတွက် လက္ခဏာရပ်များအတွက် ပံ့ပိုးမှုကို အကောင်အထည်ဖော်ခဲ့သည်။ ယခင်က၊ ကိန်းပြည့်တန်ဖိုးများအားလုံးအတွက် ယေဘူယျလုပ်ဆောင်ချက်များကို မသတ်မှတ်နိုင်ခြင်းကြောင့်၊ စံပြစာကြည့်တိုက်သည် အရွယ်အစားရှိ ဒြပ်စင် 32 ခုအထိရှိသော ခင်းကျင်းမှုများအတွက်သာ ထည့်သွင်းထားသော စရိုက်လက္ခဏာများကို ပံ့ပိုးပေးသည် (အရွယ်အစားတစ်ခုစီအတွက် စရိုက်လက္ခဏာများကို တည်ငြိမ်စွာသတ်မှတ်ထားသည်)။ const generics လုပ်ဆောင်နိုင်စွမ်းကို ဖန်တီးထားသောကြောင့်၊ မည်သည့် array အရွယ်အစားအတွက်မဆို ယေဘူယျလုပ်ဆောင်ချက်များကို သတ်မှတ်ရန် ဖြစ်နိုင်သော်လည်း ၎င်းတို့ကို compiler တွင် အကောင်အထည်ဖော်ထားပြီး ယခုအခါ Standard library တွင် အသုံးပြုထားသော်လည်း ဘာသာစကား၏ တည်ငြိမ်သောအင်္ဂါရပ်များတွင် ၎င်းတို့ မပါဝင်သေးပါ။ မည်သည့်အရွယ်အစား array အမျိုးအစားများအတွက်။
    ဥပမာအားဖြင့်၊ Rust 1.47 တွင် အောက်ပါတည်ဆောက်ပုံသည် ယခင်က error ဖြစ်ခဲ့သော်လည်း၊ array တစ်ခု၏ အကြောင်းအရာများကို print ထုတ်လိမ့်မည်-

fn ပင်မ() {
xs = [0; ၃၄];
println!("{:?}", xs);
}

  • တိုတောင်းသောခြေရာများ (backtrace)၊ အရေးပေါ်အခြေအနေများတွင် ထုတ်ပေးသည်။ အခြေအနေအများစုတွင် စိတ်မဝင်စားသော်လည်း အထွက်ကို ရှုပ်ပွစေပြီး ပြဿနာ၏ အဓိကအကြောင်းရင်းများမှ အာရုံကို အာရုံလွဲစေသည့်အရာများကို သဲလွန်စမှ ဖယ်ထုတ်ထားသည်။ သဲလွန်စ အပြည့်အစုံကို ပြန်ရရန်၊ သင်သည် ပတ်ဝန်းကျင် ပြောင်းလဲမှု "RUST_BACKTRACE=full" ကို သုံးနိုင်သည်။ ဥပမာ၊ ကုဒ်အတွက်

fn ပင်မ() {
ထိတ်လန့်ကြောက်ရွံ့သော!();
}

ယခင်က၊ သဲလွန်စကို အဆင့် ၂၃ ဆင့်ဖြင့် ထုတ်ပေးခဲ့သော်လည်း ယခုအခါ အနှစ်သာရကို ချက်ခြင်းဆုပ်ကိုင်နိုင်စေမည့် အဆင့် ၃ ခုသို့ လျှော့ချလိုက်ပါမည်။

src/main.rs:2:5
stack backtrace-
0: std::panicking::begin_panic
တွင် /rustc/d…d75a/library/std/src/panicking.rs:497
1: ကစားကွင်း::ပင်မ
./src/main.rs:2 တွင်
2: core::ops::function::FnOnce::call_once
တွင် /rustc/d…d75a/library/core/src/ops/function.rs:227

  • rustc compiler သည် LLVM 11 ကိုအသုံးပြု၍ တည်ဆောက်ရန် မွမ်းမံထားပြီး (Rust သည် LLVM ကို ကုဒ်ထုတ်လုပ်ရန်အတွက် နောက်ကွယ်မှအဖြစ် အသုံးပြုသည်)။ တစ်ချိန်တည်းမှာပင်၊ ဗားရှင်း 8 အထိ LLVM အဟောင်းဖြင့် တည်ဆောက်နိုင်မှုအား ဆက်လက်ထိန်းသိမ်းထားသော်လည်း မူရင်း (rust-lang/llvm-project) LLVM 11 ကို ယခုအခါ အသုံးပြုထားသည်။ LLVM 11 ၏ ထွက်ရှိမှုကို လာမည့်တွင် မျှော်လင့်ထားသည်။ နေ့ရက်များ။
  • Windows ပလပ်ဖောင်းတွင်၊ rustc compiler သည် “-C control-flow-guard” အလံကို အသုံးပြု၍ အသက်သွင်းထားသည့် ထိန်းချုပ်မှုစီးဆင်းမှုစစ်ဆေးခြင်း (Control Flow Guard) ကိုဖွင့်ရန်အတွက် ပံ့ပိုးပေးပါသည်။ အခြားပလပ်ဖောင်းများတွင် ဤအလံကို ယခုလောလောဆယ် လစ်လျူရှုထားသည်။
  • တည်ငြိမ်သော Ident::new_raw၊ Range::is_empty၊ RangeInclusive::is_empty၊ Result::as_deref၊ Result::as_deref_mut၊ Vec::leak၊ pointer::offset_from အပါအဝင် API ၏ အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ လွှဲပြောင်းလိုက်ပြီဖြစ်သည်။ , f32:: TAU နှင့် f64::TAU။
  • ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို အသုံးပြုရန် ဖြစ်နိုင်ခြေကို ဆုံးဖြတ်ပေးသည့် "const" attribute ကို နည်းလမ်းများတွင် အသုံးပြုသည်-
    • သုညမဟုတ်သော ကိန်းပြည့်အားလုံးအတွက် အသစ်၊
    • ကိန်းပြည့်အားလုံးအတွက် checked_add၊ checked_sub၊ checked_mul၊ checked_neg၊ checked_shl၊ checked_shr၊ saturating_add၊ saturating_sub နှင့် saturating_mul စသည့် ကိန်းပြည့်အားလုံးအတွက်၊
    • is_ascii_alphabetic၊ is_ascii_uppercase၊ is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace u and is_ascii.
  • FreeBSD အတွက် FreeBSD 11.4 မှ ကိရိယာအစုံကို အသုံးပြုသည် (FreeBSD 10 သည် LLVM 11 ကို မပံ့ပိုးပါ)။

မှကူးယူသည်။ opennet.ru

source: linux.org.ru

မှတ်ချက် Add