A W3C konzorcium bejelentette a WebAssembly 3.0 és a hozzá tartozó API szabványosításának elkészültét, amely lehetővé teszi a különféle böngészők és hardverplatformok között hordozható, nagy teljesítményű alkalmazások létrehozását. A WebAssembly böngészőfüggetlen univerzális alacsony szintű közbenső kódot biztosít, amely lehetővé teszi különböző programozási nyelvekből származó alkalmazások futtatását.
A WebAssembly technológia olyan böngészőben futtatható feladatok elvégzésére alkalmazható, amelyek nagy teljesítményt igényelnek, például videókódolás, hangfeldolgozás, grafika- és 3D-manipuláció, játékkészítés, kriptográfiai műveletek és matematikai számítások, azáltal, hogy a böngészőben futtatjuk a különböző programozási nyelvek (például C/C++) által írt kódot. A WebAssembly JIT használatával a natív kódhoz közeli teljesítményt érhetünk el.
A WebAssembly egyik alapvető feladata a hordozhatóság biztosítása, a viselkedés előrejelezhetősége, valamint a kód végrehajtásának azonossága különböző platformokon. A WebAssembly nem korlátozódik a böngészőkre, hanem egy univerzális platformként is előmozdítják a kód biztonságos végrehajtására bármilyen infrastruktúrában, operációs rendszerben és eszközön.
Elérhetők a következő specifikációk:
- A WebAssembly Core a WebAssembly közbenső kód végrehajtásához szükséges alacsony szintű virtuális gépet írja le. A WebAssembly-hez kapcsolódó erőforrások „.wasm” formátumban érkeznek, amely hasonló a Java „.class” fájljaihoz, és statikus adatokat, valamint kódszegmenseket tartalmaz, amelyek ezekkel az adatokkal dolgoznak.
- WebAssembly JavaScript API — API-t biztosít a JavaScript-tel való integrációhoz. Lehetővé teszi az értékek lekérdezését és paraméterek átadását a WebAssembly függvényeibe. A WebAssembly végrehajtása megfelel a JavaScript biztonsági modelljének, és minden interakció a fő rendszerrel hasonló módon történik, mint a JavaScript kód végrehajtásakor.
- A WebAssembly Web API egy ígéretek mechanizmusán alapuló programozási felületet határoz meg a „.wasm” források kérésére és végrehajtására. A WebAssembly erőforrások formátuma optimalizált a végrehajtás megkezdésére, anélkül, hogy megvárná a fájl teljes betöltését, így növelve a webalkalmazások reakcióképességét.
- WASI API — moduláris rendszerinterfészt határoz meg a WebAssembly böngészőkön kívüli futtatásához, valamint fájlok, hálózati kapcsolatok, véletlenszám-generátorok és rendszeridők hozzáféréséhez.
Megjegyzendő, hogy az új szabványváltozatban jelentősen javult a magas szintű programozási nyelvek WebAssembly-be történő fordításának támogatása. Például lehetőség van WebAssembly-be történő fordításra olyan nyelveken, mint a Java, OCaml, Scala, Kotlin, Scheme és Dart. A WebAssembly 3.0-ra vonatkozó legfontosabb változások a második verzióhoz képest:
- Bevezetésre került a 64 bites címtér támogatása. A memória címzéshez mostantól i64 típust is használhatunk, nemcsak i32-t, ami az alkalmazások számára elérhető címtartományt 4 GB-ról 16 EB-ra növeli (böngészőben a korlátozás 16 GB-ra van állítva).
- Lehetőség nyílt egy WebAssembly modulon belül több memória objektum egyidejű használatára és különböző címtartományokkal való munkára. Többek között lehetővé vált az adatok másolása a különböző címtartományokban elhelyezett memória objektumok példányai között.
- Bevezetésre került a szemétgyűjtés támogatása. A korábban elérhető lineáris memória mellett egy külön tárolótípust kínálunk, amelyet automatikusan kezel a szemétgyűjtő. A fordító mostantól különböző adatstruktúrákat, tömböket és változókat használhat, amelyek memóriafoglalásáért és élettartamkezeléséért a WebAssembly felel.
- Bevezetésre került a típuskulcsok támogatása, amelyek lehetővé teszik a referált érték pontos struktúrájának leírását, ezáltal elkerülve a végrehajtás során szükséges további ellenőrzéseket. Támogatott a szubtípusok, a típusok rekurziója, valamint a típuskövetelmények és határok nélküli biztonságos funkcióreferenciák használata.
- A farokhívások (Tail call) támogatása is bevezetésre került, amelyek során a jelenlegi funkció azonnal befejezi a végrehajtást egy másik funkció hívása után, anélkül, hogy helyet foglalna el a stacken.
- Bevezetésre került a kivételek kezelésének támogatása.
- Bevezetésre került a „lazább” (relaxed) vektorizált SIMD utasítások támogatása, amelyek lehetővé teszik a nagyobb teljesítmény elérését az összes hardverplatformon a szigorú végrehajtási szemantika mellőzésével.
- Bevezetésre került a determinisztikus végrehajtási profilok támogatása, amelyek meghatározzák a jelenlegi platformtól független viselkedést azoknál az utasításoknál, amelyek végrehajtási eredményei platformonként eltérhetnek (lebegőpontos műveletek, NaN érték visszaadása, lazább vektorizált utasítások). A profil kiválasztásakor a Wasm biztosítja a determinisztikus viselkedést, reprodukálhatóságot és hordozhatóságot.
- A szintaxis hozzáadva a saját annotációk létrehozásához, amelyek lehetővé teszik további információk csatolását a WebAssembly kódhoz. Korábban a felhasználói szekciók támogatása, amelyek lehetőséget adtak önálló információk tárolására, megvolt a WebAssembly bináris formátumában, de hiányzott a WebAssembly szöveges formátumából. Most lehetőség van ilyen információkat hozzáadni olvasható és szerkeszthető formában.
- A JavaScript API-ban beépített funkciók kerültek hozzáadásra a karakterláncok kezeléséhez. Korábban a JavaScript karakterláncokat csak külső hivatkozásokként lehetett átadni a WebAssembly-nek, mostantól azonban közvetlenül hivatkozhatunk a karakterláncokra és manipulálhatjuk azokat a WebAssembly-n belül.
Forrás: opennet.ru
