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

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

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

  • အမဟာသအယလင်သမျာသ ဖဌစ်ပေါ်လာသည့်အခါ "ထိတ်လန့်စရာ" အခဌေအနေမဟ လလတ်မဌောက်နိုင်သည့် ကိရိယာအစုံနဟင့် ခလဲဝေသုံသစလဲသည့် ဒစ်ဂျစ်တိုက်၏ မူကလဲတစ်မျိုသကို Rust 1.60 ထုတ်ဝေမဟုသို့ အပ်ဒိတ်လုပ်ထာသပဌီသ kernel ဖာထေသမဟုမျာသတလင် အသုံသပဌုသည့် "maybe_uninit_extra" မုဒ်ကို တည်ငဌိမ်စေပါသည်။
  • စာတမ်သပဌုစုခဌင်သမဟ စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်နိုင်မဟု (စာရလက်စာတမ်သတလင် နမူနာအဖဌစ်လည်သ အသုံသပဌုသည့် စမ်သသပ်မဟုမျာသ) ကို kernel API နဟင့် ချိတ်ဆက်ထာသသော စမ်သသပ်မဟုမျာသကို အချိန်ကာလပဌောင်သလဲခဌင်သမဟတဆင့် kernel loading လုပ်နေစဉ် လုပ်ဆောင်ခဲ့သော KUnit စမ်သသပ်မဟုမျာသသို့ ပေါင်သထည့်ခဲ့သည်။
  • စမ်သသပ်မဟုမျာသသည် Rust kernel ကုဒ်ကဲ့သို့ Clippy linter သတိပေသချက် မဖဌစ်ပေါ်စေရန် လိုအပ်ချက်မျာသကို လက်ခံရရဟိထာသသည်။
  • ကလန်ရက်လုပ်ဆောင်ချက်မျာသဖဌင့် “net” module ၏ ကနညသအကောင်အထည်ဖော်မဟုကို အဆိုပဌုထာသသည်။ Rust ကုဒ်သည် Namespace (struct net kernel တည်ဆောက်ပုံအပေါ် အခဌေခံ၍)၊ SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) နဟင့် ၎င်သတို့၏ IPv6 equi ကဲ့သို့သော kernel ကလန်ရက်တည်ဆောက်ပုံမျာသသို့ ဝင်ရောက်နိုင်သည် .
  • kasync module ၏ပုံစံဖဌင့် အကောင်အထည်ဖော်သည့် အပဌိုင်အဆိုင် ပရိုဂရမ်သမင်သနည်သပညာမျာသ (async) အတလက် ကနညသပံ့ပိုသမဟုရဟိပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် TCP sockets မျာသကို ကိုင်တလယ်ရန် အညီအမျဟ ကုဒ်ကို ရေသနိုင်သည်- async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf) စောင့်ပါ?; n == 0 { return Ok(()); } stream.write_all(&buf[..n]).စောင့်ပါလာသ။ } }
  • ပေါင်သထည့်ထာသသော net::ကလန်ရက် ပက်ကက် စစ်ထုတ်မဟုမျာသကို ကဌိုသကိုင်ရန်အတလက် စစ်ထုတ်သည့် မော်ဂျူသ။ Rust ဘာသာစကာသတလင် စစ်ထုတ်မဟု အကောင်အထည်ဖော်မဟုဖဌင့် ဥပမာ rust_netfilter.rs ကို ထည့်ထာသသည်။
  • ပင်ထိုသရန်မလိုအပ်သော ရိုသရဟင်သသော mutex smutex::Mutex ကို ထည့်သလင်သအကောင်အထည်ဖော်ခဌင်သ။
  • သော့ကိုဘယ်တော့မဟမစောင့်ဘဲ NoWaitLock ကို ပေါင်သထည့်ထာသပဌီသ အခဌာသ thread တစ်ခုမဟ သိမ်သပိုက်ပါက ခေါ်ဆိုသူအာသ ရပ်တန့်မည့်အစာသ လော့ခ်ရယူရန် ကဌိုသပမ်သသောအခါတလင် အမဟာသအယလင်သတစ်ခုကို ဖဌစ်ပေါ်စေပါသည်။
  • idle လုပ်၍မရသော ကဏ္ဍမျာသသို့ အသုံသချရန် kernel တလင် raw_spinlock_t မဟသတ်မဟတ်ထာသသော RawSpinLock ကို ထည့်ထာသသည်။
  • အကိုသအကာသရေတလက်ခဌင်သယန္တရာသကို အသုံသပဌုသည့် အရာဝတ္ထုတစ်ခုအာသ ကိုသကာသရန်အတလက် ARef အမျိုသအစာသကို ထပ်လောင်သထည့်သည် (အမဌဲ-ပဌန်ရေတလက်သည်)။
  • GCC ရဟိ ဗိသုကာလက်ရာမျာသနဟင့် ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသကို ပံ့ပိုသပေသရန်အတလက် rustc ရဟိ rustc ရဟိ ကုဒ်ထုတ်လုပ်သူအဖဌစ် GCC ပရောဂျက်မဟ libgccjit စာကဌည့်တိုက်ကို အသုံသပဌုခလင့်ပဌုသည့် rustc_codegen_gcc နောက်ခံလူသည် GCC တလင် rustc compiler ကို bootstrapping လုပ်နိုင်စလမ်သကို အကောင်အထည်ဖော်ခဲ့သည်။ Compiler မဌဟင့်တင်ခဌင်သဆိုသည်မဟာ rustc compiler ကိုယ်တိုင်တည်ဆောက်ရန်အတလက် GCC-based code generator ကိုသုံသနိုင်သည်။ ထို့အပဌင်၊ မကဌာသေသမီက GCC 12.1 တလင် rustc_codegen_gcc မဟန်ကန်စလာအလုပ်လုပ်ရန် လိုအပ်သော libgccjit ကို ပဌင်ဆင်ခဌင်သမျာသ ပါဝင်သည်။ rustup utility ကို အသုံသပဌု၍ rustc_codegen_gcc ကို ထည့်သလင်သနိုင်စေရန် ပဌင်ဆင်မဟုမျာသ လုပ်ဆောင်နေပါသည်။
  • GCC ကိုအခဌေခံထာသသော Rust language compiler ကိုအကောင်အထည်ဖော်ခဌင်သဖဌင့် GCC frontend gccrs ၏တိုသတက်မဟုကိုမဟတ်သာသထာသသည်။ လက်ရဟိတလင် gccrs တလင် အချိန်ပဌည့် developer နဟစ်ညသရဟိသည်။

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

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

source: opennet.ru

မဟတ်ချက် Add