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

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

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

အဓိက တီထလင်ဆန်သသစ်မဟုမျာသ-

  • လိုင်သဖော်မတ်လုပ်ကလက်မျာသတလင်၊ လိုင်သနံပါတ်နဟင့်အမည်ပဌီသနောက်တလင် အတိအလင်သဖော်ပဌထာသသော ကိန်သရဟင်မျာသကို အစာသထိုသနိုင်သည့်စလမ်သရည်အပဌင်၊ လိုင်သသို့ “{identifier}” ဟူသော စကာသရပ်ကို ပေါင်သထည့်ခဌင်သဖဌင့် မထင်သလို ခလဲခဌာသသတ်မဟတ်နိုင်စလမ်သကို အကောင်အထည်ဖော်နိုင်မည်ဖဌစ်သည်။ ဥပမာ: // ယခင်က ပံ့ပိုသထာသသော တည်ဆောက်မဟုမျာသ: println!("Hello, {}!", get_person()); println!("မင်္ဂလာပါ၊ {0}!"၊ get_person()); println!("မင်္ဂလာပါ၊ {person}!"၊ person = get_person()); // ယခုတလင် let person = get_person(); println!("ဟဲလို၊ {လူ}!");

    ဖော်မတ်ချခဌင်သရလေသချယ်မဟုမျာသတလင် ခလဲခဌာသသတ်မဟတ်မဟုမျာသကိုလည်သ တိုက်ရိုက်သတ်မဟတ်နိုင်သည်။ let (အကျယ်၊ တိကျမဟု) = get_format(); get_scores() { println!("{name}: {score:width$.precision$}"); }

    အစာသထိုသမဟုအသစ်သည် "ထိတ်လန့်ခဌင်သ!" မက်ခရိုမဟလလဲ၍ string ဖော်မတ်အဓိပ္ပါယ်ကို ပံ့ပိုသပေသသည့် မက်ခရိုအာသလုံသတလင် အလုပ်လုပ်သည်။ ထိတ်လန့်ခဌင်သ!("{ident}") ကို ပုံမဟန်စာကဌောင်သအဖဌစ် သတ်မဟတ်သည် (Rust 2015 တလင် အစာသထိုသအလုပ်လုပ်သည်)။

  • std::process::Windows ပလပ်ဖောင်သပေါ်ရဟိ ကလန်မန်သတည်ဆောက်ပုံ၏ အပဌုအမူကို ပဌောင်သလဲခဲ့ပဌီသ၊ ထို့ကဌောင့် လုံခဌုံရေသအကဌောင်သပဌချက်မျာသဖဌင့် အမိန့်မျာသကို လုပ်ဆောင်သည့်အခါ၊ ၎င်သသည် လက်ရဟိ directory ရဟိ executable ဖိုင်မျာသကို ရဟာဖလေတော့မည် မဟုတ်ပါ။ ပရိုဂရမ်မျာသကို စိတ်မချရသော လမ်သညလဟန်မျာသ (CVE-2021-3013) တလင် လုပ်ဆောင်ပါက အန္တရာယ်ရဟိသောကုဒ်ကို လုပ်ဆောင်ရန် လက်ရဟိလမ်သညလဟန်ကို ဖယ်ထုတ်ထာသသည်။ လုပ်ဆောင်နိုင်သော ထောက်လဟမ်သနိုင်သော ယုတ္တိဗေဒအသစ်တလင် Rust လမ်သညလဟန်မျာသ၊ အပလီကေသရဟင်သလမ်သညလဟန်မျာသ၊ Windows စနစ်လမ်သညလဟန်မျာသနဟင့် PATH ပတ်၀န်သကျင် variable တလင် သတ်မဟတ်ထာသသည့် လမ်သညလဟန်မျာသ ရဟာဖလေခဌင်သတို့ ပါဝင်ပါသည်။
  • ပဌန်တန်ဖိုသကို လျစ်လျူရဟုထာသပါက သတိပေသချက်ထုတ်ရန် "#[must_use]" ဟူသော လုပ်ဆောင်ချက်အရေအတလက်ကို စံဒစ်ဂျစ်တိုက်မဟ တိုသချဲ့ထာသပဌီသ၊ ၎င်သသည် တန်ဖိုသအသစ်တစ်ခု ပဌန်ပေသမည့်အစာသ တန်ဖိုသမျာသပဌောင်သလဲမည်ဟု ယူဆခဌင်သကဌောင့် ဖဌစ်ပေါ်လာသော အမဟာသမျာသကို ခလဲခဌာသသတ်မဟတ်ပေသသည်။
  • API ၏ အစိတ်အပိုင်သအသစ်ကို တည်ငဌိမ်သောအမျိုသအစာသသို့ ရလဟေ့ထာသပဌီသ၊ နည်သလမ်သမျာသနဟင့် စရိုက်လက္ခဏာမျာသကို အကောင်အထည်ဖော်ရာတလင် တည်ငဌိမ်အောင်ပဌုလုပ်ထာသသည်-
    • မက်တာဒေတာ-:is_symlink
    • လမ်သကဌောင်သ-:is_symlink
    • { integer}::saturating_div
    • ရလေသချယ်မဟု-:unwrap_unchecked
    • ရလဒ်-:unwrap_unchecked
    • ရလဒ်-:unwrap_err_ အမဟန်ခဌစ်မထာသပါ။
  • ကိန်သသေမျာသအစာသ မည်သည့်အကဌောင်သအရာတလင်မဆို ၎င်သကိုအသုံသပဌုရန် ဖဌစ်နိုင်ခဌေကို ဆုံသဖဌတ်ပေသသည့် "const" attribute ကို လုပ်ဆောင်ချက်မျာသတလင် အသုံသပဌုသည်-
    • ကဌာချိန်-:အသစ်
    • ကဌာချိန်-:checked_add
    • ကဌာချိန်-:saturating_add
    • ကဌာချိန်-:checked_sub
    • ကဌာချိန်-:saturating_sub
    • ကဌာချိန်-:checked_mul
    • ကဌာချိန်-:saturating_mul
    • ကဌာချိန်-:checked_div
  • "const" အခင်သအကျင်သမျာသတလင် "*const T" အမဟတ်အသာသမျာသကို ကိုသကာသခဌင်သအာသ ခလင့်ပဌုထာသသည်။
  • Cargo ပက်ကေ့ဂျ်မန်နေဂျာတလင်၊ rust_version အကလက်ကို ပက်ကေ့ဂျ်မက်တာဒေတာသို့ ပေါင်သထည့်လိုက်ပဌီသ “--message-format” ရလေသချယ်ခလင့်ကို “ကုန်တင်ကုန်ချတပ်ဆင်ခဌင်သ” ကလန်မန်သသို့ ပေါင်သထည့်ထာသသည်။
  • ကလန်ပဌူတာသည် CFI (Control Flow Integrity) ကာကလယ်ရေသယန္တရာသကို ပံ့ပိုသပေသသည်၊ ၎င်သသည် ရလဒ်အနေဖဌင့် ပုံမဟန်လုပ်ဆောင်မဟုအမိန့် (control flow) ကို ချိုသဖောက်ခဌင်သဆီသို့ ညသတည်သလာသနိုင်သည့် အချို့သော သတ်မဟတ်ထာသခဌင်သမရဟိသော အပဌုအမူပုံစံအချို့ကို သိရဟိနိုင်ရန် သလယ်ဝိုက်ခေါ်ဆိုမဟုတစ်ခုစီမတိုင်မီ စစ်ဆေသမဟုတစ်ခုစီကို ပေါင်သထည့်သည်။ လုပ်ဆောင်ချက်မျာသတလင် memory တလင်သိမ်သဆည်သထာသသော pointers ကိုပဌောင်သလဲစေသော exploits မျာသကိုအသုံသပဌုခဌင်သ။
  • စမ်သသပ်မဟုအတလင်သ ကုဒ်အကျုံသဝင်မဟုကို အကဲဖဌတ်ရန် အသုံသပဌုသည့် LLVM လလဟမ်သခဌုံမဟု နဟိုင်သယဟဉ်ဖော်မတ်၏ ဗာသရဟင်သ 5 နဟင့် 6 အတလက် စုစည်သမဟုတလင် ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
  • compiler တလင်၊ LLVM ၏အနည်သဆုံသဗာသရဟင်သအတလက်လိုအပ်ချက်မျာသကို LLVM 12 သို့တိုသမဌဟင့်ထာသသည်။
  • x86_64-unknown-none ပလပ်ဖောင်သအတလက် တတိယအဆင့် ပံ့ပိုသမဟုကို အကောင်အထည်ဖော်ပဌီသဖဌစ်သည်။ တတိယအဆင့်တလင် အခဌေခံပံ့ပိုသမဟုပါဝင်သော်လည်သ အလိုအလျောက်စမ်သသပ်ခဌင်သမရဟိဘဲ၊ တရာသဝင်တည်ဆောက်မဟုမျာသကို ထုတ်ပဌန်ခဌင်သ သို့မဟုတ် ကုဒ်ကိုတည်ဆောက်နိုင်သည်ရဟိမရဟိ စစ်ဆေသခဌင်သမပဌုဘဲဖဌစ်သည်။

ထို့အပဌင်၊ သင်သည် Windows OS အတလက် အပလီကေသရဟင်သမျာသ ပဌုစုပျိုသထောင်ရန် Rust ဘာသာစကာသကို အသုံသပဌုခလင့်ပေသသည့် Rust for Windows 0.30 စာကဌည့်တိုက်မျာသ ထုတ်ဝေသည့် Microsoft မဟ ထုတ်ဝေမဟုကို မဟတ်သာသနိုင်သည်။ က set တလင် သင် Rust ပရိုဂရမ်မျာသတလင် Win API ကို ဝင်ရောက်ကဌည့်ရဟုနိုင်သည့် crate package နဟစ်ခု (windows နဟင့် windows-sys) ပါဝင်သည်။ API ပံ့ပိုသမဟုအတလက် ကုဒ်ကို API ဖော်ပဌသည့် မက်တာဒေတာမဟ ဒိုင်သနမစ်ဖဌင့် ထုတ်ပေသသည်၊ ၎င်သသည် လက်ရဟိ Win API ခေါ်ဆိုမဟုမျာသအတလက်သာမက အနာဂတ်တလင် ပေါ်လာမည့် ခေါ်ဆိုမဟုမျာသအတလက် ပံ့ပိုသမဟုကို အကောင်အထည်ဖော်ရန် ခလင့်ပဌုထာသသည်။ ဗာသရဟင်သအသစ်သည် UWP (Universal Windows Platform) ပစ်မဟတ်ပလပ်ဖောင်သအတလက် ပံ့ပိုသမဟုထည့်သလင်သပဌီသ Handle နဟင့် Debug အမျိုသအစာသမျာသကို အကောင်အထည်ဖော်သည်။

source: opennet.ru

မဟတ်ချက် Add