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

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

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

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

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

  • ပင်မလုပ်ဆောင်ချက်မှ သင့်ကိုယ်ပိုင်ပြန်ကုဒ်များကို သတ်မှတ်ရန် ဖြစ်နိုင်သည်။ မူလအားဖြင့်၊ Rust ၏ အဓိကလုပ်ဆောင်ချက်သည် developer မှ "process::exit(code)" လုပ်ဆောင်ချက်ကို အတိအလင်းမခေါ်ပါက အောင်မြင်သောထွက်ပေါက်အခြေအနေကို အမြဲညွှန်ပြသည့် အမျိုးအစား "()" (ယူနစ်) ကိုသာ ပြန်ပေးနိုင်သည်။ Rust 1.26 တွင်၊ ပင်မလုပ်ဆောင်ချက်ရှိ မတည်မငြိမ်သော Termination လက္ခဏာကို အသုံးပြု၍ C ပရိုဂရမ်များရှိ EXIT_SUCCESS နှင့် EXIT_FAILURE ကုဒ်များနှင့် သက်ဆိုင်သည့် တန်ဖိုးများကို "Ok" နှင့် "Err" သို့ ပြန်ပေးနိုင်ပါသည်။ Rust 1.61 တွင်၊ Termination စရိုက်ကို တည်ငြိမ်အောင်ပြုလုပ်ထားပြီး၊ သီးခြား ExitCode အမျိုးအစားကို သီးခြားပြန်ကုဒ်တစ်ခုကို ကိုယ်စားပြုရန် အဆိုပြုထားပြီး၊ ၎င်းသည် ကြိုတင်သတ်မှတ်ထားသော ကိန်းသေများကို အောင်မြင်မှုနှင့် ရှုံးနိမ့်မှုတို့ကို ပံ့ပိုးပေးခြင်းဖြင့် ပလပ်ဖောင်းအလိုက် သီးခြားပြန်အမျိုးအစားများကို သရုပ်ဖော်ပေးသည့် သရုပ်ဖော်ကုဒ်တစ်ခုဖြစ်သည်။ စိတ်ကြိုက်ပြန်ကုဒ်ကို ပြန်ပေးရန်။ std::process::ExitCode ကိုသုံးပါ။ fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::SUCCESS }
  • “const fn” ဟူသောအသုံးအနှုန်းကို အသုံးပြု၍ သတ်မှတ်ထားသော လုပ်ဆောင်ချက်များ၏ ထပ်လောင်းစွမ်းရည်များကို ပုံမှန်လုပ်ဆောင်မှုများအဖြစ်သာမက ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို အသုံးပြု၍လည်း တည်ငြိမ်စေပါသည်။ ဤလုပ်ဆောင်ချက်များကို runtime တွင်မဟုတ်ဘဲ compile time တွင် တွက်ချက်ထားသောကြောင့် ၎င်းတို့သည် ကိန်းသေများမှသာ ဖတ်နိုင်မှုကဲ့သို့သော ကန့်သတ်ချက်များနှင့် သက်ဆိုင်ပါသည်။ ဗားရှင်းအသစ်တွင်၊ function pointers များပါရှိသော အခြေခံလုပ်ဆောင်ချက်များကို const လုပ်ဆောင်ချက်များတွင် ခွင့်ပြုထားသည် (ညွှန်ပြမှုများကို ဖန်တီးခြင်း၊ ဖြတ်သန်းခြင်းနှင့် ကာစ်ခြင်းကို ခွင့်ပြုသော်လည်း pointer ဖြင့် လုပ်ဆောင်ချက်ကို မခေါ်ဆိုခြင်း) T: Copy ကဲ့သို့သော const လုပ်ဆောင်ချက်များ၏ ယေဘူယျဘောင်ဘောင်များအတွက် စရိုက်ဘောင်များ ဒိုင်းနမစ်ဖြင့် ပေးပို့နိုင်သော လက္ခဏာများ (dyn Trait); လုပ်ဆောင်ချက် အငြင်းအခုံများနှင့် ပြန်ပေးတန်ဖိုးများအတွက် impl Trait အမျိုးအစားများ။
  • stream သည် std တွင် Stdin၊ Stdout နှင့် Stderr ကို ကိုင်တွယ်သည်::io သည် ယခုအခါ လော့ခ်ချထားသောအခါတွင် တည်ငြိမ်သောသက်တမ်း ("'static") ကို "let out = std::io::stdout().lock();" ကဲ့သို့ တည်ဆောက်မှုကို ခွင့်ပြုပါသည်။ လက်ကိုင်တစ်ခုရယူခြင်းနှင့် စကားရပ်တစ်ခုတွင် လော့ခ်တစ်ခုသတ်မှတ်ခြင်းတို့နှင့်အတူ။
  • API ၏ အစိတ်အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့ထားပြီး၊ နည်းလမ်းများနှင့် စရိုက်လက္ခဏာများကို အကောင်အထည်ဖော်ရာတွင် တည်ငြိမ်အောင်ပြုလုပ်ထားသည်-
    • ပင်နံပါတ်-:static_mut
    • ပင်နံပါတ်-:static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Cursor အတွက်ရေးပါ<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::ရပ်စဲခြင်း။
    • std::thread::JoinHandle::is_finished
  • ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို ၎င်းကိုအသုံးပြုရန် ဖြစ်နိုင်ခြေကို ဆုံးဖြတ်ပေးသည့် "const" attribute ကို လုပ်ဆောင်ချက်များတွင် အသုံးပြုသည်-
    • <*const T>::offset နှင့် <*mut T>::offset
    • <*const T>::wrapping_offset နှင့် <*mut T>::wrapping_offset
    • <*const T>::add နှင့် <*mut T>::add
    • <*const T>::sub နှင့် <*mut T>::sub
    • <*const T>::wrapping_add နှင့် <*mut T>::wrapping_add
    • <*const T>::wrapping_sub နှင့် <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

ထို့အပြင်၊ Firmware တွင်အသုံးပြုသော Xous microkernel လည်ပတ်မှုစနစ် ဖွံ့ဖြိုးတိုးတက်မှုအတွင်း ၎င်းတွင် ကုဒ်လိုင်းပေါင်း 100,ဝဝဝ ကို ရေးသားပြီးနောက် Rust ဘာသာစကား၏ အထင်အမြင်များ အကျဉ်းချုပ်ဖြင့် "Rrust: A Critical Retrospective" ဆောင်းပါးကို မှတ်သားနိုင်ပါသည်။ အားနည်းချက်များတွင် နားလည်ရခက်သော syntax၊ မပြည့်စုံမှုနှင့် ဘာသာစကား၏ ဆက်လက်ဖွံ့ဖြိုးတိုးတက်မှု၊ ထပ်ခါတလဲလဲတည်ဆောက်မှုများမရှိခြင်း၊ Crates.io တွင် မှီခိုယုံကြည်မှုဆိုင်ရာ ပုံမှန်ပြဿနာများနှင့် လုံခြုံသောကုဒ်ရေးရန် သတ်မှတ်ထားသော စည်းကမ်းကို ထိန်းသိမ်းထားရန် လိုအပ်ပါသည်။ မျှော်လင့်ထားသည်ထက် ကျော်လွန်သော အင်္ဂါရပ်များတွင် လျင်မြန်သော ပုံတူပုံစံရိုက်ခြင်းတွင် ထည့်သွင်းထားသော ကုဒ်ကို ပြန်လည်ပြင်ဆင်ခြင်းနှင့် "hacks" ပြန်လည်လုပ်ဆောင်ခြင်းအတွက် ကိရိယာများ ပါဝင်သည်။

source: opennet.ru

မှတ်ချက် Add