W3C konsortsium teatas WebAssembly 3.0 vahekoodi ning sellega seotud API spetsifikatsiooni valmimisest, mis standardiseerib kiirete rakenduste loomise, mis on ülekantavad brauserite ja riistvaraplatvormide vahel. WebAssembly pakub sõltumatut brauserist universaalset madala taseme vahekoode, mis võimaldab käitada rakendusi, mis on kompileeritud erinevatest programmeerimiskeeltest.
WebAssembly tehnoloogiat saab kasutada brauseris selliste ülesannete täitmiseks, mis nõuavad kõrget jõudlust, nagu videode kodeerimine, heli töötlemine, graafika ja 3D manipuleerimine, mängude arendamine, krüptograafilised operatsioonid ja matemaatilised arvutused, võimaldades brauseris käitada kompileeritud keeltes, nagu C/C++, kirjutatud koodi. WebAssembly kasutamine JIT-i abil võimaldab saavutada jõudlust, mis on lähedane kohalikule koodile.
WebAssembly peamised eesmärgid hõlmavad koodi ülekantavuse, käitumise etteennustatavuse ja täitmisidentiteedi tagamist erinevates platvormides. WebAssembly ei piirdu ainult brauseritega, vaid edendatakse ka kui universaalset platvormi, mis tagab koodi ohutu täitmise igasugustes infrastruktuurides, operatsioonisüsteemides ja seadmetes.
Saadaval on järgmised spetsifikatsioonid:
- 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 API — pakub API-d JavaScriptiga integreerimiseks. See võimaldab väärtuste saamist ja parameetride edastamist WebAssembly funktsioonidesse. WebAssembly täitmine vastab JavaScripti turvamudelile ja kogu suhtlemine põhisüsteemiga toimub nagu JavaScripti koodi täitmine.
- 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.
- WASI API — määratleb modulaarse süsteemi liidese WebAssembly käitamiseks väljaspool brausereid ja juurdepääsu sellistele ressurssidele nagu failid, võrgusidemed, pseudojuhuslike numbrite generaator ja süsteemi kellad.
Uues standardi versioonis on oluliselt paranenud kõrgkeelte kompileerimise tugi WebAssembly's. Näiteks on nüüd võimalik Java, OCaml, Scala, Kotlin, Scheme ja Dart keeles projekte WebAssembly'sse kompileerida. Peamised muudatused WebAssembly 3.0-s võrreldes teise versiooniga:
- Rakendatakse 64-bitise adresseerimisruumi tuge. Mälu adresseerimiseks saab nüüd kasutada i64 tüüpi, mitte ainult i32, mis laiendab rakenduste jaoks kergesti kättevõetavat adresseerimisruumi 4 GB-lt 16 EB-ni (brauseris on seatud piirang 16 GB-le).
- Oma WebAssembly moodulis on võimalik korraga kasutada mitut mäl objekt ja töötada erinevates adresseerimisruumides. Muuhulgas on andmete kopeerimine erinevate mäl objektide eksemplaride vahel, mis asuvad erinevates adresseerimisruumides, võimalik.
- Lisatud on prügikogumise tugi. Lisaks varem pakutud lineaarsele mälule on sisse viidud eraldi salvestustüüp, mida hallatakse automaatselt prügikogujaga. Kompilaator saab nüüd kasutada eraldi andmestruktuure, massiive ja muutujaid, mille eest vastutab mälu eraldamine ja elutsükli haldamine WebAssembly.
- Lisatud on tüübitud viidete tugi, mis võivad kirjeldada täpset struktuuri väärtusele, millele viide osutab, vältides sellega täiendavaid kontrolle jooksutamise ajal. Toetatakse alamtiipe, tüüpide rekursiooni ja võimalust ohutuks funktsioonidele viitamiseks, mis ei nõua tüübi- ja piirikontrolle jooksutamise ajal.
- Lisatud on sabakõnede (Tail call) tugi, kus praegune funktsioon lõpetab kohe pärast teise funktsiooni kutsumist, mitte ei kasuta koormat virnas.
- Lisatud on erandite töötlemise tugi.
- Lisatud on „leebete“ (relaxed) vektori SIMD-käskude tugi, mis võimaldavad saavutada kõrgemat jõudlust, loobudes rangest semantika järgimisest kõigil riistvaraplatformidel.
- Lisatud on deterministliku täitmisprofiili tugi, mis määratleb platvormist sõltumatu käitumise käskude jaoks, mille täitmistulemused võivad platvormiti erineda (ujuvsõnumid, NaN väärtuse tagastamine, nõrgenenud vektorkäsklused). Selle profiili valimisel tagab Wasm deterministliku käitumise, korduvuse ja ülekantavuse.
- Lisatud on süntaks isiklike annotatsioonide loomiseks, mis võimaldavad lisainfot WebAssembly koodile kinnitada. Varasemalt oli kasutajatugi sektori jaoks, mis võimaldas salvestada meelevaldset teavet, olemas binaarses WebAssembly formaadis, kuid puudus WebAssembly tekstiformaadis. Nüüd on see info võimalik lisada loetaval ja redigeeritaval kujul.
- JavaScript API-sse on lisatud sisseehitatud funktsioonid stringide töötlemiseks. Varem sai JavaScripti stringe WebAssembly-sse edastada ainult väliste linkidena, nüüd on võimalik stringe otse WebAssembly-s kasutada ja nende üle maneevrida.
Allikas: opennet.ru
