Esitatud on Wasmer projekti kolmas suursugune vĂ€ljaanne, mis arendab WebAssembly moodulite kĂ€itamiseks mĂ”eldud runtime'i, mida saab kasutada universaalsete rakenduste loomiseks, mis suudavad töötada erinevates operatsioonisĂŒsteemides, samuti usaldusvÀÀrset kodeerimata koodi isoleeritud töötlemiseks. Projekti kood on kirjutatud Rusti keeles ja jagatakse MIT litsentsi alusel.
VĂ”imalus kĂ€itada ĂŒhte rakendust erinevatel platvormidel saavutatakse tĂ€nu koodi kompileerimisele madala taseme vahekodeksiks WebAssembly, mis suudab töötada mis tahes operatsioonisĂŒsteemis vĂ”i integreerida teistesse programmeerimiskeeltesse. Programmid on kergekaalulised konteinerid, milles kĂ€itatakse WebAssembly pseudo-koodi. Need konteinerid ei ole seotud operatsioonisĂŒsteemiga ja vĂ”ivad sisaldada koodi, mis on algselt kirjutatud mis tahes programmeerimiskeeles. WebAssembly kompileerimiseks vĂ”ib kasutada Emscripteni tööriistakasti. WebAssembly tĂ”lkimiseks praeguse platvormi masinkoodiks toetatakse erinevate kompileerimise tagapindade (Singlepass, Cranelift, LLVM) ja mootorite (JIT kasutamine vĂ”i masinkoodi genereerimine) ĂŒhendamist.
Rakendused on isoleeritud peamisest sĂŒsteemist sandbox- keskkonnas ja neil on juurdepÀÀs ainult deklareeritud funktsionaalsusele (turvamehhanism pĂ”hineb vĂ”imaluste haldamisel â iga ressurssi (failid, kataloogid, soketid, sĂŒsteemi kutsed jne) toimingute jaoks peab rakendusele andma vastavad volitused). Juhtimist juurdepÀÀsu ja sĂŒsteemiga suhtlemiseks tagab WASI (WebAssembly System Interface) API, mis pakub programmiliideseid failide, sokettide ja muude operatsioonisĂŒsteemi pakutavate funktsioonide haldamiseks.
Platvorm vĂ”imaldab saavutada rakenduste tĂ€itmise jĂ”udlust, mis on lĂ€hedane kohalike kogumite tĂ€itmisele. Native Object Engine'i abil saab WebAssembly mooduli jaoks genereerida masinkoodi (âwasmer compile ânativeâ kompileeritud objektifailide .so, .dylib ja .dll genereerimiseks), mille kĂ€itamiseks on vajalik minimaalne runtime, kuid sĂ€ilitatakse kĂ”ik sandbox-isoleerimise vĂ”imalused. On vĂ”imalik pakkuda eelnevalt kompileeritud programme koos integreeritud Wasmeriga. TĂ€ienduste ja laienduste loomiseks on saadaval Rust API ja Wasm-C-API.
WebAssembly konteineri kĂ€ivitamiseks piisab, kui installida sĂŒsteemi Wasmer runtime, mis tarnitakse ilma vĂ€liste sĂ”ltuvusteta ("curl https://get.wasmer.io -sSfL | sh"), ja kĂ€ivitada vajalik fail ("wasmer test.wasm"). Programmid levitatakse tavapĂ€raste WebAssembly moodulitena, mille haldamiseks saab kasutada paketihaldurit WAPM. Wasmer on samuti saadaval teegina, mida saab kasutada WebAssembly koodi sisestamiseks programmides, mis on kirjutatud Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir ja Java keeltes.
Peamised muudatused Wasmer 3.0:
- Lisatud vÔimalus luua kohalikke tÀitmisfaile kÔikidele platvormidele. TÀiesti uuendatud kÀsu «wasmer create-exe» funktsioon, mis vÔimaldab muuta WebAssembly vahekoodifaili iseseisvateks tÀitmisfailideks platvormidele Linux, Windows ja macOS, mis toimivad ilma Wasmeri paigaldamiseta.
- Pakutakse vÔimalust kÀivitada wapm.io kataloogis olevaid WAPM pakette kÀsu «wasmer run» abil. NÀiteks kÀivitus «wasmer run python/python» toob wapm.io repositooriumist python paketi ja kÀivitab selle.
- TÀiesti uuendatud Wasmer Rust API, milles on muudetud mÀlu haldamise stiili ja antud vÔimalus talletada Wasm objekte Store struktuuris ohutult. Pakutud on uus MemoryView struktuur, mis vÔimaldab andmeid lugeda ja kirjutada lineaarse mÀluruumi.
- Tehtud on wasmer-js komponentide komplekt, et kĂ€ivitada Wasmer veebibrauseridest ja suhelda sellega JavaScripti kaudu, kasutades wasm-bindgen raamatukogu. Oma vĂ”imaluste poolest vastab wasmer-js komponentidele wasmer-sys, mis on mĂ”eldud Wasmeri kĂ€itamiseks tavakasutaja operatsioonisĂŒsteemides.
- Mootoreid on lihtsustatud. Eraldi mootoreid JIT, dĂŒnaamiliseks ja staatiliseks sidumiseks (Universal, Dylib, StaticLib) pole enam, nĂŒĂŒd on ĂŒks ĂŒhine mootor ja koodi laadimist ning salvestamist juhitakse parameetri seadmise tasemel.
- Arhitektuuride deserialiseerimiseks on kasutatud rkyv raamistikku, mis tagab null-kopimist reĆŸiimis töötamise, s.t. ei vaja tĂ€iendava mĂ€lu eraldamist ja teostab deserialiseerimise ainult algselt antud puhvri abil. Rkyv kasutamine on oluliselt kiirendanud kĂ€ivitamist.
- Ăksikmöödani kompilaator Singlepass on paranenud, mille raames on lisatud mitme argumendiga funktsioonide (multi-value) tugi, tĂ”usnud töö usaldusvÀÀrsus ja lisatud eksituste töötlemise raamistike tugi.
- WASI (WebAssembly System Interface) API teostust on parendatud. Probleemid WASI API-s, mis on seotud failisĂŒsteemiga, on lahendatud. SisetĂŒĂŒbid on ĂŒmber töötatud WAI (WebAssembly Interfaces) abil, mis tulevikus vĂ”imaldab tutvustada uut funktsionaalsust.
Allikas: opennet.ru
