Konferenca W3C je napovedala pripravljenost specifikacije, ki standardizira vmesni kodo WebAssembly 3.0 in pripadajoči API, ki omogoča ustvarjanje visoko zmogljivih aplikacij, prenosljivih med brskalniki in strojno opremo. WebAssembly zagotavlja neodvisno od brskalnika univerzalno nizkonivojskega vmesnega koda za izvajanje aplikacij, skompiliranih iz različnih programskih jezikov.
Tehnologija WebAssembly se lahko uporablja za izvedbo nalog v brskalniku, ki zahtevajo visoko zmogljivost, na primer kodiranje videoposnetkov, obdelavo zvoka, manipulacijo z grafiko in 3D, razvoj iger, kriptografske operacije in matematične izračune preko izvajanja v brskalniku kode, napisanih v kompiliranih jezikih, kot sta C/C++. Z uporabo JIT za WebAssembly je mogoče doseči raven zmogljivosti, blizu nativnemu kodu.
Med glavnimi nalogami WebAssembly izstopa zagotavljanje prenosljivosti, predvidljivosti obnašanja in identitete izvajanja kode na različnih platformah. WebAssembly ni omejen le na brskalnike in se prav tako promovira kot univerzalna platforma za varno izvajanje kode v vseh infrastrukturnih, operacijskih sistemih in napravah.
Na voljo so naslednje specifikacije:
- 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 API — zagotavlja API za integracijo z JavaScript. Omogoča pridobivanje vrednosti in prenos parametrov v funkcije WebAssembly. Izvajanje WebAssembly ustreza varnostnemu modelu JavaScript, celotno interakcijo z osnovnim sistemom pa se izvede analogno izvajanju 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.
- WASI API — določa modularni sistemski vmesnik za zagon WebAssembly izven brskalnikov ter zagotavljanja dostopa do virov, kot so datoteke, omrežne povezave, generator naključnih števil in sistemske ure.
Opaženo je, da je bila v novi različici standarda znatno izboljšana podpora za prevajanje visokih programskih jezikov v WebAssembly. Na primer, omogočeno je prevajanje projektov v WebAssembly v jezikih Java, OCaml, Scala, Kotlin, Scheme in Dart. Glavne spremembe v WebAssembly 3.0 v primerjavi z drugo različico standarda:
- Implementirana je podrška za 64-bitni adresni prostor. Za adresiranje memorije sada se može koristiti tip i64, a ne samo i32, što proširuje dostupni adresni prostor za aplikacije s 4 GB na 16 EB (uz ograničenje od 16 GB kada se izvršava u pregledniku).
- Omogućena je simultana upotreba više objekata memorije u jednom WebAssembly modulu i rad s različitim adresnim prostorima. Između ostalog, moguće je kopirati podatke između različitih instanci objekata memorije koje su smeštene u različitim adresnim prostorima.
- Dodana je podrška za sakupljanje smeća. Pored prethodno dostupne linearne memorije, uveden je poseban tip skladišta koji se automatski upravlja pomoću sakupljača smeća. Kompajler sada može koristiti posebne strukture podataka, nizove i promenljive, za koje je odgovoran WebAssembly kada je reč o dodeljivanju memorije i upravljanju životnim ciklusom.
- Dodana je podrška za tipizovane reference, koje mogu opisivati tačnu strukturu vrednosti na koju se referenca odnosi, što omogućava izbegavanje dodatnih provera tokom izvršenja. Podržavaju se podtipovi, rekurzija tipova i mogućnost sigurnog korišćenja referenci na funkcije bez provere tipova i granica tokom izvršenja.
- Dodana je podrška za završne pozive (Tail call), pri čemu trenutna funkcija odmah završava izvršavanje nakon poziva druge funkcije, ne trošeći prostor na steku.
- Dodana je podrška za obradu izuzetaka.
- Dodana je podrška za 'opuštene' (relaxed) vektorske SIMD instrukcije koje omogućavaju postizanje veće performanse odricanjem od strogog poštovanja semantike na svim hardverskim platformama.
- Dodana je podrška za deterministički profil izvođenja, koji određuje ponašanje neovisno o trenutnoj platformi za instrukcije čiji se rezultati izvršavanja mogu razlikovati na različitim platformama (operacije sa pokretnim zarezom, vraćanje NaN vrednosti, opuštene vektorske instrukcije). Kada se odabere ovaj profil, Wasm obezbeđuje determinističko ponašanje, reproduktivnost i prenosivost.
- Dodana je sintaksa za stvaranje vlastitih anotacija, koja omogućava dodavanje dodatnih informacija kodu WebAssembly. Ranije je postojala podrška za korisničke sekcije koje su omogućavale pohranu proizvoljnih informacija u binarnom formatu WebAssembly, ali nije bilo moguće u tekstualnom formatu WebAssembly. Sada postoji mogućnost dodavanja tih informacija u čitljivom i uređivom obliku.
- U JavaScript API dodane su ugrađene funkcije za rad sa stringovima. Ranije su se JavaScript stringovi mogli predavati u WebAssembly samo kao vanjske reference, a sada je moguće direktno pristupati stringovima i manipulirati njima unutar WebAssembly.
Izvor: opennet.ru
