W3C-konsortiet har annonceret klarheden af specifikationen, der standardiserer mellemprodukten WebAssembly 3.0 og det relaterede API, som muliggør oprettelsen af højtydende applikationer, der kan overføres mellem browsere og hardwareplatforme. WebAssembly leverer en browser-uafhængig, generel lavniveau mellemkode til udførelse af applikationer, der er kompileret fra forskellige programmeringssprog.
WebAssembly-teknologien kan anvendes til at udføre opgaver i browseren, der kræver høj ydeevne, såsom videokodning, lydbehandling, grafik- og 3D-manipulation, spiludvikling, kryptografiske operationer og matematiske beregninger ved at organisere udførelsen af kompileret kode i browseren på sprog som C/C++. Ved brug af JIT for WebAssembly kan ydeevne opnås, der er tæt på den native kode.
Blandt de vigtigste opgaver for WebAssembly er at sikre portabilitet, forudsigelighed af adfærd og identitet i udførelsen af kode på forskellige platforme. WebAssembly er ikke begrænset til browsere og fremmes også som en universel platform for sikker udførelse af kode på enhver infrastruktur, operativsystemer og enheder.
Følgende specifikationer er tilgængelige:
- WebAssembly Core — beskriver en lavniveau virtuel maskine til udførelse af mellemkode for WebAssembly. Relaterede ressourcer leveres i formatet '.wasm', der ligner '.class'-filer i Java og indeholder statiske data og kode-segmenter til at arbejde med disse data.
- WebAssembly JavaScript API — leverer et API til integration med JavaScript. Muliggør indhentning af værdier og overførsel af parametre til WebAssembly-funktioner. Udførelsen af WebAssembly følger sikkerhedsmodellen for JavaScript, og al interaktion med det underliggende system sker på samme måde som ved udførelse af JavaScript-kode.
- WebAssembly Web API — definerer et programinterface baseret på Promise-mekanismen til at anmode om og udføre ressourcer '.wasm'. Formatet for WebAssembly-ressourcer er optimeret til hurtig udførelse uden at vente på den fulde filindlæsning, hvilket øger responsiviteten af webapplikationer.
- WASI API — definerer et modulært systeminterface til kørsel af WebAssembly uden for browsere og giver adgang til ressourcer som filer, netværksforbindelser, pseudotilfældige talgeneratorer og systemtidsure.
Det bemærkes, at den nye version af standarden væsentligt forbedrer understøttelsen af kompilering af høj-niveau sprog til WebAssembly. For eksempel er der blevet implementeret mulighed for at kompilere WebAssembly-projekter skrevet i Java, OCaml, Scala, Kotlin, Scheme og Dart. De vigtigste ændringer i WebAssembly 3.0 sammenlignet med den anden version af standarden:
- Understøttelse af 64-bit adresserum er blevet implementeret. Til adressering af hukommelse kan der nu anvendes typen i64 i stedet for kun i32, hvilket udvider det tilgængelige adresserum for applikationerne fra 4 GB til 16 EB (når der køres i en browser er grænsen sat til 16 GB).
- Muligheden for samtidig brug af flere hukommelsesobjekter i et WebAssembly-modul og arbejde med forskellige adresserum er blevet tilføjet. Blandt andet er det muligt at kopiere data mellem forskellige instanser af hukommelsesobjekter, placeret i forskellige adresserum.
- Understøttelse af garbage collection er blevet tilføjet. Ud over den tidligere tilgængelige lineære hukommelse er der blevet tilbudt en separat type lager, der automatisk administreres med hjælp fra garbage collector. Kompilatoren kan nu bruge separate datastrukturer, arrays og variabler, hvis hukommelsesallokering og livscyklusstyring varetages af WebAssembly.
- Understøttelse af typerede referencer er blevet tilføjet, som kan beskrive den præcise struktur af værdien, som referencen peger på, hvilket muliggør undgåelse af ekstra kontrol under kørsel. Understøttelse af subtyper, type rekursion og sikker brug af funktionsreferencer, som ikke kræver type- og grænsekontrol under kørsel, er også inkluderet.
- Understøttelse af tail calls er blevet tilføjet, hvor den nuværende funktion straks afslutter sit arbejde efter at have kaldt en anden funktion, uden at bruge plads på stakken.
- Understøttelse af undtagelseshåndtering er blevet tilføjet.
- Understøttelse af 'slappe' (relaxed) SIMD-instruktioner i vektorer er blevet tilføjet, hvilket muliggør højere ydeevne ved at opgive strenge overholdelse af semantik på tværs af alle hardwareplatforme.
- Tilføjet support til en deterministisk kørselprofil, der definerer platformuafhængig adfærd for instruktioner, hvis udfald kan variere på forskellige platforme (flydende punkter, returnering af NaN, svækkede vektor instruktioner). Når denne profil vælges, sikrer Wasm deterministisk adfærd, reproducerbarhed og portabilitet.
- Syntax tilføjet til at oprette brugerdefinerede annotationer, som muliggør vedhæftning af yderligere oplysninger til WebAssembly-koden. Tidligere blev support til brugerdefinerede sektioner, der muliggør opbevaring af vilkårlig information, tilbudt i det binære format for WebAssembly, men manglede i det tekstuelle format. Nu er der mulighed for at tilføje disse oplysninger i et læsbart og redigerbart format.
- Indbyggede funktioner til behandling af strenge er blevet tilføjet til JavaScript API'et. Tidligere kunne JavaScript-strenge kun videresendes til WebAssembly som eksterne referencer, men nu kan man få direkte adgang til strenge og manipulere dem inden for WebAssembly.
Kilde: opennet.ru
