ပရိုဂရမ်သမင်သဘာသာစကာသ Rust 1.75 နဟင့် unikernel Hermit 0.6.7 ကို ဖဌန့်ချိသည်

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

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

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

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

  • "async fn" နဟင့် "-> impl Trait" သင်္ကေတမျာသကို သီသသန့်အင်္ဂါရပ်မျာသတလင် အသုံသပဌုရန် စလမ်သရည်ကို ထည့်သလင်သထာသသည်။ ဥပမာအာသဖဌင့်၊ “->impl Trait” ကို အသုံသပဌု၍ iterator တစ်ခုကို ပဌန်ပေသသည့် စရိုက်နည်သလမ်သကို သင်ရေသနိုင်သည်- trait Container { fn items(&self) -> impl Iterator; } impl MyContainer အတလက် ကလန်တိန်နာ { fn items(&self) -> impl Iterator { self.items.iter(.cloned() } }

    "async fn" ကို အသုံသပဌု၍ စရိုက်လက္ခဏာမျာသကို ဖန်တီသနိုင်သည်- trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // fn fetch(&self, url: Url) --> impl Future; }

  • ညလဟန်ကိန်သမျာသနဟင့် ဆက်စပ်သော byte အော့ဖ်ဆက်မျာသကို တလက်ချက်ရန်အတလက် API ကို ထပ်ထည့်ထာသသည်။ ပလိုင့်မျာသ (“*const T” နဟင့် “*mut T” တို့နဟင့် အလုပ်လုပ်သောအခါ)၊ ယခင်က၊ ၎င်သအတလက် “::add(1)” ကဲ့သို့သော တည်ဆောက်မဟုကို အသုံသပဌုနိုင်ပဌီသ “size_of::()” အရလယ်အစာသနဟင့် သက်ဆိုင်သည့် bytes အရေအတလက်ကို ပေါင်သထည့်နိုင်သည်။ API အသစ်သည် ကလုပ်ဆောင်ချက်ကို ရိုသရဟင်သစေပဌီသ အမျိုသအစာသမျာသကို "*const u8" သို့မဟုတ် "*mut u8" သို့ ညသစလာမချဘဲ byte offsets မျာသကို စီမံခန့်ခလဲနိုင်စေပါသည်။
    • pointer::byte_add
    • ညလဟန်ပဌချက်-:byte_offset
    • ညလဟန်ပဌချက်-:byte_offset_from
    • ညလဟန်ပဌချက်-:byte_sub
    • ညလဟန်ပဌချက်-:wrapping_byte_add
    • ညလဟန်ပဌချက်-:wrapping_byte_offset
    • ညလဟန်ပဌချက်-:wrapping_byte_sub
  • rustc compiler ၏ စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ရန် ဆက်လက်လုပ်ဆောင်ခဲ့သည်။ Post-link အဆင့်တလင် လုပ်ဆောင်ပဌီသ ကဌိုတင်ပဌင်ဆင်ထာသသော လုပ်ဆောင်ချက်ပရိုဖိုင်မဟ အချက်အလက်မျာသကို အသုံသပဌုသည့် BOLT optimizer ကို ပေါင်သထည့်ထာသသည်။ BOLT ကိုအသုံသပဌုခဌင်သသည် ပရိုဆက်ဆာ cache ကိုပိုမိုထိရောက်စလာအသုံသပဌုရန်အတလက် librustc_driver.so စာကဌည့်တိုက်ကုဒ်၏အပဌင်အဆင်ကိုပဌောင်သလဲခဌင်သဖဌင့် compiler လည်ပတ်မဟုကို 2% ခန့်မဌန်ဆန်စေသည်။

    LLVM တလင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ အရည်အသလေသကို မဌဟင့်တင်ရန် "-Ccodegen-units=1" ရလေသချယ်မဟုဖဌင့် rustc compiler ကို တည်ဆောက်ခဌင်သ ပါဝင်သည်။ လုပ်ဆောင်ခဲ့သော စမ်သသပ်မဟုမျာသသည် “-Ccodegen-units=1” တည်ဆောက်မဟုတလင် ခန့်မဟန်သခဌေ 1.5% ဖဌင့် စလမ်သဆောင်ရည် မဌင့်တက်လာသည်ကို ပဌသသည်။ ထပ်လောင်သ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို x86_64-unknown-linux-gnu ပလပ်ဖောင်သအတလက်သာ ပုံမဟန်အာသဖဌင့် ဖလင့်ထာသသည်။

    Rust တလင်ရေသသာသထာသသော Android ပလပ်ဖောင်သအစိတ်အပိုင်သမျာသ၏တည်ဆောက်ချိန်ကိုလျဟော့ချရန်အတလက်ယခင်ဖော်ပဌထာသသောပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသကို Google မဟစမ်သသပ်ခဲ့သည်။ Android ကိုတည်ဆောက်သောအခါ “-C codegen-units=1” ကိုအသုံသပဌုခဌင်သဖဌင့် toolkit ၏အရလယ်အစာသကို 5.5% လျဟော့ချနိုင်ပဌီသ ၎င်သ၏စလမ်သဆောင်ရည်ကို 1.8% တိုသမဌဟင့်နိုင်စေကာ toolkit ၏တည်ဆောက်ချိန်သည် နဟစ်ဆနီသပါသတိုသလာသည်။

    လင့်ခ်အချိန် အမဟိုက်စုဆောင်သခဌင်သ (“--gc-sections”) ကို ဖလင့်ခဌင်သဖဌင့် စလမ်သဆောင်ရည် 1.9% အထိ ချိတ်ဆက်မဟု အချိန်ပိုကောင်သအောင် လုပ်ဆောင်ခဌင်သ (LTO) 7.7% အထိ နဟင့် ပရိုဖိုင်-အခဌေခံ ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုမျာသ (PGO) 19.8% အထိ ရရဟိစေခဲ့သည်။ နောက်ဆုံသတလင်၊ တည်ဆောက်မဟုအမဌန်နဟုန်သ 24.7% အထိ တိုသမဌဟင့်နိုင်စေသည့် BOLT utility ကို အသုံသပဌု၍ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမျာသကို အသုံသချခဲ့သော်လည်သ toolkit ၏အရလယ်အစာသသည် 10.9% တိုသလာသည်။

    ပရိုဂရမ်သမင်သဘာသာစကာသ Rust 1.75 နဟင့် unikernel Hermit 0.6.7 ကို ဖဌန့်ချိသည်

  • API ၏ အစိတ်အပိုင်သအသစ်ကို တည်ငဌိမ်သောအမျိုသအစာသသို့ ရလဟေ့ထာသပဌီသ၊ နည်သလမ်သမျာသနဟင့် စရိုက်လက္ခဏာမျာသကို အကောင်အထည်ဖော်ရာတလင် တည်ငဌိမ်အောင်ပဌုလုပ်ထာသသည်-
    • ပဌည်တော်သာ*::from_ptr
    • FileTimes
    • FileTimesExt
    • ဖိုင်-:set_modified
    • ဖိုင်-:set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • ရလေသချယ်မဟု-:as_slice
    • ရလေသချယ်မဟု-:as_mut_slice
    • pointer::byte_add
    • ညလဟန်ပဌချက်-:byte_offset
    • ညလဟန်ပဌချက်-:byte_offset_from
    • ညလဟန်ပဌချက်-:byte_sub
    • ညလဟန်ပဌချက်-:wrapping_byte_add
    • ညလဟန်ပဌချက်-:wrapping_byte_offset
    • ညလဟန်ပဌချက်-:wrapping_byte_sub
  • ကိန်သသေမျာသအစာသ မည်သည့်အကဌောင်သအရာတလင်မဆို ၎င်သကိုအသုံသပဌုရန် ဖဌစ်နိုင်ခဌေကို ဆုံသဖဌတ်ပေသသည့် "const" attribute ကို လုပ်ဆောင်ချက်မျာသတလင် အသုံသပဌုသည်-
    • Ipv6Addr::to_ipv4_mapped
    • Uninit::assume_init_read ဖဌစ်နိုင်ပါတယ်။
    • Uninit::သုညဖဌစ်နိုင်သည်။
    • mem :: ခလဲခဌာသဆက်ဆံသည်။
    • mem :: သုည
  • ပံ့ပိုသမဟုတတိယအဆင့်ကို csky-unknown-linux-gnuabiv2hf၊ i586-unknown-netbsd နဟင့် mipsel-unknown-netbsd ပလပ်ဖောင်သမျာသအတလက် အကောင်အထည်ဖော်ခဲ့သည်။ တတိယအဆင့်တလင် အခဌေခံပံ့ပိုသမဟုပါဝင်သော်လည်သ အလိုအလျောက်စမ်သသပ်ခဌင်သမရဟိဘဲ၊ တရာသဝင်တည်ဆောက်မဟုမျာသကို ထုတ်ပဌန်ခဌင်သ သို့မဟုတ် ကုဒ်ကိုတည်ဆောက်နိုင်သည်ရဟိမရဟိ စစ်ဆေသခဌင်သမပဌုဘဲဖဌစ်သည်။

ထို့အပဌင်၊ Rust ဘာသာစကာသဖဌင့် ရေသသာသထာသသော အထူသပဌု kernel (unikernel) ကို တီထလင်ထာသသည့် Hermit ပရောဂျက်၏ ဗာသရဟင်သအသစ်ကို မဟတ်သာသနိုင်ပဌီသ၊ အပိုအလလဟာမျာသမပါဘဲ ကိုယ်တိုင်ပါရဟိသော အပလီကေသရဟင်သမျာသတည်ဆောက်ခဌင်သအတလက် ကိရိယာမျာသကို ပံ့ပိုသပေသသည့် Hermit ပရောဂျက်၏ ဗာသရဟင်သအသစ်ကို မဟတ်သာသနိုင်ပါသည်။ နဟင့် operating system မရဟိဘဲ။ တည်ဆောက်သောအခါတလင်၊ အပလီကေသရဟင်သသည် OS kernel နဟင့် system libraries တို့နဟင့် ချိတ်ဆက်ခဌင်သမပဌုဘဲ လိုအပ်သောလုပ်ဆောင်နိုင်စလမ်သအာသလုံသကို သီသခဌာသအကောင်အထည်ဖော်ပေသသည့် စာကဌည့်တိုက်တစ်ခုနဟင့် တည်ငဌိမ်စလာချိတ်ဆက်ထာသသည်။ ပရောဂျက်ကုဒ်ကို Apache 2.0 နဟင့် MIT လိုင်စင်မျာသအောက်တလင် ဖဌန့်ဝေထာသသည်။ စည်သဝေသပလဲသည် Rust၊ Go၊ Fortran၊ C နဟင့် C++ ဖဌင့် ရေသသာသထာသသော အပလီကေသရဟင်သမျာသကို သီသသန့်လုပ်ဆောင်ခဌင်သအတလက် ပံ့ပိုသထာသသည်။ အဆိုပါပရောဂျက်သည် QEMU နဟင့် KVM ကို အသုံသပဌု၍ Hermit ကိုဖလင့်ရန်ခလင့်ပဌုသည့် ၎င်သ၏ကိုယ်ပိုင် bootloader ကိုတီထလင်နေပါသည်။

source: opennet.ru

မဟတ်ချက် Add