Druhá významná verze projektu Wasmer, který vyvíjí runtime pro vykonávání modulů WebAssembly, byla uvolněna. Tento runtime lze použít k vytváření univerzálních aplikací, které mohou běžet na různých operačních systémech, a také k izolovanému vykonávání nedůvěryhodného kódu. Kód projektu je napsán v jazyce Rust a je distribuován pod licencí MIT.
Přenositelnost je zajištěna díky kompilaci aplikačního kódu do nízkoúrovňového zprostředkovacího kódu WebAssembly, který lze spouštět na jakýchkoli operačních systémech nebo vkládat do programů napsaných v jiných programovacích jazycích. Programy představují lehké kontejnery, ve kterých se vykonává pseudokód WebAssembly. Tyto kontejnery nejsou vázány na operační systém a mohou obsahovat kód původně napsaný v jakémkoli programovacím jazyce. Pro kompilaci do WebAssembly může být využit nástroj Emscripten. Pro translaci WebAssembly do strojového kódu aktuální platformy je podporováno připojení různých backendů pro kompilaci (Singlepass, Cranelift, LLVM) a enginů (využití JIT nebo generování strojového kódu).
Správa přístupu a interakce se systémem je zajištěna prostřednictvím API WASI (WebAssembly System Interface), které poskytuje programové rozhraní pro práci se soubory, sockety a dalšími funkcemi poskytovanými operačním systémem. Aplikace jsou izolovány od základního systému v sandboxovém prostředí a mají přístup pouze k deklarované funkcionalitě (bezpečnostní mechanismus založený na správě oprávnění — pro operace s každým z prostředků (soubory, adresáře, sockety, systémové volání atd.) musí být aplikaci udělena příslušná oprávnění).
K spuštění konteineru WebAssembly stačí nainstalovat do systému runtime Wasmer, který je dodáván bez externích závislostí ("curl https://get.wasmer.io -sSfL | sh") a spustit požadovaný soubor ("wasmer test.wasm"). Programy jsou distribuovány ve formě běžných modulů WebAssembly, jejichž správu lze provádět pomocí správce balíčků WAPM. Wasmer je také dostupný ve formě knihovny, kterou lze použít k integraci kódu WebAssembly do programů v jazycích Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir a Java.
Platforma umožňuje dosáhnout výkonu provádění aplikací blízkého provádění nativních sestavení. Pomocí Native Object Engine pro WebAssembly modul lze generovat strojový kód ("wasmer compile —native" pro generaci předkompilovaných objektových souborů .so, .dylib a .dll), pro jehož spuštění je vyžadováno minimální runtime, ale zachovávají se všechny možnosti sandboxové izolace. Je možná dodávka předkompilovaných programů s integrovaným Wasmerem. Pro vytváření nadstaveb a doplňků jsou k dispozici Rust API a Wasm-C-API.
Významná změna čísla verze Wasmer souvisí s implementací nekompatibilních změn v interním API, které, podle ujištění vývojářů, nijak neovlivní 99 % uživatelů platformy. Mezi nekompatibilními změnami je rovněž uvedena změna formátu serializovaných modulů Wasm (moduly serializované ve Wasmer 1.0 nebudou použitelné ve Wasmer 2.0). Další změny:
- Podpora instrukcí SIMD (Single Instruction, Multiple Data), které umožňují paralelizaci operací na datech. Mezi oblastmi, kde může použití SIMD výrazně zvýšit výkon, patří strojové učení, kódování a dekódování videa, zpracování obrazů, simulace fyzických procesů a manipulace s grafikou.
- Podpora referenčních typů, které umožňují modulům Wasm přístup k informacím v jiných modulech nebo v základním prostředí.
- Byla provedena významná optimalizace výkonu. Rychlost práce LLVM runtime s reálnými čísly se zvýšila přibližně o 50 %. Výrazně se zrychlil volání funkcí díky snížení situací vyžadujících přístup k jádru. Produktivita generátoru kódu Cranelift se zvýšila o 40 %. Byla zkrácena doba deserializace dat.


- Pro přesnější odraz podstaty byly změněny názvy motorů: JIT → Universal, Native → Dylib (Dynamická knihovna), Object File → StaticLib (Statická knihovna).
Zdroj: opennet.ru


