Wasmer 3.0, et værktøjssæt til at bygge WebAssembly-baserede applikationer, er tilgængeligt

Den tredje store udgivelse af Wasmer-projektet introduceres, som udvikler en runtime til eksekvering af WebAssembly-moduler, der kan bruges til at skabe universelle applikationer, der kan køre på forskellige operativsystemer, samt til at eksekvere upålidelig kode isoleret. Projektkoden er skrevet i Rust og distribueres under MIT-licensen.

Muligheden for at køre en applikation på forskellige platforme er tilvejebragt ved at kompilere kode til WebAssembly-mellemkode på lavt niveau, som kan køre på ethvert operativsystem eller være indlejret i programmer på andre programmeringssprog. Programmerne er letvægtsbeholdere, der kører WebAssembly pseudokode. Disse beholdere er ikke bundet til operativsystemet og kan indeholde kode, der oprindeligt er skrevet i et hvilket som helst programmeringssprog. Emscripten-værktøjssættet kan bruges til at kompilere til WebAssembly. For at oversætte WebAssembly til maskinkode for den nuværende platform, understøtter den tilslutning af forskellige kompileringsbackends (Singlepass, Cranelift, LLVM) og motorer (ved hjælp af JIT eller maskinkodegenerering).

Applikationer er isoleret fra hovedsystemet i et sandkassemiljø og har kun adgang til den erklærede funktionalitet (en sikkerhedsmekanisme baseret på kapacitetsstyring - for handlinger med hver af ressourcerne (filer, mapper, sockets, systemkald osv.), ansøgning skal have passende beføjelser). Adgangskontrol og interaktion med systemet leveres ved hjælp af WASI (WebAssembly System Interface) API, som giver programmeringsgrænseflader til at arbejde med filer, sockets og andre funktioner leveret af operativsystemet.

Platformen giver dig mulighed for at opnå applikationsudførelsesydelse tæt på native assemblies. Ved at bruge Native Object Engine til WebAssembly-modulet kan du generere maskinkode ("wasmer compile -native" for at generere prækompilerede .so-, .dylib- og .dll-objektfiler), som kræver minimal runtime at køre, men bevarer al sandkasseisolationen funktioner. Det er muligt at levere prækompilerede programmer med indbygget Wasmer. Rust API og Wasm-C-API tilbydes til oprettelse af tilføjelser og udvidelser.

For at starte en WebAssembly-beholder skal du blot installere Wasmer i runtime-systemet, som kommer uden eksterne afhængigheder ("curl https://get.wasmer.io -sSfL | sh"), og køre den nødvendige fil ("wasmer test.wasm" ). Programmer distribueres i form af almindelige WebAssembly-moduler, som kan administreres ved hjælp af WAPM-pakkehåndteringen. Wasmer er også tilgængelig som et bibliotek, der kan bruges til at indlejre WebAssembly-kode i Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir og Java-programmer.

Større ændringer i Wasmer 3.0:

  • Tilføjet muligheden for at oprette native eksekverbare filer til enhver platform. Kommandoen "wasmer create-exe" er blevet fuldstændigt omdesignet til at konvertere en WebAssembly mellemkodefil til selvstændige eksekverbare filer til Linux-, Windows- og macOS-platforme, der kan køre uden at installere Wasmer selv.
  • Det er muligt at starte WAPM-pakker placeret i mappen wapm.io ved at bruge kommandoen "wasmer run". For eksempel vil kørsel af "wasmer run python/python" downloade python-pakken fra wapm.io-lageret og køre den.
  • Wasmer Rust API er blevet fuldstændigt redesignet, hvilket ændrer stilen for at arbejde med hukommelse og giver mulighed for sikkert at gemme Wasm-objekter i butiksstrukturen. En ny MemoryView-struktur er blevet foreslået, der gør det muligt at læse og skrive data til et lineært hukommelsesområde.
  • Et sæt wasmer-js-komponenter er blevet implementeret til at køre Wasmer i en webbrowser og interagere med det fra JavaScript ved hjælp af wasm-bindgen-biblioteket. I sine muligheder svarer wasmer-js til wasmer-sys-komponenterne designet til at køre Wasmer på almindelige operativsystemer.
  • Motorer er blevet forenklet. I stedet for separate motorer til JIT, dynamisk og statisk linking (Universal, Dylib, StaticLib), tilbydes nu én fælles motor, og indlæsning og lagring af kode styres på niveau med indstilling af parametre.
  • For at deserialisere artefakter anvendes rkyv-rammeværket, som sikrer drift i nul-kopitilstand, dvs. som ikke kræver yderligere hukommelsesallokering og kun udfører deserialisering ved brug af den oprindeligt tilvejebragte buffer. Brugen af ​​rkyv har øget opstartshastigheden markant.
  • Singlepass single-pass compileren er blevet forbedret, tilføjer understøttelse af multi-værdi funktioner, forbedret pålidelighed og tilføjet understøttelse af undtagelseshåndtering rammer.
  • Forbedret implementering af WASI (WebAssembly System Interface) API. Problemer i WASI-softwaregrænsefladen til at arbejde med filsystemet er blevet løst. Interne typer er blevet redesignet ved hjælp af WAI (WebAssembly Interfaces), som vil muliggøre en række nye funktioner i fremtiden.

Kilde: opennet.ru

Tilføj en kommentar