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

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

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

ကိုးကားစစ်ဆေးခြင်း၊ အရာဝတ္တုပိုင်ဆိုင်မှုကိုခြေရာခံခြင်း၊ အရာဝတ္တုသက်တမ်းကိုခြေရာခံခြင်း (scopes) ကိုခြေရာခံခြင်းနှင့် ကုဒ်လုပ်ဆောင်နေစဉ်အတွင်း မမ်မိုရီဝင်ရောက်ခြင်း၏မှန်ကန်မှုကို အကဲဖြတ်ခြင်းများမှတစ်ဆင့် Memory safety ကို Rust တွင် ပံ့ပိုးပေးပါသည်။ Rust သည် ကိန်းပြည့်ပြည့်လျှံမှုများကို အကာအကွယ်ပေးသည်၊ အသုံးမပြုမီ ပြောင်းလဲနိုင်သောတန်ဖိုးများကို မဖြစ်မနေစတင်လုပ်ဆောင်ရန် လိုအပ်သည်၊ စံဒစ်ဂျစ်တိုက်တွင် ပိုမိုကောင်းမွန်သော အမှားများကို ကိုင်တွယ်ရန်၊ ပုံသေအားဖြင့် မပြောင်းလဲနိုင်သော ကိုးကားချက်များနှင့် ကိန်းရှင်များ၏ သဘောတရားကို ကျင့်သုံးသည်၊ ယုတ္တိအမှားများကို အနည်းဆုံးဖြစ်စေရန် ခိုင်လုံသောအငြိမ်စာရိုက်ခြင်းကို ပံ့ပိုးပေးပါသည်။

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

  • ကိန်းပြည့်ကိုယ်စားပြုမှုများ ("#[repr(Int)]" ရည်ညွှန်းချက်တွင်) စာရင်းကောက်တွင် အကွက်များပါရှိလျှင်ပင် ခွဲခြားသတ်မှတ်ထားသည့် တိကျပြတ်သားသော ညွှန်ပြချက် (စာရင်းကောက်ယူမှုတွင် ပုံစံကွဲနံပါတ်) ကို ခွင့်ပြုထားသည်။ #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • ထည့်ထားသော လုပ်ဆောင်ချက် core::hint::black_box သည် လက်ခံရရှိသောတန်ဖိုးကို ရိုးရိုးရှင်းရှင်းပြန်ပေးသည်။ ဤလုပ်ဆောင်ချက်သည် တစ်စုံတစ်ခုလုပ်ဆောင်နေသည်ဟု compiler မှယူဆသောကြောင့် black_box လုပ်ဆောင်ချက်ကို ကုဒ်စွမ်းဆောင်ရည်စမ်းသပ်ခြင်းလုပ်ဆောင်သည့်အခါ သို့မဟုတ် ထုတ်လုပ်လိုက်သောစက်ကုဒ်ကို စစ်ဆေးသည့်အခါတွင် (သို့) compiler မှ အသုံးမပြုသောကုဒ်ကို မစဉ်းစားဘဲ ဖယ်ရှားရန် black_box လုပ်ဆောင်ချက်ကို အသုံးပြုနိုင်သည်။ ဥပမာအားဖြင့်၊ အောက်ပါဥပမာတွင်၊ black_box(v.as_ptr()) သည် vector v ကိုအသုံးမပြုဟု compiler အား တားဆီးထားသည်။ std::hint::black_box; fn push_cap(v: &mut Vec) { i အတွက် 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • "ကုန်တင်ကုန်ချ" ပက်ကေ့ဂျ်မန်နေဂျာသည် Cargo.toml မန်နီးဖက်စ်မှ မှီခိုမှုများအား ဖယ်ရှားရန် ခွင့်ပြုသည့် "ဖယ်ရှားရန်" အမိန့်ပေးသည်။
  • API ၏ အစိတ်အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့ထားပြီး၊ နည်းလမ်းများနှင့် စရိုက်လက္ခဏာများကို အကောင်အထည်ဖော်ရာတွင် တည်ငြိမ်အောင်ပြုလုပ်ထားသည်-
    • proc_macro::Span::source_text
    • u*::{checked_add_signed၊ overflowing_add_signed၊ saturating_add_signed၊ wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet-:{ပထမ၊ နောက်ဆုံး၊ pop_first၊ pop_last}
    • BTreeMap--{first_key_value၊ last_key_value၊ first_entry၊ last_entry၊ pop_first၊ pop_last}
    • WASI ကိုအသုံးပြုသောအခါ stdio လော့ခ်အမျိုးအစားများအတွက် AsFd အကောင်အထည်ဖော်မှုများကို ထည့်ပါ။
    • impl TryFrom > Box အတွက် <[T; N]>
    • core::hint::black_box
    • ကြာချိန်-:try_from_secs_{f32,f64}
    • ရွေးချယ်မှု-: ဇစ်ဖွင့်ပါ။
    • std::os::fd
  • အပိုင်းအခြား "..X" နှင့် "..=X" ကို နမူနာပုံစံများတွင် ခွင့်ပြုထားသည်။
  • rustc compiler နှင့် LLVM backend တို့၏ ရှေ့ဆုံးအခြမ်းကို တည်ဆောက်သည့်အခါ၊ LTO (Link Time Optimization) နှင့် BOLT (Binary Optimization and Layout Tool) ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းမုဒ်များကို ရလဒ်ကုဒ်၏စွမ်းဆောင်ရည်ကို တိုးမြင့်စေပြီး မှတ်ဉာဏ်သုံးစွဲမှုကို လျှော့ချရန်အတွက် အသုံးပြုပါသည်။
  • armv5te-none-eabi နှင့် thumbv5te-none-eabi ပလပ်ဖောင်းများအတွက် အဆင့် XNUMX ပံ့ပိုးမှုကို အကောင်အထည်ဖော်ခဲ့သည်။ တတိယအဆင့်သည် အခြေခံပံ့ပိုးမှုကို ရည်ညွှန်းသော်လည်း အလိုအလျောက်စမ်းသပ်ခြင်းမရှိဘဲ တရားဝင်တည်ဆောက်မှုများကို ထုတ်ဝေခြင်းနှင့် ကုဒ်တည်ဆောက်နိုင်မှုကို စစ်ဆေးခြင်းတို့ဖြစ်သည်။
  • macOS Generic Libraries များသို့ ချိတ်ဆက်ခြင်းအတွက် ပံ့ပိုးမှု ထပ်လောင်းထည့်ထားပါသည်။

ထို့အပြင်၊ Rust language (gccrs) ၏ front-end compiler ၏ GCC codebase တွင် ပါ၀င်မှုကို မှတ်သားနိုင်ပါသည်။ ရှေ့တန်းကို 13 ခုနှစ် မေလတွင် ထွက်ရှိမည့် GCC 2023 ဌာနခွဲတွင် ပါဝင်သည်။ GCC 13 မှစတင်၍ Standard GCC ကိရိယာအစုံသည် LLVM တိုးတက်မှုများကို အသုံးပြု၍ တည်ဆောက်ထားသော rustc compiler ကို ထည့်သွင်းရန်မလိုအပ်ဘဲ Rust ပရိုဂရမ်များကို စုစည်းရန်အတွက် အသုံးပြုနိုင်မည် ဖြစ်သည်။ GCC 13 တွင် Rust အကောင်အထည်ဖော်မှုသည် ဘီတာအခြေအနေတွင်ရှိမည်ဖြစ်ပြီး မူရင်းအတိုင်းဖွင့်မည်မဟုတ်ပါ။

source: opennet.ru

မှတ်ချက် Add