W3C-konsortiet har publicerat ett utkast till en ny specifikation för standardisering av mellanliggande kod WebAssembly 2.0 och dess tillhörande API, vilket möjliggör skapandet av högpresterande applikationer som kan köras pÄ olika webblÀsare och hÄrdvaruplattformar. WebAssembly erbjuder en webblÀsaroberoende universell lÄg-nivÄ mellanliggande kod för körning av applikationer som har kompilerats frÄn olika programmeringssprÄk. Genom att anvÀnda JIT för WebAssembly kan man nÄ en prestandanivÄ nÀra den för nativ kod.
Teknologin WebAssembly kan anvÀndas för att utföra resurskrÀvande uppgifter i webblÀsaren, sÄsom videokodning, ljudbehandling, grafik- och 3D-manipulation, spelutveckling, kryptografiska operationer och matematiska berÀkningar genom att köra kod som skrivits i kompilierade sprÄk, som C/C++, i webblÀsaren.
Bland huvuduppgifterna för WebAssembly utmÀrker sig att sÀkerstÀlla portabilitet, förutsÀgbarhetsbeteende och identitet av kodens utförande pÄ olika plattformar. PÄ senare tid har WebAssembly ocksÄ marknadsförts som en universell plattform för sÀker körning av kod i alla infrastrukturer, operativsystem och enheter, inte bara begrÀnsat till webblÀsare.
W3C har publicerat tre preliminÀra specifikationer för WebAssembly 2.0:
- WebAssembly Core â beskriver en lĂ„gnivĂ„ virtuell maskin för att köra mellanliggande kod för WebAssembly. Resurser kopplade till WebAssembly levereras i formatet ".wasm", som liknar ".class"-filer i Java och innehĂ„ller statiska data och kodsegment för att arbeta med dessa data.
- WebAssembly JavaScript Interface â tillhandahĂ„ller ett API för integration med JavaScript. Gör det möjligt att hĂ€mta vĂ€rden och skicka parametrar till WebAssembly-funktioner. Utförandet av WebAssembly följer JavaScripts sĂ€kerhetsmodell och all interaktion med det underliggande systemet sker pĂ„ liknande sĂ€tt som körning av JavaScript-kod.
- WebAssembly Web API â definierar ett programmeringsgrĂ€nssnitt baserat pĂ„ Promise-mekanismen för att begĂ€ra och köra resurser ".wasm". Formatet för WebAssembly-resurser Ă€r optimerat för att börja körningen utan att vĂ€nta pĂ„ att hela filen ska laddas, vilket förbĂ€ttrar responsiviteten hos webbapplikationer.
De viktigaste Àndringarna i WebAssembly 2.0 jÀmfört med den första versionen av standarden:
- Stöd för vektortypen v128 och relaterade vektorinstruktioner som möjliggör parallell bearbetning av flera numeriska vÀrden (SIMD, single instruction multiple data).
- Möjlighet att importera och exportera Ànderliga (mutable) globala variabler, vilket möjliggör anvÀndning av global bindning för sÄdana vÀrden som stackpekare i C++.
- Nya instruktioner för att konvertera frÄn float till int, som istÀllet för att generera ett undantag vid överflöd returnerar det minimalt eller maximalt möjliga vÀrdet (nödvÀndigt för SIMD).
- Instruktioner för att utöka tecknet för hela tal (öka bitdjupet av ett tal med bevarande av tecken och vÀrde).
- Stöd för att returnera flera vÀrden i block och funktioner (utöver att överföra flera parametrar till funktioner).
- Implementering av JavaScript-funktionerna BigInt64Array och BigUint64Array för konvertering mellan JavaScript-typen BigInt och representationen av 64-bitars hela tal i WebAssembly.
- Stöd för referenstyper (funcref och externref) och relaterade instruktioner (select, ref.null, ref.func och ref.is_null).
- Instruktioner memory.copy, memory.fill, memory.init och data.drop för att kopiera data mellan minnesomrÄden och rensa minnesregioner.
- Instruktioner för direkt Ätkomst och Àndring av tabeller (table.set, table.get, table.size, table.grow). Möjlighet att skapa, importera och exportera flera tabeller i ett enda modul. Funktioner för kopiering/fyllning av tabeller i batchlÀge (table.copy, table.init och elem.drop).
KĂ€lla: opennet.ru
