Konzorcij W3C je objavil osnutek nove specifikacije, ki standardizira vmesni kodo WebAssembly 2.0 in povezano API, ki omogoča ustvarjanje visokozmogljivih aplikacij, prenosljivih med brskalniki in strojno opremo. WebAssembly nudi univerzalno nizkonivojsko vmesno kodo za izvajanje aplikacij, skompiliranih iz različnih programskih jezikov, neodvisno od brskalnika. Z uporabo JIT za WebAssembly lahko dosežemo raven zmogljivosti, ki je blizu nativnemu kodu.
Tehnologija WebAssembly se lahko uporablja za izvajanje nalog v brskalniku, ki zahtevajo visoko zmogljivost, kot so kodiranje videa, obdelava zvoka, manipulacija z grafiko in 3D, razvoj iger, kriptografske operacije in matematična računanja z organizacijo izvajanja kod, napisanih v prevodnih jezikih, kot sta C/C++.
Med glavnimi nalogami WebAssembly izstopa zagotavljanje prenosljivosti, predvidljivosti vedenja in enotnosti izvajanja kode na različnih platformah. V zadnjem času se WebAssembly tudi promovira kot univerzalna platforma za varno izvajanje kode v vseh infrastrukturi, operacijskih sistemih in napravah, ne omejeno le na brskanje.
W3C je objavil tri osnutke specifikacij WebAssembly 2.0:
- WebAssembly Core — opisuje nizkonivojsko virtualno mašino za izvajanje vmesne kode WebAssembly. Z vmesnim kodom, povezanih z WebAssembly, se dobavljajo v formatu «.wasm», podobnem datotekam «.class» v Javi, ki vsebujejo statične podatke in segmente kode za delo s temi podatki.
- WebAssembly JavaScript Interface — nudi API za integracijo z JavaScriptom. Omogoča pridobivanje vrednosti in prenos parametrov v funkcije WebAssembly. Izvajanje WebAssembly ustreza modelu varnosti JavaScript in vse interakcije z osnovnim sistemom potekajo po analogiji z izvajanjem JavaScript kode.
- WebAssembly Web API — določa programski vmesnik, temelječ na mehanizmu Promise, za zahtevke in izvajanje virov «.wasm». Format virov WebAssembly je optimiziran za začetek izvajanja, ne da bi bilo potrebno čakati na popolno nalaganje datoteke, kar povečuje odzivnost spletnih aplikacij.
Glavne spremembe v WebAssembly 2.0 v primerjavi s prvo različico standarda:
- Podpora vektorskemu tipu v128 in povezanimi vektorskimi ukazi, ki omogočajo hkratno izvajanje dejanj nad več numeričnimi vrednostmi (SIMD, enojna navodila za več podatkov).
- Možnost uvoza in izvoza spreminjajočih se (mutable) globalnih spremenljivk, ki omogočajo uporabo globalne povezave za vrednosti, kot so kazalci na sklad v C++.
- Novi ukazi za pretvorbo tipa float v int, ki namesto da generirajo izjemo pri prenapolnjenju rezultata, vrnejo minimalno ali maksimalno možno vrednost (kar je potrebno za SIMD).
- Ukazi za razširitev znaka celih števil (povečanje števila bitov ob ohranjanju znaka in vrednosti).
- Podpora vračanju več vrednosti z blokov in funkcij (poleg prenosa več parametrov v funkcije).
- Implementacija JavaScript funkcij BigInt64Array in BigUint64Array za pretvorbo med JavaScript tipom BigInt in predstavitvijo 64-bitnih celih števil v WebAssembly.
- Podpora referenčnim tipom (funcref in externref) in povezanimi ukazi (select, ref.null, ref.func in ref.is_null).
- Ukazi memory.copy, memory.fill, memory.init in data.drop za kopiranje podatkov med območji pomnilnika in čiščenje pomnilniških regij.
- Ukazi za neposreden dostop in spremembo tabel (table.set, table.get, table.size, table.grow). Možnost ustvarjanja, uvoza in izvoza več tabel v enem modulu. Funkcije za kopiranje/izpolnjevanje tabel v paketnem načinu (table.copy, table.init in elem.drop).
Izvor: opennet.ru
