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

Den tredje stora utgåvan av Wasmer-projektet introduceras, som utvecklar 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 exekvera opålitlig kod isolerat. Projektkoden är skriven i Rust och distribueras under MIT-licensen.

Möjligheten att köra en enda applikation på flera plattformar uppnås genom att kompilera kod 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).

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). Å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.

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.

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.

Stora förändringar i Wasmer 3.0:

  • Lade till möjligheten att skapa inbyggda körbara filer för vilken plattform som helst. Kommandot "wasmer create-exe" har gjorts om helt för att konvertera en WebAssembly-mellankodfil till fristående körbara filer för Linux-, Windows- och macOS-plattformar som kan köras utan att installera Wasmer själv.
  • Det är möjligt att starta WAPM-paket som finns i wapm.io-katalogen med kommandot "wasmer run". Till exempel kommer att köra "wasmer run python/python" att ladda ner python-paketet från wapm.io-förvaret och köra det.
  • Wasmer Rust API har gjorts om helt och hållet, vilket ändrar stilen att arbeta med minne och ger möjligheten att säkert spara Wasm-objekt i Store-strukturen. En ny MemoryView-struktur har föreslagits som tillåter läsning och skrivning av data till ett linjärt minnesområde.
  • En uppsättning wasmer-js-komponenter har implementerats för att köra Wasmer i en webbläsare och interagera med den från JavaScript med hjälp av wasm-bindgen-biblioteket. I sina funktioner motsvarar wasmer-js de wasmer-sys-komponenter som är designade för att köra Wasmer på vanliga operativsystem.
  • Motorer har förenklats. Istället för separata motorer för JIT, dynamisk och statisk länkning (Universal, Dylib, StaticLib) erbjuds nu en gemensam motor, och laddning och lagring av kod styrs på nivån för inställning av parametrar.
  • För att deserialisera artefakter används rkyv-ramverket, vilket säkerställer drift i nollkopieringsläge, d.v.s. som inte kräver någon ytterligare minnestilldelning och utför deserialisering endast med användning av den initialt tillhandahållna bufferten. Användningen av rkyv har ökat starthastigheten avsevärt.
  • Singlepass single-pass kompilatorn har förbättrats och lagt till stöd för flervärdesfunktioner, förbättrad tillförlitlighet och lagt till stöd för undantagshanteringsramar.
  • Förbättrad implementering av WASI (WebAssembly System Interface) API. Problem i WASI mjukvarugränssnitt för att arbeta med filsystemet har lösts. Interna typer har gjorts om med WAI (WebAssembly Interfaces), vilket kommer att möjliggöra en rad nya funktioner i framtiden.

Källa: opennet.ru

Lägg en kommentar