Toimus projekti Wasmer teine oluline vĂ€ljalase, mis arendab runtime'i WebAssembly moodulite tĂ€itmiseks, mida saab kasutada universaalsete rakenduste loomiseks, mis vĂ”ivad töötada erinevates operatsioonisĂŒsteemides, samuti usaldusvÀÀrsust mitteomava koodi isoleeritud tĂ€itmiseks. Projekti kood on kirjutatud Rusti keeles ja levitatakse MIT litsentsi alusel.
Ălekantavus tagatakse tĂ€nu rakenduse koodi kompileerimisele madala taseme WebAssembly vahefailiks, mida saab kĂ€itada mis tahes operatsioonisĂŒsteemis vĂ”i integreerida teiste programmeerimiskeelte programmidesse. Rakendused on kerged konteinerid, kus tĂ€idetakse WebAssembly pseudokood. Need konteinerid ei ole seotud operatsioonisĂŒsteemiga ning vĂ”ivad sisaldada koodi, mis on algselt kirjutatud mis tahes programmeerimiskeeles. WebAssembly kompileerimiseks saab kasutada tööriistu Emscripten. WebAssembly edastamiseks sihtplatvormi masinkoodiks toetatakse erinevate kompileerimise taustade (Singlepass, Cranelift, LLVM) ja mootorite (JIT kasutamine vĂ”i masinkoodi genereerimine) ĂŒhendamise vĂ”imalust.
JuurdepÀÀsu haldamine ja sĂŒsteemiga suhtlemine toimub API WASI (WebAssembly System Interface) kaudu, mis pakub tarkvaraliideseid failide, sokettide ja muude operatsioonisĂŒsteemi pakutud funktsioonide jaoks. Rakendused on pĂ”hisisemist isoleeritud sandbox-keskkonnas ja neil on juurdepÀÀs ainult deklareeritud funktsionaalsusele (turvamehhanism pĂ”hineb Ă”iguste haldamisel - iga ressursiga (failid, kataloogid, soketid, sĂŒsteemi kutsed jne) toimetamiseks peavad rakendusele olema antud vastavad Ă”igused).
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 levivad tavapĂ€raste WebAssembly moodulitena, mille haldamiseks saab kasutada WAPM paketihaldurit. Wasmer on samuti saadaval raamatukoguna, mida saab kasutada WebAssembly koodi integreerimiseks Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir ja Java keeltesse.
Platvorm vĂ”imaldab saavutada rakenduste töötluse jĂ”udlust, mis on lĂ€hedane natiivsete kogude tĂ€itmisele. Native Object Engine'i abil WebAssembly-mooduli jaoks saab genereerida masinkoodi (âwasmer compile ânativeâ eelkompileeritud objektifailide .so, .dylib ja .dll genereerimiseks), mille kĂ€ivitamiseks on vajalik minimaalne runtime, kuid sĂ€ilitades kĂ”ik sandbox-isolatsiooni vĂ”imalused. On vĂ”imalik tarnida eelkompileeritud programme koos sisseehitatud Wasmeriga. Laienduste ja tĂ€iustuste loomiseks pakutakse Rust API ja Wasm-C-API.
Wasmeri versiooninumbri oluline muudatus on seotud ĂŒhilduvuse purustavate muudatustega sisemises API-s, mis, nagu arendajad kinnitavad, ei mĂ”juta 99% platvormi kasutajatest. Ăhilduvust katkestavad muudatused hĂ”lmavad ka Wasm'i serialiseeritud moodulite formaadi muutmist (Wasmer 1.0-s serialiseeritud mooduleid ei saa kasutada Wasmer 2.0-s). Teised muudatused:
- SIMD (Single Instruction, Multiple Data) kĂ€skude tugi, mis vĂ”imaldab andmete operatsioonide paralleelset töötlemist. Valdkondadest, kus SIMD kasutamine vĂ”ib tootlikkust mĂ€rgatavalt tĂ”sta, nimetatakse masinĂ”ppe, video kodeerimist ja dekodeerimist, pilditöötlust, fĂŒĂŒsikaliste protsesside simuleerimist ja graafika manipuleerimist.
- Viidatud tĂŒĂŒpide tugi, mis vĂ”imaldab Wasm moodulitel pÀÀseda ligi informatsioonile teistes moodulites vĂ”i pĂ”hikeskkonnas.
- Toimunud on mÀrkimisvÀÀrne jÔudluse optimeerimine. LLVM runtime'i jÔudlus ujukoma numbritega on suurenenud umbes 50%. Funktsioonide kutsumise kiirus on oluliselt suurenenud, vÀhendades olukordi, mis nÔuavad tuuma poole pöördumist. Cranelift koodigeneratsiooni jÔudlus on suurenenud 40%. Andmete deserialiseerimise aega on vÀhendatud.


- Selleks, et paremini kajastada muudatusi, on mootorite nimetusi muudetud: JIT â Universal, Native â Dylib (DĂŒnaamiline Raamatukogu), Object File â StaticLib (Staatic Raamatukogu).
Allikas: opennet.ru


