Wasmer 2.0, en verktygslåda för att bygga WebAssembly-baserade applikationer, är tillgänglig

Wasmer-projektet har släppt sin andra stora utgåva, utvecklande av en körtid för exekvering av WebAssembly-moduler som kan användas för att skapa universella applikationer som kan köras på olika operativsystem, samt för att köra otillförlitlig kod isolerat. Projektkoden är skriven i Rust och distribueras under MIT-licensen.

Portabilitet uppnås genom att kompilera applikationskod till lågnivå WebAssembly-mellankod, som kan köras på vilket operativsystem som helst eller bäddas in i program på andra programmeringsspråk. Programmen är lättviktsbehållare som kör WebAssembly-pseudokod. Dessa behållare är inte knutna till operativsystemet och kan innehålla kod som ursprungligen skrivits på vilket programmeringsspråk som helst. Emscripten verktygslåda kan användas för att kompilera till WebAssembly. För att översätta WebAssembly till maskinkod för den nuvarande plattformen, stöder den anslutning av olika kompileringsbackends (Singlepass, Cranelift, LLVM) och motorer (med JIT eller maskinkodsgenerering).

Åtkomstkontroll och interaktion med systemet tillhandahålls med hjälp av WASI (WebAssembly System Interface) API, som tillhandahåller programmeringsgränssnitt för att arbeta med filer, sockets och andra funktioner som tillhandahålls av operativsystemet. Applikationer är isolerade från huvudsystemet i en sandlådemiljö och har endast tillgång till den deklarerade funktionaliteten (en säkerhetsmekanism baserad på kapacitetshantering - för åtgärder med var och en av resurserna (filer, kataloger, sockets, systemanrop, etc.), ansökan måste ges lämpliga befogenheter).

För att starta en WebAssembly-behållare, installera bara Wasmer i runtime-systemet, som kommer utan externa beroenden ("curl https://get.wasmer.io -sSfL | sh") och kör den nödvändiga filen ("wasmer test.wasm" ). Program distribueras i form av vanliga WebAssembly-moduler, som kan hanteras med hjälp av WAPM-pakethanteraren. Wasmer är också tillgängligt som ett bibliotek som kan användas för att bädda in WebAssembly-kod i Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir och Java-program.

Plattformen låter dig uppnå applikationsexekveringsprestanda nära inbyggda sammansättningar. Genom att använda Native Object Engine för WebAssembly-modulen kan du generera maskinkod ("wasmer compile -native" för att generera förkompilerade .so-, .dylib- och .dll-objektfiler), som kräver minimal körtid för att köras, men behåller all sandlådeisolering Funktioner. Det är möjligt att leverera förkompilerade program med inbyggd Wasmer. Rust API och Wasm-C-API erbjuds för att skapa tillägg och tillägg.

En betydande förändring i versionsnumret för Wasmer är associerad med introduktionen av inkompatibla ändringar av det interna API:t, vilket enligt utvecklarna inte kommer att påverka 99% av plattformsanvändarna. Bland ändringarna som bryter kompatibiliteten finns det också en förändring av formatet på serialiserade Wasm-moduler (moduler som serialiserats i Wasmer 1.0 kommer inte att kunna användas i Wasmer 2.0). Andra ändringar:

  • Stöd för SIMD-instruktioner (Single Instruction, Multiple Data), vilket möjliggör parallellisering av dataoperationer. Områden där användningen av SIMD avsevärt kan förbättra prestandan inkluderar maskininlärning, videokodning och avkodning, bildbehandling, fysisk processimulering och grafikmanipulation.
  • Stöd för referenstyper, vilket gör att Wasm-moduler kan komma åt information i andra moduler eller i den underliggande miljön.
  • Betydande prestandaoptimeringar har gjorts. Hastigheten för LLVM-körtid med flyttal har ökats med cirka 50 %. Funktionsanrop har accelererats avsevärt genom att minska situationer som kräver åtkomst till kärnan. Kranlyfts kodgenerators prestanda har ökat med 40 %. Minskad datadeserialiseringstid.
    Wasmer 2.0, en verktygslåda för att bygga WebAssembly-baserade applikationer, är tillgänglig
    Wasmer 2.0, en verktygslåda för att bygga WebAssembly-baserade applikationer, är tillgänglig
  • För att mer exakt återspegla essensen har namnen på motorerna ändrats: JIT → Universal, Native → Dylib (Dynamiskt bibliotek), Objektfil → StaticLib (Statiskt bibliotek).

Källa: opennet.ru

Lägg en kommentar