W3C-konsortiet har offentliggjort et udkast til den nye specifikation, der standardiserer WebAssembly 2.0's mellemcode og tilhørende API, som gør det muligt at skabe højtydende applikationer, der kan overføres mellem browsere og hardwareplatforme. WebAssembly tilbyder en browseruafhængig, universel lavniveau mellemkode til udførelse af applikationer, der er kompileret fra forskellige programmeringssprog. Gennem brugen af JIT til WebAssembly kan der opnås en ydelsesgrad tæt på den native kode.
WebAssembly-teknologien kan bruges til at udføre opgaver i browseren, der kræver høj ydeevne, som f.eks. videokodning, lydbehandling, grafik- og 3D-manipulation, spiludvikling, kryptografiske operationer og matematiske beregninger ved at køre kode skrevet i kompilerbare sprog såsom C/C++ i browseren.
Blandt de primære opgaver for WebAssembly fremhæves sikring af portabilitet, forudsigelighed af adfærd og identitet af kodeudførelse på forskellige platforme. For nylig er WebAssembly også blevet promoveret som en universel platform til sikker udførelse af kode i enhver infrastruktur, operativsystem og enhed, ikke kun begrænset til browsere.
W3C har offentliggjort tre foreløbige specifikationer for WebAssembly 2.0:
- 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 Interface — giver et API til integration med JavaScript. Muliggør at hente værdier og overføre parametre til WebAssembly-funktioner. Udførelsen af WebAssembly stemmer overens med JavaScript-sikkerhedsmodellen, og al interaktion med det underliggende system foregår på samme måde som udførelsen 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.
De vigtigste ændringer i WebAssembly 2.0 i forhold til den første version af standarden:
- Understøttelse af vektortypen v128 og tilhørende vektorinstruktioner, der muliggør parallel udførelse af operationer på flere numeriske værdier (SIMD, single instruction multiple data).
- Mulighed for at importere og eksportere ændrede (mutable) globale variabler, som muliggør anvendelse af global binding til værdier som stakpointer i C++.
- Nye instruktioner til konvertering af float-typer til int, som i stedet for at generere en undtagelse ved overfyldning returnerer den minimale eller maksimale mulige værdi (nødvendigt for SIMD).
- Instruktioner til at forlænge tegn for heltal (øge bitdybden af tallet med bevarelse af tegn og værdi).
- Understøttelse af tilbagelevering af flere værdier i blokke og funktioner (udover overførsel af flere parametre til funktioner).
- Implementering af JavaScript-funktionerne BigInt64Array og BigUint64Array til konvertering mellem JavaScript-typen BigInt og repræsentationen af 64-bit heltal i WebAssembly.
- Understøttelse af reference-typer (funcref og externref) og relaterede instruktioner (select, ref.null, ref.func og ref.is_null).
- Instruktioner memory.copy, memory.fill, memory.init og data.drop til at kopiere data mellem hukommelsesområder og rydde hukommelsesområder.
- Instruktioner til direkte adgang og ændring af tabeller (table.set, table.get, table.size, table.grow). Mulighed for at oprette, importere og eksportere flere tabeller i et enkelt modul. Funktioner til kopiering/fyldning af tabeller i batch-tilstand (table.copy, table.init og elem.drop).
Kilde: opennet.ru
