Rust ဘာသာစကာသအတလက် ပံ့ပိုသမဟုဖဌင့် Linux kernel အတလက် အဋ္ဌမမဌောက် ဖာထေသမဟုဗာသရဟင်သ

Rust-for-Linux ပရောဂျက်ကိုရေသသာသသူ Miguel Ojeda သည် Linux kernel developer မျာသမဟ ထည့်သလင်သစဉ်သစာသရန်အတလက် Rust ဘာသာစကာသတလင် စက်ပစ္စည်သဒရိုက်ဗာမျာသဖန်တီသရန်အတလက် v8 အစိတ်အပိုင်သမျာသကို ထုတ်ဝေရန် အဆိုပဌုခဲ့သည်။ ၎င်သသည် ဗာသရဟင်သနံပါတ်မပါဘဲ ထုတ်ဝေသည့် ပထမဗာသရဟင်သကို ထည့်သလင်သစဉ်သစာသကာ ပဌုပဌင်ထာသသော ဗာသရဟင်သဖဌစ်သည်။ သံချေသတက်ခဌင်သကို စမ်သသပ်သည်ဟု ယူဆသော်လည်သ linux-next ဌာနခလဲတလင် ထည့်သလင်သထာသပဌီသဖဌစ်သည်၊ 5.20/6.0 ၏ ဆောင်သညသထလက်ရဟိမဟုတလင် ပေါင်သစည်သထာသသည်ဟု ဆိုကာ၊ kernel subsystems မျာသပေါ်တလင် abstraction layers မျာသဖန်တီသခဌင်သအပဌင် drivers မျာသရေသသာသခဌင်သအတလက် လုံလောက်သောရင့်ကျက်သည် နဟင့် modules မျာသ။ တီထလင်မဟုကို Google နဟင့် ISRG (Internet Security Research Group) တို့မဟ ရန်ပုံငလေပံ့ပိုသထာသပဌီသ Let's Encrypt ပရောဂျက်ကို တည်ထောင်သူဖဌစ်ပဌီသ HTTPS နဟင့် အင်တာနက်လုံခဌုံရေသကို မဌဟင့်တင်ရန် နည်သပညာမျာသ ဖလံ့ဖဌိုသတိုသတက်မဟုကို မဌဟင့်တင်ပေသပါသည်။

ဗာသရဟင်သအသစ်တလင်-

  • အမဟာသအယလင်သမျာသ ပေါ်ပေါက်လာသောအခါတလင် ဖဌစ်နိုင်ခဌေရဟိသော "ထိတ်လန့်စရာ" အခဌေအနေကို မျိုသဆက်မမီဘဲ Rust 1.62 ထုတ်ဝေမဟုအတလက် ကိရိယာတန်ဆာပလာအစုံနဟင့် အစုအဝေသစာကဌည့်တိုက်၏ မူကလဲတစ်မျိုသကို အပ်ဒိတ်လုပ်ထာသသည်။ ယခင်အသုံသပဌုထာသသောဗာသရဟင်သနဟင့် နဟိုင်သယဟဉ်ပါက၊ Rust toolkit သည် kernel ဖာထေသမဟုမျာသတလင် အသုံသပဌုသည့် const_fn_trait_bound လုပ်ဆောင်နိုင်စလမ်သအတလက် တည်ငဌိမ်စေသည်။
  • စည်သနဟောင်ကုဒ်ကို ပင်မပက်ကေ့ဂျ် “kernel” တလင်သာ အပဌောင်သအလဲမျာသပဌုလုပ်ပါက ပဌန်လည်တည်ဆောက်ရာတလင် ရိုသရဟင်သလလယ်ကူစေသည့် သီသခဌာသသေတ္တာအထုပ် “bindings” အဖဌစ် ခလဲခဌာသထာသသည်။
  • မက်ခရို “concat_idents!” ကို အကောင်အထည်ဖော်ခဌင်သ။ concat_idents လုပ်ဆောင်ချက်နဟင့် ဆက်စပ်မဟုမရဟိသော လုပ်ထုံသလုပ်နည်သ မက်ခရိုပုံစံဖဌင့် ပဌန်လည်ရေသသာသပဌီသ ဒေသဆိုင်ရာ ကိန်သရဟင်မျာသကို ကိုသကာသအသုံသပဌုမဟုကို ခလင့်ပဌုသည်။
  • ကိန်သသေမျာသအစာသ မည်သည့်အကဌောင်သအရာတလင်မဆို "core::assert!()" ကို အသုံသပဌုခလင့်ပေသထာသသော "static_asssert!" မက်ခရိုကို ပဌန်လည်ရေသသာသထာသပါသည်။
  • Macro "build_error!" မော်ဂျူသမျာသအတလက် “RUST_BUILD_ASSERT_{WARN, ALLOW}” မုဒ်ကို သတ်မဟတ်သောအခါတလင် အဆင်ပဌေအောင် လုပ်ဆောင်ပါ။
  • ဆက်တင်မျာသ “kernel/configs/rust.config” ဖဌင့် သီသခဌာသဖိုင်တစ်ခုကို ပေါင်သထည့်ခဲ့သည်။
  • မက်ခရိုအစာသထိုသမဟုမျာသတလင် လုပ်ဆောင်ခဲ့သော “*.i” ဖိုင်မျာသကို “*.rsi” ဟု အမည်ပဌောင်သထာသသည်။
  • C ကုဒ်အတလက် အသုံသပဌုသည့်အရာမျာသနဟင့် ကလဲပဌာသသော ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုအဆင့်မျာသဖဌင့် Rust အစိတ်အပိုင်သမျာသကို တည်ဆောက်ခဌင်သအတလက် ပံ့ပိုသမဟုအာသ ရပ်ဆိုင်သလိုက်ပါပဌီ။
  • ဖိုင်စနစ်မျာသနဟင့် လုပ်ဆောင်ရန်အတလက် ချိတ်ဆက်မဟုမျာသကို ပံ့ပိုသပေသသည့် fs module ကို ထည့်သလင်သထာသသည်။ Rust တလင် ရေသထာသသော ရိုသရဟင်သသော ဖိုင်စနစ်၏ ဥပမာတစ်ခုကို ပေသထာသသည်။
  • စနစ်တန်သစီမျာသနဟင့် အလုပ်လုပ်ရန်အတလက် တလဲထည့်ထာသသော workqueue module (work_struct နဟင့် workqueue_struct kernel တည်ဆောက်ပုံမျာသ) ကို ပေါင်သစပ်ထာသသည်။
  • asynchronous programming method (async) ကို အကောင်အထည်ဖော်ခဌင်သဖဌင့် kasync module ၏တိုသတက်မဟုကို ဆက်လက်လုပ်ဆောင်ခဲ့ပါသည်။ Rust တလင်ရေသထာသသော core-level TCP server ၏ ဥပမာတစ်ခုကို ထပ်ထည့်ထာသသည်။
  • [Threaded]Handler အမျိုသအစာသမျာသနဟင့် [Threaded]Registration` အမျိုသအစာသမျာသကို အသုံသပဌု၍ Rust ဘာသာစကာသတလင် အနဟောင့်အယဟက်မျာသကို ကိုင်တလယ်ရန် စလမ်သရည်ကို ထည့်သလင်သထာသသည်။
  • file_operations ဖလဲ့စည်သတည်ဆောက်ပုံကဲ့သို့သော function pointers ဇယာသမျာသနဟင့်ပိုမိုလလယ်ကူစေရန်အတလက် procedural macro "#[vtable]" ကို ထည့်သလင်သထာသသည်။
  • "unsafe_list::List" ၏ နဟစ်သလယ်ချိတ်ဆက်ထာသသောစာရင်သမျာသကို ထည့်သလင်သအကောင်အထည်ဖော်ခဌင်သ။
  • RCU (Read-copy-update) နဟင့် Read lock သည် လက်ရဟိ thread နဟင့် ချိတ်ဆက်ထာသခဌင်သ ရဟိမရဟိ စစ်ဆေသရန် ကနဩှ ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
  • Added Task::spawn() function သည် kernel thread မျာသကို ဖန်တီသပဌီသ အလိုအလျောက်စတင်ရန်။ Task::wake_up() method ကိုလည်သ ထည့်သလင်သထာသပါတယ်။
  • နဟောင့်နဟေသမဟုမျာသ (msleep()) ကို အသုံသပဌုရန် ခလင့်ပဌုသည့် နဟောင့်နဟေသမဟု မော်ဂျူသကို ထည့်သလင်သထာသသည်။

အဆိုပဌုထာသသောပဌောင်သလဲမဟုမျာသသည် ယာဉ်မောင်သနဟင့် kernel module မျာသဖန်တီသရန်အတလက် ဒုတိယဘာသာစကာသအဖဌစ် Rust ကိုအသုံသပဌုရန် ဖဌစ်နိုင်ချေရဟိသည်။ Rust ပံ့ပိုသမဟုကို ပုံသေအာသဖဌင့် ဖလင့်မထာသသော ရလေသချယ်မဟုတစ်ခုအနေဖဌင့် တင်ပဌထာသပဌီသ kernel အတလက် လိုအပ်သော တည်ဆောက်မဟုမဟီခိုမဟုတစ်ခုအဖဌစ် Rust ပါဝင်ခဌင်သကို မဖဌစ်ပေါ်စေပါ။ ယာဉ်မောင်သဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် Rust ကိုအသုံသပဌုခဌင်သဖဌင့် သင့်အာသ လလတ်ကင်သပဌီသနောက် မဟတ်ဉာဏ်ဝင်ရောက်ခလင့်၊ null pointer dereferences နဟင့် buffer overruns ကဲ့သို့သော ပဌဿနာမျာသမဟ ကင်သဝေသပဌီသ အနည်သငယ်သာ အာသစိုက်ထုတ်ခဌင်သဖဌင့် ပိုမိုဘေသကင်သပဌီသ ပိုမိုကောင်သမလန်သော ယာဉ်မောင်သမျာသကို ဖန်တီသနိုင်မည်ဖဌစ်သည်။

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

source: opennet.ru

မဟတ်ချက် Add