Mozilla ပရောဂျက်မှ တည်ထောင်ထားသော Rust 1.99 ပရိုဂရမ်ဘာသာစကားကို လွတ်လပ်သော အကျိုးအမြတ်မယူသော Rust ဖောင်ဒေးရှင်း၏ ပံ့ပိုးကူညီမှုဖြင့် ယခု ထုတ်ဝေလိုက်ပါပြီ။ ဘာသာစကားသည် မှတ်ဉာဏ်ဘေးကင်းရေးကို အာရုံစိုက်ပြီး အမှိုက်စုဆောင်းသူနှင့် runtime ကိုအသုံးမပြုဘဲ လုပ်ဆောင်နေစဉ်တွင် လုပ်ဆောင်စရာများ ပြိုင်ဆိုင်မှုမြင့်မားစေရန်အတွက် ကိရိယာများကို ပံ့ပိုးပေးသည် (runtime သည် စံစာကြည့်တိုက်၏ အခြေခံအစပျိုးခြင်းနှင့် ပြုပြင်ထိန်းသိမ်းမှုသို့ လျှော့ချထားသည်)။
Rust ရဲ့ memory management နည်းလမ်းတွေကို pointer manipulation မှာ error တွေကို ဖယ်ရှားပြီး free လုပ်ပြီးနောက် memory ကို access လုပ်တာ၊ null pointer တွေကို dereferencing လုပ်တာ၊ buffer overrun လုပ်တာ စတဲ့ low-level memory management ကနေ ပေါ်ပေါက်လာတဲ့ ပြဿနာတွေကို ကာကွယ်ဖို့ ဒီဇိုင်းထုတ်ထားပါတယ်။ ဒီ project က libraries တွေကို distribute လုပ်ဖို့၊ build တွေကို လွယ်ကူချောမွေ့စေဖို့နဲ့ dependencies တွေကို manage လုပ်ဖို့ Cargo package manager ကို တီထွင်နေပါတယ်။ crates.io repository ကို libraries တွေကို hosting အတွက် ထိန်းသိမ်းထားပါတယ်။
ကိုးကားစစ်ဆေးခြင်း၊ အရာဝတ္တုပိုင်ဆိုင်မှုကိုခြေရာခံခြင်း၊ အရာဝတ္တုသက်တမ်းကိုခြေရာခံခြင်း (scopes) ကိုခြေရာခံခြင်းနှင့် ကုဒ်လုပ်ဆောင်နေစဉ်အတွင်း မမ်မိုရီဝင်ရောက်ခြင်း၏မှန်ကန်မှုကို အကဲဖြတ်ခြင်းများမှတစ်ဆင့် Memory safety ကို Rust တွင် ပံ့ပိုးပေးပါသည်။ Rust သည် ကိန်းပြည့်ပြည့်လျှံမှုများကို အကာအကွယ်ပေးသည်၊ အသုံးမပြုမီ ပြောင်းလဲနိုင်သောတန်ဖိုးများကို မဖြစ်မနေစတင်လုပ်ဆောင်ရန် လိုအပ်သည်၊ စံဒစ်ဂျစ်တိုက်တွင် ပိုမိုကောင်းမွန်သော အမှားများကို ကိုင်တွယ်ရန်၊ ပုံသေအားဖြင့် မပြောင်းလဲနိုင်သော ကိုးကားချက်များနှင့် ကိန်းရှင်များ၏ သဘောတရားကို ကျင့်သုံးသည်၊ ယုတ္တိအမှားများကို အနည်းဆုံးဖြစ်စေရန် ခိုင်လုံသောအငြိမ်စာရိုက်ခြင်းကို ပံ့ပိုးပေးပါသည်။
အဓိက တီထွင်ဆန်းသစ်မှုများ-
- Rust က အခုဆိုရင် C ပရောဂျက်များ (C ABI) မှ ခေါ်ဆိုမှုအတွက် export လုပ်ထားတဲ့ variadic function တွေကို ဖန်တီးနိုင်ပါပြီ။ အဲဒီလို function တွေမှာ parameter list ရဲ့ နောက်ဆုံး element က "..." construct ဖြစ်နိုင်ပါတယ်။ ဒါကို Rust မှာ C မှာ va_list နဲ့ အလားတူ အလုပ်လုပ်တဲ့ VaList ဆိုတဲ့ အထူးအမျိုးအစားကို အသုံးပြုပြီး ကိုင်တွယ်ပါတယ်။ unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; b = မလုံခြုံဟု သတ်မှတ်ပါ { args.next_arg:: () }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- Layout::for_value_raw၊ mem::size_of_val_raw နှင့် mem::align_of_val_raw လုပ်ဆောင်ချက်များကို တည်ငြိမ်အောင် ပြုလုပ်ထားပြီး၊ data reference များ ဖန်တီးရန် မလိုအပ်ဘဲ slices ကဲ့သို့သော dynamically sized types များကို အသုံးပြုသည့်အခါတွင် raw pointers များ၏ လုံခြုံသော အရွယ်အစား ချိန်ညှိမှုနှင့် ချိန်ညှိမှုကို ခွင့်ပြုပါသည်။
- ယခုအခါ စာရွက်စာတမ်းတွင် Box::leak (round-trip unleaking) သို့ ခေါ်ဆိုခြင်းဖြင့် statically ရည်ညွှန်းထားသော မှတ်ဉာဏ်ကို လွတ်မြောက်စေခြင်းကို ရှောင်ကြဉ်ရန် အကြံပြုထားပြီး၊ ဤလုပ်ဆောင်ချက်သည် အနာဂတ် compiler optimization များနှင့် pluggable memory allocation ယန္တရားများနှင့် သဟဇာတမဖြစ်ခြင်းကြောင့် ပြဿနာများ ဖြစ်ပေါ်စေနိုင်သောကြောင့်ဖြစ်သည်။ ယာယီပိုင်ဆိုင်မှုလွှဲပြောင်းမှုများအတွက် static reference တစ်ခုဖန်တီးမည့်အစား၊ ဥပမာ Box::into_non_null သို့ ခေါ်ဆိုခြင်းဖြင့် raw pointers များကို အသုံးပြုရန် အကြံပြုထားသည်။
- API ၏ အစိတ်အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ ရွှေ့ထားပြီး၊ နည်းလမ်းများနှင့် စရိုက်လက္ခဏာများကို အကောင်အထည်ဖော်ရာတွင် တည်ငြိမ်အောင်ပြုလုပ်ထားသည်-
- Box<[T; N]> အတွက် IntoIterator
- &Box<[T; N]> အတွက် IntoIterator
- &mut Box<[T; N]> အတွက် IntoIterator
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::val_raw ရဲ့ အရွယ်အစား
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- StepBy အတွက် FusedIterator
- std::fs::သတ်မှတ်ချိန်များ
- std::fs::လိုက်မမီသောအချိန်များကို သတ်မှတ်ပါ
- ကုန်တင်ပက်ကေ့ဂျ်မန်နေဂျာတွင် ယခုအခါ "dev" ပရိုဖိုင်နှင့်ဆင်တူသော built-in "debug" ပရိုဖိုင်အသစ်တစ်ခုပါရှိသည် (debug နှင့် ဖွံ့ဖြိုးတိုးတက်မှုစွမ်းရည်များကို အနာဂတ်တွင် ခွဲထုတ်ရန် စီစဉ်ထားသည်)။ CI တွင်တည်ဆောက်သည့်အခါ Incremental compilation ကို default အနေဖြင့်ပိတ်ထားသည်။
- riscv64-unknown-linux-musl target platform ကို support level 2 သို့ ရွှေ့ပြောင်းလိုက်ပါပြီ၊ ၎င်းသည် build guarantee ပေးသော်လည်း test suite passing guarantee မရှိပါ။
ထို့အပြင်၊ Rust နှင့် ဆက်စပ်သော မကြာသေးမီက ကြေညာခဲ့သော ပရောဂျက်များနှင့် ပွဲများကို မီးမောင်းထိုးပြလိုပါသည်-
- Microsoft သည် Rust ကို Tier 1 ဘာသာစကားသို့ အဆင့်မြှင့်တင်ထားပြီး ကုမ္ပဏီအတွင်း ဖွံ့ဖြိုးတိုးတက်မှုအဆင့်အားလုံးတွင် အပြည့်အဝပံ့ပိုးမှုပေးမည်ဖြစ်သည်။ ယခင်က C++၊ C# နှင့် TypeScript အတွက် Tier 1 ပံ့ပိုးမှုကို ပေးခဲ့သည်။ Rust ကို Microsoft repositories ၁၀၀ ကျော်တွင် အသုံးပြုပြီးဖြစ်သည်။ အခြားအရာများအပြင်၊ Rust components များကို Microsoft 365 နှင့် Copilot ကဲ့သို့သော ထုတ်ကုန်များတွင် အသုံးပြုပြီးဖြစ်ပြီး၊ rustc compiler ကိုအခြေခံသည့် Rust အတွက် သီးသန့် backend တစ်ခုဖြစ်သည့် rustc_codegen_utc ကို MSVC compiler အတွက် တီထွင်ထုတ်လုပ်ထားသည်။
Microsoft က Rust ကို လုံခြုံရေးအတွက် အရေးပါသော ကုဒ်များကို အားကောင်းစေရန် အသုံးပြုခြင်း၏ အဓိကရည်ရွယ်ချက်ကို ကိုးကားဖော်ပြပါသည်။ Microsoft Azure CTO ၏ အဆိုအရ အားနည်းချက်အားလုံး၏ ၇၀% ခန့်သည် Windows မှတ်ဉာဏ်စီမံခန့်ခွဲမှုပြဿနာများကြောင့် ဖြစ်ပေါ်လာပြီး Rust ကိုအသုံးပြုခြင်းဖြင့် ရှောင်ရှားနိုင်ပါသည်။
- Google က kernel ကနေ ဖယ်ရှားလိုက်ပါပြီ။ Linux C ဖြင့်ရေးသားထားသော Binder IPC အကောင်အထည်ဖော်မှုဟောင်းကို Rust တွင်ပြန်လည်ရေးသားထားသော Binder IPC driver အသစ်ဖြင့်အစားထိုးလိုက်ခြင်းဖြင့် ရပ်ဆိုင်းလိုက်ပါသည်။ ၎င်း၏တည်ရှိမှု ၁၅ နှစ်တာကာလအတွင်း driver ဟောင်းသည် သိသာထင်ရှားသော နည်းပညာဆိုင်ရာအကြွေးများနှင့် ရှုပ်ထွေးမှုများစွာကို စုဆောင်းထားခဲ့ပြီး bug ထောက်လှမ်းခြင်း၊ ပြုပြင်ထိန်းသိမ်းခြင်းနှင့် အင်္ဂါရပ်အသစ်များထည့်သွင်းခြင်းတို့ကို အဟန့်အတားဖြစ်စေခဲ့ကြောင်း သတိပြုမိပါသည်။ Rust ရှိ Binder IPC driver ကို အဓိက driver အဖြစ် သတ်မှတ်ထားပြီး စမ်းသပ် development အဖြစ် မတင်ပြတော့ပါ။
- Tor toolkit ရဲ့ Rust အကောင်အထည်ဖော်မှုတစ်ခုဖြစ်တဲ့ Arti 2.7.0 ကို ထွက်ရှိပါပြီ။ Arti ရဲ့ code base ဟာ C အကောင်အထည်ဖော်မှုကို လုံးဝအစားထိုးနိုင်တဲ့အဆင့်ကို ရောက်ရှိသွားတဲ့အခါ Tor developer တွေက Arti ကို အဓိက Tor အကောင်အထည်ဖော်မှုအဖြစ် ထားရှိဖို့နဲ့ C အကောင်အထည်ဖော်မှုရဲ့ ပြုပြင်ထိန်းသိမ်းမှုကို တဖြည်းဖြည်း အဆင့်လိုက် လျှော့ချဖို့ ရည်ရွယ်ထားပါတယ်။ ဗားရှင်းအသစ်မှာ relay တွေနဲ့ ဆာဗာများ စာရွက်စာတမ်း parsing၊ directory server mirroring support နှင့် DNS traffic processing တို့နှင့် ဆက်စပ်နေသော Directory Authority (DA) လုပ်ဆောင်ချက်။ configuration ပြောင်းလဲမှုများနှင့် စစ်ဆေးခြင်းများအတွက် RPC အကောင်အထည်ဖော်မှုကို ထည့်သွင်းထားသည်။ အားနည်းချက်များစွာကို ပြင်ဆင်ပြီးဖြစ်သည်—onion service administrator များအနေဖြင့် ၎င်းတို့၏ system များကို အရေးတကြီး update လုပ်ရန် အကြံပြုထားသည်။
source: opennet.ru
