Wasmer 2.0, et verktøysett for å bygge WebAssembly-baserte applikasjoner, er tilgjengelig

Wasmer-prosjektet har gitt ut sin andre store utgivelse, og utvikler en kjøretid for å utføre WebAssembly-moduler som kan brukes til å lage universelle applikasjoner som kan kjøre på forskjellige operativsystemer, samt å kjøre upålitelig kode isolert. Prosjektkoden er skrevet i Rust og distribueres under MIT-lisensen.

Portabilitet oppnås ved å kompilere applikasjonskode til WebAssembly-mellomkode på lavt nivå, som kan kjøres på et hvilket som helst operativsystem eller være innebygd i programmer på andre programmeringsspråk. Programmene er lette beholdere som kjører WebAssembly-pseudokode. Disse beholderne er ikke knyttet til operativsystemet og kan inneholde kode som opprinnelig er skrevet på et hvilket som helst programmeringsspråk. Emscripten-verktøysettet kan brukes til å kompilere til WebAssembly. For å oversette WebAssembly til maskinkode for den nåværende plattformen, støtter den tilkobling av ulike kompileringsbackends (Singlepass, Cranelift, LLVM) og motorer (ved hjelp av JIT eller maskinkodegenerering).

Tilgangskontroll og interaksjon med systemet er gitt ved hjelp av WASI (WebAssembly System Interface) API, som gir programmeringsgrensesnitt for arbeid med filer, sockets og andre funksjoner levert av operativsystemet. Applikasjoner er isolert fra hovedsystemet i et sandkassemiljø og har kun tilgang til den deklarerte funksjonaliteten (en sikkerhetsmekanisme basert på kapasitetsstyring - for handlinger med hver av ressursene (filer, kataloger, sockets, systemanrop, etc.), søknaden må gis passende fullmakter).

For å starte WebAssembly-beholderen er det nok å installere Wasmer runtime på systemet, som kommer uten eksterne avhengigheter ("curl https://get.wasmer.io -sSfL | sh"), og kjøre den nødvendige filen ("wasmer test") .wasm"). Programmer distribueres i form av vanlige WebAssembly-moduler, som kan administreres ved hjelp av WAPM-pakkebehandlingen. Wasmer er også tilgjengelig som et bibliotek som kan brukes til å bygge inn WebAssembly-kode i Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir og Java-programmer.

Plattformen lar deg oppnå applikasjonskjøringsytelse nær den for opprinnelige sammenstillinger. Ved å bruke Native Object Engine for en WebAssembly-modul kan du generere innfødt kode ("wasmer compile -native" for å generere forhåndskompilerte .so-, .dylib- og .dll-objektfiler), som krever minimalt med kjøretid for å kjøre, men beholder alle funksjonene til sandkasse isolasjon. Det er mulig å levere forhåndskompilerte programmer med innebygd Wasmer. Rust API og Wasm-C-API tilbys for å lage tillegg og tillegg.

En betydelig endring i versjonsnummeret til Wasmer er forbundet med introduksjonen av inkompatible endringer i den interne APIen, som ifølge utviklerne ikke vil påvirke 99% av plattformbrukerne. Blant endringene som bryter kompatibiliteten, er det også en endring i formatet på serialiserte Wasm-moduler (moduler som er serialisert i Wasmer 1.0 vil ikke kunne brukes i Wasmer 2.0). Andre endringer:

  • Støtte for SIMD-instruksjoner (Single Instruction, Multiple Data), som tillater parallellisering av dataoperasjoner. Områder der bruk av SIMD kan forbedre ytelsen betydelig, inkluderer maskinlæring, videokoding og -dekoding, bildebehandling, fysisk prosesssimulering og grafikkmanipulering.
  • Støtte for referansetyper, slik at Wasm-moduler får tilgang til informasjon i andre moduler eller i det underliggende miljøet.
  • Betydelige ytelsesoptimaliseringer er gjort. Hastigheten på LLVM-kjøretid med flyttall er økt med omtrent 50 %. Funksjonskall har blitt betydelig akselerert ved å redusere situasjoner som krever tilgang til kjernen. Kranløftkodegeneratorens ytelse er økt med 40 %. Redusert datadeserialiseringstid.
    Wasmer 2.0, et verktøysett for å bygge WebAssembly-baserte applikasjoner, er tilgjengelig
    Wasmer 2.0, et verktøysett for å bygge WebAssembly-baserte applikasjoner, er tilgjengelig
  • For å gjenspeile essensen mer nøyaktig, er navnene på motorene endret: JIT → Universal, Native → Dylib (Dynamisk bibliotek), Objektfil → StaticLib (Statisk bibliotek).

Kilde: opennet.ru

Legg til en kommentar