W3C-konsortiet har meddelat att specifikationen som standardiserar mellanliggande kod för WebAssembly 3.0 och tillhörande API Àr klar, vilket gör det möjligt att skapa högpresterande applikationer som kan överföras mellan webblÀsare och hÄrdvaruplattformar. WebAssembly erbjuder en webblÀsaroberoende universell lÄgnivÄkod för att köra program som har kompilerats frÄn olika programmeringssprÄk.
WebAssembly-teknologin kan anvÀndas för att utföra uppgifter i webblÀsaren som krÀver hög prestanda, sÄsom videokodning, ljudbearbetning, grafisk och 3D-manipulation, spelutveckling, kryptografiska operationer och matematiska berÀkningar genom att möjliggöra körning av kod som skrivits i kompilering-sprÄk som C/C++. Genom att anvÀnda JIT för WebAssembly kan man uppnÄ prestandanivÄer som ligger nÀra den inbyggda koden.
Bland de viktigaste mÄlen för WebAssembly Àr att sÀkerstÀlla portabilitet, förutsÀgbart beteende och identitet vid körning av kod pÄ olika plattformar. WebAssembly Àr inte begrÀnsat till webblÀsare och marknadsförs ocksÄ som en universell plattform för sÀker körning av kod i alla infrastrukturer, operativsystem och enheter.
Följande specifikationer Àr tillgÀngliga:
- 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 API â tillhandahĂ„ller ett API för integration med JavaScript. Gör det möjligt att hĂ€mta vĂ€rden och passa parametrar till WebAssembly-funktioner. Körning 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.
- WASI API â definierar ett modulĂ€rt systemgrĂ€nssnitt för att köra WebAssembly utanför webblĂ€sare och ger tillgĂ„ng till resurser sĂ„som filer, nĂ€tverksanslutningar, en pseudotillfalls-generator och systemklockor.
Det noteras att den nya versionen av standarden har avsevÀrt förbÀttrad support för kompilering av hög-nivÄsprÄk till WebAssembly. Till exempel har möjligheten att kompilera projekt pÄ sprÄk som Java, OCaml, Scala, Kotlin, Scheme och Dart implementerats. HuvudÀndringarna i WebAssembly 3.0, jÀmfört med den andra versionen av standarden:
- Stöd för 64-bit adressutrymme har implementerats. För adressering av minne kan nu typen i64 anvÀndas, istÀllet för enbart i32, vilket utvidgar det tillgÀngliga adressutrymmet för applikationer frÄn 4 GB till 16 EB (nÀr det körs i webblÀsaren sÀtts en grÀns pÄ 16 GB).
- Möjlighet till samtidig anvÀndning av flera minnesobjekt inom en WebAssembly-modul och arbete med olika adressrymder har tillhandahÄllits. Bland annat Àr det möjligt att kopiera data mellan olika instanser av minnesobjekt som finns i olika adressrymder.
- Stöd för skrÀpsamling har lagts till. Förutom den tidigare tillgÀngliga linjÀra minnet har en separat typ av lagring föreslagits, som automatiskt hanteras med hjÀlp av en skrÀpsamlare. Kompilatorn kan nu anvÀnda separata datatyper, matriser och variabler, vars minneshantering och livscykel WebAssembly ansvarar för.
- Stöd för typade referenser har lagts till, vilket kan beskriva den exakta strukturen av det vÀrde som referensen pekar pÄ, vilket eliminerar behovet av ytterligare kontroller under körning. Underklasser, typrekursivitet och möjlighet till sÀker anvÀndning av funktionsreferenser som inte krÀver typ- och grÀnskontroller under körning stöds.
- Stöd för svansanrop (Tail call) har lagts till, dÀr den aktuella funktionen omedelbart avslutar sin körning efter anrop av en annan funktion, utan att anvÀnda plats pÄ stacken.
- Stöd för undantagshantering har lagts till.
- Stöd för "avslappnade" (relaxed) vektoriella SIMD-instruktioner har lagts till, vilket möjliggör högre prestanda genom att avstÄ frÄn strikt överensstÀmmelse med semantiken pÄ alla hÄrdvaruplattformar.
- Stöd för en deterministisk körprofil har lagts till, vilket definierar plattformsoberoende beteende för instruktioner vars exekveringsresultat kan variera mellan olika plattformar (flyttalsoperationer, ÄterlÀmnande av NaN, svagare vektoristruktioner). NÀr denna profil vÀljs sÀkerstÀller Wasm deterministiskt beteende, reproducerbarhet och portabilitet.
- Syntax för att skapa egna annoteringar har lagts till, vilket möjliggör bilÀggande av ytterligare information till WebAssembly-kod. Tidigare fanns stöd för anvÀndarsektioner som kan lagra godtycklig information i det binÀra formatet av WebAssembly, men det saknades i WebAssembly:s textformat. Nu kan denna information lÀggas till i ett lÀsbart och redigerbart format.
- Inbyggda funktioner för hantering av strÀngar har lagts till i JavaScript API. Tidigare kunde JavaScript-strÀngar endast överföras till WebAssembly som externa referenser, men nu kan strÀngarna adresseras direkt och manipuleras inuti WebAssembly.
KĂ€lla: opennet.ru
