Po téměř 6 měsících od předchozího vydání byla vydána nová verze Wasmer 3.0, třetí hlavní verze projektu, která se vyvíjí runtime pro spouštění modulů WebAssembly které lze použít k vytvoření univerzálních aplikací, které lze spustit na různých operačních systémech, a také k nedůvěryhodnému spouštění kódu.
La schopnost provozovat stejnou aplikaci na různých platformách je poskytován kompilací kódu do nízkoúrovňového přechodného kódu WebAssembly, který lze spustit na jakémkoli operačním systému nebo být zabudován do programů v jiných programovacích jazycích. Programy jsou lehké kontejnery, které spouštějí pseudokód WebAssembly.
Tyto kontejnery nejsou vázány na operační systém a mohou obsahovat kód původně napsaný v libovolném programovacím jazyce.
Chcete-li přeložit WebAssembly do strojového kódu aktuální platformy, musíte podporuje propojení různých backendů sestavení (Singlepass, Cranelift, LLVM) a motory (pomocí JIT nebo generování strojového kódu). Řízení přístupu a interakci se systémem zajišťuje WASI (WebAssembly System Interface) API, které poskytuje programovací rozhraní pro práci se soubory, sokety a dalšími funkcemi poskytovanými operačním systémem.
Platforma umožňuje dosáhnout výkonu spouštění aplikací blízkému výkonu nativních sestavení.
Hlavní novinky Wasmer 3.0
V této nové verzi Wasmer 3.0 je schopnost vytvářet nativní spustitelné soubory pro jakoukoli platformu. Příkaz "wasmer create-exe» byl zcela přepracován tak, aby převáděl přechodný soubor kódu WebAssembly na samostatné spustitelné soubory pro platformy Linux, Windows a macOS, které lze spustit bez instalace Wasmer.
Další novinkou, která je prezentována, je, že schopnost spouštět balíčky WAPM umístěný v adresáři wapm.io pomocí příkazu „wasmer run“. Například spusťte "wasmer spustí python/python» stáhne balíček python z úložiště wapm.io a spustí jej.
Wasmer Rust API bylo kompletně přepracováno, mění způsob, jakým zachází s pamětí a poskytuje možnost bezpečně ukládat objekty Wasm ve struktuře Store.
V této nové verzi Wasmer 3.0 je také zdůrazněno vylepšená implementace WASI API (WebAssembly System Interface), navíc k opravě problémů v WASI API pro práci se systémem souborů. Interní typy byly přepracovány pomocí WAI (WebAssembly Interfaces), což umožní v budoucnu implementovat řadu nových funkcí.
Kromě toho došlo také ke zjednodušení motorů, protože místo samostatných motorů pro JIT se používá dynamické a statické vázání (Universal, Dylib, StaticLib), nyní nabízí společný engine a načítá a ukládá kód který se ovládá na úrovni nastavení parametrů.
K deserializaci artefaktů se používá framework rkyv, který poskytuje operaci nulového kopírování, tj. nevyžaduje žádnou další alokaci paměti a provádí deserializaci pouze pomocí původně poskytnuté vyrovnávací paměti.
Z další změny které vyčnívají z této nové verze:
- Použití rkyv výrazně zvýšilo rychlost spouštění.
- Kompilátor Singlepass byl vylepšen, aby podporoval funkce s více hodnotami, zlepšil spolehlivost a přidal podporu pro rámce zpracování výjimek.
- Sada komponentů wasmer-js byl implementován pro spuštění Wasmer ve webovém prohlížeči a interakci s ním z JavaScriptu pomocí knihovny wasm-bindgen.
- Byla navržena nová struktura. MemoryView který umožňuje čtení a zápis dat v lineární oblasti paměti.
Na závěr je třeba zmínit, že programy jsou distribuovány ve formě běžných modulů WebAssembly, které lze spravovat pomocí správce balíčků WAPM. Wasmer je k dispozici také jako knihovna, kterou lze použít k vložení kódu WebAssembly do programů Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir a Java.
Kód projektu je napsán v Rustu a je šířen pod licencí MIT a můžete se o něm dozvědět více, Na následujícím odkazu.