Iphrojekthi ye-Wasmer ikhiphe ukukhululwa kwayo kwesibili okukhulu, ithuthukisa isikhathi sokusebenza sokwenza amamojula e-WebAssembly angasetshenziswa ukudala izinhlelo zokusebenza zomhlaba wonke ezingasebenza ezinhlelweni zokusebenza ezihlukene, kanye nokusebenzisa ikhodi engathenjwa ngokuzihlukanisa. Ikhodi yephrojekthi ibhalwe ngeRust futhi isatshalaliswa ngaphansi kwelayisensi ye-MIT.
Ukuphatheka kufinyelelwa ngokuhlanganisa ikhodi yohlelo lokusebenza kwikhodi emaphakathi ye-WebAssembly yezinga eliphansi, engasebenza kunoma iyiphi i-OS noma ishumekwe ezinhlelweni kwezinye izilimi zokuhlela. Izinhlelo ziyiziqukathi ezingasindi ezisebenzisa i-WebAssembly pseudocode. Lezi ziqukathi aziboshiwe ohlelweni lokusebenza futhi zingafaka ikhodi ekuqaleni ebhalwe nganoma yiluphi ulimi lokuhlela. Ikhithi yamathuluzi ye-Emscripten ingasetshenziswa ukuhlanganisa ku-WebAssembly. Ukuze uhumushe i-WebAssembly ibe ikhodi yomshini yesikhulumi samanje, isekela ukuxhunywa kwezindawo ezingemuva ezihlanganisiwe (Singlepass, Cranelift, LLVM) nezinjini (zisebenzisa i-JIT noma ukukhiqizwa kwekhodi yomshini).
Ukulawulwa kokufinyelela nokusebenzisana nohlelo kunikezwa kusetshenziswa i-WASI (WebAssembly System Interface) API, ehlinzeka ngezindawo zokusebenzelana zezinhlelo zokusebenza ngamafayela, amasokhethi kanye neminye imisebenzi ehlinzekwa isistimu yokusebenza. Izicelo zihlukanisiwe kusistimu eyinhloko endaweni ye-sandbox futhi zinokufinyelela kuphela ekusebenzeni okumenyezelwe (indlela yokuvikela esekelwe ekulawuleni amandla - ngezenzo ngesisetshenziswa ngasinye (amafayela, izinkomba, amasokhethi, amakholi esistimu, njll.), isicelo kumele sinikezwe amandla afanele).
Ukuze uqalise isiqukathi se-WebAssembly, vele ufake i-Wasmer ohlelweni lwesikhathi sokusebenza, oluza ngaphandle kokuncika kwangaphandle (βcurl https://get.wasmer.io -sSfL | shβ), bese uqalisa ifayela elidingekayo (βwasmer test.wasmβ ). Izinhlelo zisatshalaliswa ngendlela yamamojula avamile e-WebAssembly, angaphathwa kusetshenziswa umphathi wephakheji we-WAPM. I-Wasmer iyatholakala futhi njengomtapo wolwazi ongasetshenziswa ukushumeka ikhodi ye-WebAssembly ku-Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, kanye nezinhlelo ze-Java.
Inkundla ikuvumela ukuthi ufinyelele ukusebenza kokwenziwa kohlelo lokusebenza eduze nemihlangano yomdabu. Usebenzisa iNative Object Engine yemojula ye-WebAssembly, ungakwazi ukukhiqiza ikhodi yomshini (βi-wasmer compile -nativeβ ukuze ukhiqize amafayela ento ahlanganisiwe .so, .dylib kanye .dll), okudinga isikhathi esincane sokusebenza ukuze isebenze, kodwa igcine konke ukuhlukaniswa kwe-sandbox izici. Kungenzeka ukuhlinzeka ngezinhlelo esezihlanganiswe ngaphambili nge-Wasmer eyakhelwe ngaphakathi. I-Rust API ne-Wasm-C-API ihlinzekwa ngokudala izengezo nezandiso.
Ushintsho olubalulekile kunombolo yenguqulo ye-Wasmer luhlotshaniswa nokwethulwa kwezinguquko ezingahambelani ku-API yangaphakathi, lokho, ngokusho konjiniyela, okungeke kuthinte u-99% wabasebenzisi benkundla. Phakathi kwezinguquko ezinqamula ukuhambisana, kukhona futhi ushintsho kufomethi yamamojula e-Serialized Wasm (amamojula ahlelwe ku-Wasmer 1.0 ngeke akwazi ukusetshenziswa ku-Wasmer 2.0). Ezinye izinguquko:
- Ukusekela imiyalelo ye-SIMD (Imiyalo Eyodwa, Idatha Eningi), okuvumela ukufana kokusebenza kwedatha. Izindawo lapho ukusetshenziswa kwe-SIMD kungathuthukisa kakhulu ukusebenza kuhlanganisa ukufunda komshini, ukubhala ngekhodi kwevidiyo nokuqopha, ukucutshungulwa kwesithombe, ukulingisa inqubo yomzimba, kanye nokukhohliswa kwezithombe.
- Ukusekelwa kwezinhlobo zereferensi, okuvumela amamojula we-Wasm ukuthi afinyelele ulwazi kwamanye amamojula noma endaweni engaphansi.
- Ukuthuthukiswa kokusebenza okubalulekile kwenziwe. Isivinini sesikhathi sokusebenza se-LLVM esinezinombolo zamaphuzu antantayo sikhuphuke cishe ngo-50%. Izingcingo ezisebenzayo zisheshiswe kakhulu ngokunciphisa izimo ezidinga ukufinyelela ku-kernel. Ukusebenza kwejeneretha yekhodi ye-Cranelift kukhuphuke ngo-40%. Isikhathi esincishisiwe sokukhishwa kwedatha.
- Ukuze ubonise ngokunembe kakhudlwana ingqikithi, amagama ezinjini ashintshiwe: I-JIT β Universal, Native β Dylib (Dynamic Library), Ifayela Lento β I-StaticLib (I-Static Library).
Source: opennet.ru