Morero oa Wasmer o lokolotse tokollo ea eona ea bobeli e kholo, e nts'etsapele nako ea ho sebetsa bakeng sa ho etsa li-module tsa WebAssembly tse ka sebelisoang ho theha lits'ebetso tsa bokahohleng tse ka sebetsang lits'ebetsong tse fapaneng tsa ts'ebetso, hammoho le ho tsamaisa khoutu e sa tšepahaleng ka thoko. Khoutu ea projeke e ngotsoe ka Rust mme e ajoa tlasa laesense ea MIT.
Ho nkeha habonolo ho finyelloa ka ho bokella khoutu ea kopo ho khoutu ea boemo bo tlase ea WebAssembly, e ka sebetsang ho OS efe kapa efe kapa ea kenngoa mananeong a lipuo tse ling tsa lenaneo. Mananeo ke lijana tse bobebe tse tsamaisang WebAssembly pseudocode. Lits'oants'o tsena ha lia tlamelloa ho sistimi ea ts'ebetso mme li ka kenyelletsa khoutu e ngotsoeng qalong ka puo efe kapa efe ea lenaneo. The Emscripten toolkit e ka sebelisoa ho bokella ho WebAssembly. Ho fetolela WebAssembly ho khoutu ea mochini oa sethala sa hajoale, e ts'ehetsa khokahano ea li-backend tse fapaneng tsa pokello (Singlepass, Cranelift, LLVM) le lienjine (tse sebelisang JIT kapa tlhahiso ea khoutu ea mochini).
Taolo ea phihlello le tšebelisano le sistimi e fanoa ho sebelisoa WASI (WebAssembly System Interface) API, e fanang ka li-interface tsa mananeo bakeng sa ho sebetsa le lifaele, li-sockets le mesebetsi e meng e fanoeng ke sistimi e sebetsang. Likopo li qheletsoe ka thoko ho sistimi e kholo tikolohong ea sandbox mme li na le phihlello ea ts'ebetso e phatlalalitsoeng (mokhoa oa ts'ireletso o ipapisitseng le taolo ea bokhoni - bakeng sa ts'ebetso ka lisebelisoa tsohle (lifaele, li-directory, li-sockets, mehala ea sistimi, jj.), kopo e tlameha ho fuoa matla a loketseng).
Ho qala setshelo sa WebAssembly, ho lekane ho kenya Wasmer runtime tsamaisong, e tlang ntle le ho itšetleha ka ntle ("curl https://get.wasmer.io -sSfL | sh"), 'me u tsamaise faele e hlokahalang ("teko ea wasmer). .wasm”). Mananeo a ajoa ka mokhoa oa li-module tse tloaelehileng tsa WebAssembly, tse ka laoloang ho sebelisoa mookameli oa sephutheloana sa WAPM. Wasmer e fumaneha hape e le laebrari e ka sebelisoang ho kenya khoutu ea WebAssembly ho Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, le mananeo a Java.
Sethala se u lumella ho fihlela ts'ebetso ea ts'ebetso e haufi le ea likopano tsa matsoalloa. U sebelisa Native Object Engine bakeng sa mojule oa WebAssembly, u ka hlahisa khoutu ea tlhaho ("wasmer compile -native" bakeng sa ho hlahisa lifaele tse entsoeng esale pele .so, .dylib le .dll), e hlokang nako e fokolang ea ho sebetsa, empa e boloka likarolo tsohle tsa ho itšehla thajana ka lebokose la lehlabathe. Hoa khoneha ho fana ka mananeo a hlophisitsoeng esale pele ka Wasmer e hahiloeng. Rust API le Wasm-C-API li fanoa bakeng sa ho theha li-add-on le li-add-on.
Phetoho e kholo ea palo ea phetolelo ea Wasmer e amahanngoa le ho hlahisoa ha liphetoho tse sa lumellaneng le API ea ka hare, eo, ho ea ka bahlahisi, e ke keng ea ama 99% ea basebelisi ba sethaleng. Har'a liphetoho tse senyang ho lumellana, ho boetse ho na le phetoho ea sebopeho sa serialized Wasm modules (li-modules tse hlophisitsoeng ho Wasmer 1.0 li ke ke tsa khona ho sebelisoa ho Wasmer 2.0). Liphetoho tse ling:
- Ts'ehetso bakeng sa litaelo tsa SIMD (Single Instruction, Multiple Data), e lumellang ho bapisa ts'ebetso ea data. Libaka tseo ho tsona ts'ebeliso ea SIMD e ka ntlafatsang ts'ebetso haholo li kenyelletsa ho ithuta ka mochini, khouto ea video le decoding, ts'ebetso ea litšoantšo, papiso ea ts'ebetso ea 'mele, le ho qhekella litšoantšo.
- Ts'ehetso bakeng sa mefuta ea litšupiso, e lumellang li-module tsa Wasm ho fumana tlhahisoleseling ho li-module tse ling kapa tikolohong e ka tlase.
- Lintlafatso tse kholo tsa ts'ebetso li entsoe. Lebelo la nako ea ho sebetsa ea LLVM e nang le lintlha tse phaphametseng e ekelitsoe ka hoo e ka bang 50%. Mehala ea ts'ebetso e potlakisitsoe haholo ka ho fokotsa maemo a hlokang ho fihlella kernel. Ts'ebetso ea jenereithara ea khoutu ea Cranelift e eketsehile ka 40%. Nako e fokotsehileng ea ho tlosoa ha data.
- Ho bonts'a moelelo ka nepo, mabitso a lienjineri a fetotsoe: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).
Source: opennet.ru