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

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

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

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

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

  • မူလပရိုဂရမ် ပျက်စီးမှုကိုင်တွယ်သူ (ထိတ်လန့်စေသော) မှထုတ်ပေးသော စာတိုပုံစံကို ပြန်လည်ဒီဇိုင်းထုတ်ထားပါသည်။ "ထိတ်လန့်ခြင်း" မက်ခရိုတွင် သတ်မှတ်ထားသော စာသား ကိုးကားချက်များပါရှိခြင်း သို့မဟုတ် စာကြောင်းများစွာတွင် ကွဲသွားသောအခါတွင် ကိုးကားချက်များမပါသော သီးခြားစာကြောင်းတစ်ခုပေါ်တွင် ပြသထားပြီး၊ စာကိုပိုမိုလွယ်ကူစွာဖတ်နိုင်ပြီး ရှုပ်ထွေးမှုများကို ဖယ်ရှားပေးပါသည်။ fn main() { let file = "ferris.txt"; အထိတ်တလန့်!("အိုး မဟုတ်ဘူး! {file:?} ရှာမတွေ့ဘူး!"); } 'ပင်မ' ဟူသော ကြိုးသည် 'အိုး မဟုတ်ဘူး! 'ferris.txt' မတွေ့ပါ။', src/main.rs:3:5 src/main.rs:3:5 တွင် 'ပင်မ' စာကြောင်းများ အထိတ်တလန့်ဖြစ်သွားသည်။ "ferris.txt" မတွေ့ပါ။

    “assert_eq” နှင့် “assert_ne” မက်ခရိုကို အစပျိုးသောအခါတွင် ပြသထားသည့် မက်ဆေ့ခ်ျများ၏ အထွက်ကိုလည်း ပြန်လည်လုပ်ဆောင်သည်။ fn main() { assert_eq!("🦀", "🐟", "ferris is a fish"); } 'အဓိက' ဟူသောစကားသည် မအောင်မြင်သည့်အတွက် ထိတ်လန့်တုန်လှုပ်သွားသော စာကြောင်းတစ်ခုရှိပါသည်- `(ဘယ် == ညာ)` left: `"🦀"`, right: `"🐟"`: ferris is a fish', src/main.rs: 2 :5 src/main.rs:2:5- အခိုင်အမာဆိုချက် 'ဘယ်ဘက် == ညာဘက်' တွင် 'ပင်မ' ကြိုးသည် ထိတ်လန့်သွားသည်- ferris သည် ဘယ်ဘက်ငါးမဟုတ်ပါ- "🦀" ညာဘက်- "🐟"

  • RFC 3184 အရ၊ thread-local (thread_local) LocalKey သိုလှောင်မှုသော့များကို တိုက်ရိုက် manipulate လုပ်နိုင်စွမ်းကို ထည့်သွင်းထားပါသည်။ > နှင့် LocalKey > get(), set(), take() နှင့် replace() နည်းလမ်းများကိုအသုံးပြုခြင်းအားဖြင့်၊ "with(|inner| ...)" ကိုအသုံးပြုခြင်းအစား၊ ပိတ်ခြင်းအတွက် အပိုအစပျိုးကုဒ်ကိုလုပ်ဆောင်ရန်မလိုအပ်ဘဲ၊ မက်ခရို “thread_local!” ကိုအသုံးပြုသောအခါ တွဲအသစ်များအတွက် သတ်မှတ်ထားသော မူရင်းတန်ဖိုးများ thread_local! { တည်ငြိမ်သောအရာများ- ဆဲလ် > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // သည် THINGS.set(vec![3, 1, 2]); // ... // was let v = THINGS.with(|i| i.take()); // let v: Vec ဖြစ်လာသည်။ = THINGS.take(); }
  • API ၏ အစိတ်အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့ထားပြီး၊ နည်းလမ်းများနှင့် စရိုက်လက္ခဏာများကို အကောင်အထည်ဖော်ရာတွင် တည်ငြိမ်အောင်ပြုလုပ်ထားသည်-
    • လက်မှတ်မထိုးထားသော { integer}::div_ceil
    • လက်မှတ်မထိုးထားသော { integer}::next_multiple_of
    • လက်မှတ်မထိုးထားသော { integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::ရယူပါ။
    • LocalKey:: >::သတ်မှတ်
    • LocalKey:: >::ယူ
    • LocalKey:: >::အစားထိုးပါ။
    • LocalKey:: >:: with_ချေး
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::သတ်မှတ်
    • LocalKey:: >::ယူ
    • LocalKey:: >::အစားထိုးပါ။
  • ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို ၎င်းကိုအသုံးပြုရန် ဖြစ်နိုင်ခြေကို ဆုံးဖြတ်ပေးသည့် "const" attribute ကို လုပ်ဆောင်ချက်များတွင် အသုံးပြုသည်-
    • rc::Weak::အသစ်
    • ထပ်တူကျသည်::Weak::အသစ်
    • NonNull::as_ref
  • compiler သည် GCC နှင့် Clang ကဲ့သို့ “.comment” ကဏ္ဍတွင် ဗားရှင်းအချက်အလက်ကို မှတ်တမ်းတင်ပေးပါသည်။
  • ပံ့ပိုးကူညီမှုတတိယအဆင့်ကို aarch64-unknown-teeos၊ csky-unknown-linux-gnuabiv2၊ riscv64-linux-android၊ riscv64gc-unknown-hermit၊ x86_64-unikraft-linux-musl နှင့် x86_64-unknown-linux အတွက် ပံ့ပိုးပေးထားပါသည်။ -ohos။ တတိယအဆင့်တွင် အခြေခံပံ့ပိုးမှုပါဝင်သော်လည်း အလိုအလျောက်စမ်းသပ်ခြင်းမရှိဘဲ၊ တရားဝင်တည်ဆောက်မှုများကို ထုတ်ပြန်ခြင်း သို့မဟုတ် ကုဒ်ကိုတည်ဆောက်နိုင်သည်ရှိမရှိ စစ်ဆေးခြင်းမပြုဘဲဖြစ်သည်။
  • ပစ်မှတ်ပလက်ဖောင်း wasm32-wasi-preview1-threads အတွက် ပံ့ပိုးမှု ဒုတိယအဆင့်ကို အကောင်အထည်ဖော်ပြီးဖြစ်သည်။ ပံ့ပိုးမှု၏ဒုတိယအဆင့်တွင် စုဝေးမှုအာမခံချက်ပါဝင်ပါသည်။

source: opennet.ru

မှတ်ချက် Add