Wasmer ပရောဂျက်သည် ၎င်း၏ဒုတိယအကြီးစားထွက်ရှိမှုကို ထုတ်ပြန်ခဲ့ပြီး၊ မတူညီသောလည်ပတ်မှုစနစ်များတွင်လည်ပတ်နိုင်သည့်စကြာဝဠာအပလီကေးရှင်းများကိုဖန်တီးရန်အသုံးပြုနိုင်သည့် WebAssembly modules များကိုလုပ်ဆောင်ရန်အတွက် runtime ကိုဖန်တီးကာ၊ ကွဲပြားသောလည်ပတ်မှုစနစ်များတွင်အလုပ်လုပ်နိုင်သည့်အပြင်မယုံကြည်ရသောကုဒ်များကိုအထီးကျန်တွင်လုပ်ဆောင်ရန်ဖြစ်သည်။ ပရောဂျက်ကုဒ်ကို Rust ဖြင့် ရေးသားထားပြီး MIT လိုင်စင်အောက်တွင် ဖြန့်ဝေထားသည်။
မည်သည့် OS တွင်မဆို လုပ်ဆောင်နိုင်သော သို့မဟုတ် အခြားသော ပရိုဂရမ်းမင်းဘာသာစကားများဖြင့် ပရိုဂရမ်များတွင် ထည့်သွင်းနိုင်သည့် အဆင့်နိမ့် WebAssembly အလယ်အလတ်ကုဒ်အဖြစ် အပလီကေးရှင်းကုဒ်ကို စုစည်းခြင်းဖြင့် သယ်ဆောင်ရလွယ်ကူမှု ရရှိသည်။ ပရိုဂရမ်များသည် WebAssembly pseudocode ကိုအသုံးပြုသည့် ပေါ့ပါးသောကွန်တိန်နာများဖြစ်သည်။ ဤကွန်တိန်နာများသည် လည်ပတ်မှုစနစ်နှင့် ချိတ်ဆက်ခြင်းမရှိသည့်အပြင် မည်သည့်ပရိုဂရမ်းမင်းဘာသာစကားဖြင့်မဆို မူရင်းရေးသားထားသော ကုဒ်များ ပါဝင်နိုင်သည်။ Emscripten toolkit ကို WebAssembly သို့ compile လုပ်ရန် အသုံးပြုနိုင်ပါသည်။ WebAssembly ကို လက်ရှိပလက်ဖောင်း၏ စက်ကုဒ်သို့ ဘာသာပြန်ရန်၊ ၎င်းသည် အမျိုးမျိုးသော စုစည်းမှု နောက်ကွယ်တွင် (Singlepass၊ Cranelift၊ LLVM) နှင့် အင်ဂျင်များ (JIT သို့မဟုတ် စက်ကုဒ်ထုတ်လုပ်ခြင်းကို အသုံးပြု) ချိတ်ဆက်မှုကို ပံ့ပိုးပေးပါသည်။
လည်ပတ်မှုစနစ်မှ ပံ့ပိုးပေးသည့် ဖိုင်များ၊ ဆော့ဖ်ဝဲများနှင့် အခြားလုပ်ဆောင်ချက်များနှင့် လုပ်ဆောင်ရန်အတွက် ပရိုဂရမ်းမင်းအင်တာဖေ့စ်များကို ပံ့ပိုးပေးသည့် WASI (WebAssembly System Interface) API ကို အသုံးပြု၍ စနစ်နှင့် ဝင်ရောက်ထိန်းချုပ်မှုနှင့် အပြန်အလှန်တုံ့ပြန်မှုများကို ပံ့ပိုးပေးပါသည်။ အပလီကေးရှင်းများသည် sandbox ပတ်ဝန်းကျင်ရှိ ပင်မစနစ်မှ သီးခြားခွဲထုတ်ထားပြီး ကြေညာထားသော လုပ်ဆောင်နိုင်စွမ်း (စွမ်းဆောင်ရည်စီမံခန့်ခွဲမှုအပေါ် အခြေခံသည့် လုံခြုံရေးယန္တရား - အရင်းအမြစ်တစ်ခုစီ (ဖိုင်များ၊ လမ်းညွှန်များ၊ ဆော့ဖ်ဝဲများ၊ စနစ်ခေါ်ဆိုမှုများ၊ စသည်ဖြင့်)၊ လုပ်ဆောင်ချက်များအတွက်၊ လျှောက်ထားရာတွင် သင့်လျော်သော အခွင့်အာဏာ ပေးရမည်။)
WebAssembly container တစ်ခုကို စတင်ရန်၊ ပြင်ပမှီခိုမှုမရှိဘဲ ထွက်လာသော Wasmer (“curl https://get.wasmer.io -sSfL |sh”) ကို ထည့်သွင်းပြီး လိုအပ်သောဖိုင် (“wasmer test.wasm” ကို ဖွင့်ပါ။ ) ပရိုဂရမ်များကို WAPM ပက်ကေ့ဂျ်မန်နေဂျာကို အသုံးပြု၍ စီမံခန့်ခွဲနိုင်သည့် ပုံမှန် WebAssembly module များပုံစံဖြင့် ဖြန့်ဝေထားသည်။ Wasmer သည် Rust၊ C/C++၊ C#၊ D၊ Python၊ JavaScript၊ Go၊ PHP၊ Ruby၊ Elixir နှင့် Java ပရိုဂရမ်များထဲသို့ WebAssembly ကုဒ်ကို မြှုပ်နှံရန် အသုံးပြုနိုင်သည့် စာကြည့်တိုက်တစ်ခုအဖြစ်လည်း ရရှိနိုင်ပါသည်။
ပလက်ဖောင်းသည် သင့်အား ဇာတိစည်းဝေးပွဲများနှင့် နီးစပ်သော အက်ပ်လီကေးရှင်းလုပ်ဆောင်မှု စွမ်းဆောင်ရည်ကို ရရှိစေရန် ခွင့်ပြုသည်။ WebAssembly module အတွက် Native Object Engine ကိုသုံးပြီး၊ သင်သည် precompiled .so, .dylib နှင့် .dll object ဖိုင်များကို ထုတ်လုပ်ရန်အတွက် စက်ကုဒ်ကို ထုတ်လုပ်နိုင်သည် ("wasmer compile -native" ) ကို run ရန် အချိန်အနည်းငယ်သာ လိုအပ်သော်လည်း sandbox ကို သီးခြားခွဲထားမှုအားလုံးကို ထိန်းသိမ်းထားသည်။ အင်္ဂါရပ်များ။ Built-in Wasmer ဖြင့် ကြိုတင်စုစည်းထားသော ပရိုဂရမ်များကို ထောက်ပံ့ပေးနိုင်သည်။ အပိုပရိုဂရမ်များနှင့် တိုးချဲ့မှုများကို ဖန်တီးရန်အတွက် Rust API နှင့် Wasm-C-API ကို ကမ်းလှမ်းထားသည်။
Wasmer ၏ ဗားရှင်းနံပါတ်တွင် သိသာထင်ရှားသောပြောင်းလဲမှုသည် ဆော့ဖ်ဝဲရေးသားသူများအဆိုအရ ပလက်ဖောင်းအသုံးပြုသူများ၏ 99% ကို သက်ရောက်မှုရှိမည်မဟုတ်သည့် internal API တွင် လိုက်ဖက်မှုမရှိသောပြောင်းလဲမှုများ၏နိဒါန်းနှင့်ဆက်စပ်နေသည်။ လိုက်ဖက်ညီမှုကို ပျက်ပြားစေသော အပြောင်းအလဲများထဲတွင် နံပါတ်စဉ်တပ်ထားသော Wasm မော်ဂျူးများ၏ ဖော်မတ်ပြောင်းလဲမှုလည်း ရှိသည် ( Wasmer 1.0 တွင် အမှတ်စဉ်ပြုထားသော မော်ဂျူးများကို Wasmer 2.0 တွင် အသုံးပြုနိုင်မည် မဟုတ်ပါ)။ အခြားပြောင်းလဲမှုများ-
- SIMD (Single Instruction၊ Multiple Data) ညွှန်ကြားချက်များကို ပံ့ပိုးပေးကာ ဒေတာလည်ပတ်မှုများကို ပြိုင်တူပြုလုပ်နိုင်စေပါသည်။ SIMD ကို အသုံးပြုခြင်းဖြင့် စွမ်းဆောင်ရည်ကို သိသာထင်ရှားစွာ မြှင့်တင်ပေးနိုင်သည့် နယ်ပယ်များတွင် စက်သင်ယူမှု၊ ဗီဒီယို ကုဒ်ဝှက်ခြင်းနှင့် ကုဒ်ပြောင်းခြင်း၊ ရုပ်ပုံလုပ်ဆောင်ခြင်း၊ ရုပ်ပိုင်းဆိုင်ရာ လုပ်ငန်းစဉ် သရုပ်ဖော်ခြင်းနှင့် ဂရပ်ဖစ် ခြယ်လှယ်ခြင်းတို့ ပါဝင်သည်။
- Wasm မော်ဂျူးများကို အခြား module များ သို့မဟုတ် နောက်ခံပတ်ဝန်းကျင်တွင် အချက်အလက်ရယူရန် ကိုးကားမှုအမျိုးအစားများအတွက် ပံ့ပိုးကူညီမှု။
- သိသာထင်ရှားသော စွမ်းဆောင်ရည်ကို ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ထားပါသည်။ floating point နံပါတ်များဖြင့် LLVM runtime ၏အမြန်နှုန်းသည် ခန့်မှန်းခြေ 50% တိုးလာခဲ့သည်။ kernel သို့ဝင်ရောက်ရန်လိုအပ်သည့်အခြေအနေများကိုလျှော့ချခြင်းဖြင့် Function ခေါ်ဆိုမှုများကို သိသိသာသာအရှိန်မြှင့်ထားပါသည်။ Cranelift ကုဒ်ဂျင်နရေတာ၏စွမ်းဆောင်ရည်သည် 40% တိုးလာခဲ့သည်။ data deserialization အချိန်ကို လျှော့ချပါ။
- အနှစ်သာရကို ပိုမိုတိကျစွာထင်ဟပ်စေရန်၊ အင်ဂျင်များ၏အမည်များကို ပြောင်းလဲခဲ့သည်- JIT → Universal၊ Native → Dylib (Dynamic Library)၊ Object File → StaticLib (Static Library)။
source: opennet.ru