W3C konsortsium avaldas uue spetsifikatsiooni mustandi, mis standardiseerib WebAssembly 2.0 vaheformaadi ja seotud API, mis võimaldab luua kõrgelt jõudvaid rakendusi, mis on ülekantavad brauserite ja riistvaraplatvormide vahel. WebAssembly pakub brauserist sõltumatut universaalset madala taseme vaheformaati rakenduste täitmiseks, mis on kompileeritud erinevatest programmeerimiskeeltest. Tänu JIT-i kasutamisele WebAssembly-s on võimalik saavutada jõudlus, mis on lähedane masinkoodile.
WebAssembly tehnoloogiat saab kasutada brauseris tõhusat jõudlust nõudvate ülesannete täitmiseks, näiteks video kodeerimiseks, heli töötlemiseks, graafika ja 3D manipuleerimiseks, mängude arendamiseks, krüptograafiliste toimingute ja matemaatiliste arvutuste tegemiseks, korraldades brauseris kompileeritavates keeltes nagu C/C++ kirjutatud koodi täitmist.
WebAssembly peamiste ülesannete hulka kuulub kooditäitmise ülekantavuse, käitumise ettearvatavuse ja identiteedi tagamine erinevates platvormides. Viimasel ajal edendatakse WebAssemblyt ka universaalse platvormina koodi turvaliseks täitmiseks kõikides infrastruktuurides, operatsioonisüsteemides ja seadmetes, mitte ainult brauserites.
W3C avaldas kolm esialgset WebAssembly 2.0 spetsifikatsiooni:
- WebAssembly Core — kirjeldab madala taseme virtuaalmasinat WebAssembly vahe-koodi täitmiseks. WebAssemblyga seotud ressursid tarnitakse '.wasm' formaadis, mis on sarnane '.class' failidega Java-s ja sisaldab staatilisi andmeid ning koodisegmente nende andmete töötlemiseks.
- WebAssembly JavaScript Interface — pakub API-d JavaScriptiga integreerimiseks. See võimaldab väärtusi saada ja parameetreid edastada WebAssembly funktsioonidesse. WebAssembly täitmine vastab JavaScripti turvamudelile ja kogu suhtlemine põhissüsteemiga toimub sarnaselt JavaScripti koodi täitmisega.
- WebAssembly Web API — määratleb lubaduste mehhanismi põhineva liidese, et küsida ja täita „.wasm” ressursse. WebAssembly ressursside formaat on optimeeritud täitmise alustamiseks ilma faili täieliku laadimiseta, mis parandab veebirakenduste reageerimisvõimet.
Peamised muudatused WebAssembly 2.0-s võrreldes esimese versiooniga standardis:
- Toetatakse vektoritiipi v128 ja sellega seotud vektori käske, mis võimaldavad mitu numbrilist väärtust (SIMD, ühe käsu mitu andmeid) samaaegselt töödelda.
- Muutuvate globaalsete muutujate importimise ja eksportimise võimalus, mis võimaldab globaalset sidumist selliste väärtustega nagu C++-s virna pointerid.
- Uued käsud float-tüübi muutmiseks int-iks, mis ei genereeri erandeid, kui tulemus ületab maksimaalse väärtuse, vaid tagastavad minimaalset või maksimaalset väärtust (SIMD jaoks vajalik).
- Täisarvude märke laiendavad käsud (numbrivahemiku suurendamine, säilitades märke ja väärtusi).
- Toetatakse mitme väärtuse tagastamist plokkide ja funktsioonide kaudu (lisaks mitme parameetri edastamisele funktsioonidesse).
- JavaScript-i funktsioonide BigInt64Array ja BigUint64Array rakendamine BigInt tüübi ja 64-bitiste täisarvude esitusvormi vahel WebAssembly-s.
- Viidatud tüüpide (funcref ja externref) ja nendega seotud käskude (select, ref.null, ref.func ja ref.is_null) toetamine.
- Käsklused memory.copy, memory.fill, memory.init ja data.drop andmete kopeerimiseks mälualade vahel ja mäluregioonide tühjendamiseks.
- Käsklused otse juurdepääsuks ja tabelite muutmiseks (table.set, table.get, table.size, table.grow). Mitme tabeli loomise, importimise ja eksportimise võimalus ühes moodulis. Tabelite kopeerimise/täiendamise funktsioonid grupirežiimis (table.copy, table.init ja elem.drop).
Allikas: opennet.ru
