Konsorciumi W3C publikoi një draft të ri të specifikimit, i cili standardizon kodin ndërmjetës WebAssembly 2.0 dhe API-në përkatëse, duke lejuar krijimin e aplikacioneve me performancë të lartë, të transportueshme midis shfletuesve dhe platformave harduerike. WebAssembly ofron një kod ndërmjetës universalis të nivelit të ulët që nuk varet nga shfletuesi për të ekzekutuar aplikacione të kompiluar nga gjuhë të ndryshme programuese. Falë angazhimit të JIT për WebAssembly, është e mundur të arrihet një nivel performance afër kodit natyror.
Teknologjia WebAssembly mund të përdoret për të ekzekutuar në shfletues detyra që kërkojnë performancë të lartë, siç janë kodimi i videove, përpunimi i zërit, manipulimi i grafikës dhe 3D, zhvillimi i lojërave, operacionet kriptografike dhe llogaritjet matematikore duke organizuar ekzekutimin në shfletues të kodit të shkruar në gjuhë të kompilueshme, si C/C++.
Mes detyrave kryesore të WebAssembly theksohet sigurimi i transportueshmërisë, parashikueshmërisë së sjelljes dhe identitetit të ekzekutimit të kodit në platforma të ndryshme. Kohët e fundit, WebAssembly po promovojë gjithashtu si një platformë universale për ekzekutimin e sigurt të kodit në çdo infrastrukturë, sistem operativ dhe pajisje, duke mos u kufizuar vetëm në shfletues.
W3C publikoi tri specifikime preliminare të WebAssembly 2.0:
- WebAssembly Core â pĂ«rshkruan njĂ« makinĂ« virtuale tĂ« nivelit tĂ« ulĂ«t pĂ«r ekzekutimin e kodit tĂ« ndĂ«rmjetĂ«m WebAssembly. Burimet e lidhura me WebAssembly ofrohen nĂ« formatin ".wasm", i ngjashĂ«m me skedarĂ«t ".class" nĂ« Java dhe pĂ«rmbajnĂ« tĂ« dhĂ«na statike dhe segmente kodi pĂ«r tĂ« punuar me kĂ«to tĂ« dhĂ«na.
- WebAssembly JavaScript Interface â ofron API pĂ«r integrimin me JavaScript. Lejon marrjen e vlerave dhe kalimin e parametrave nĂ« funksionet e WebAssembly. Ekzekutimi i WebAssembly pĂ«rputhet me modelin e sigurisĂ« tĂ« JavaScript dhe tĂ« gjitha ndĂ«rveprimet me sistemin kryesor realizohen sipas logjikĂ«s sĂ« ekzekutimit tĂ« kodit JavaScript.
- WebAssembly Web API â pĂ«rcakton njĂ« ndĂ«rfaqe programuese mbi mekanizmin e Promise pĂ«r kĂ«rkimin dhe ekzekutimin e burimeve ".wasm". Formati i burimeve WebAssembly Ă«shtĂ« optimizuar pĂ«r fillimin e ekzekutimit, pa pritur ngarkimin e plotĂ« tĂ« skedarit, duke lejuar njĂ« pĂ«rmirĂ«sim tĂ« reagueshmĂ«risĂ« sĂ« aplikacioneve web.
Kryesore ndryshimet në WebAssembly 2.0, në krahasim me versionin e parë të standardit:
- Përkrahja e tipit vektorial v128 dhe instrukcioneve të lidhura vektoriale, duke lejuar ekzekutimin paralel të operacioneve mbi disa vlera numerike (SIMD, single instruction multiple data).
- Mundësia e importit dhe eksportit të variablave globalë të ndryshueshëm (mutable), duke lejuar përdorimin e lidhjes globale për vlera të tilla si treguesit e stack në C++.
- Instruksione të reja për konvertimin e tipit float në int, të cilat në vend që të gjenerojnë një përjashtim në raste mbushjeje, kthejnë vlerën minimale ose maksimale të mundshme (e nevojshme për SIMD).
- Instruksione për zgjerimin e shenjës së numrave të plotë (rritja e numrit me ruajtjen e shenjës dhe vlerës).
- Mbështetje për kthimin e disa vlerave nëpërmjet blloqeve dhe funksioneve (përveç kalimit të disa parametrave në funksione).
- Implementimi i funksioneve JavaScript BigInt64Array dhe BigUint64Array për konvertimin midis tipit JavaScript BigInt dhe përfaqësimit të numrave të plotë 64-bit në WebAssembly.
- Mbështetje për tipet referencë (funcref dhe externref) dhe instruksionet e lidhura me to (select, ref.null, ref.func dhe ref.is_null).
- Instruksione memory.copy, memory.fill, memory.init dhe data.drop për kopjimin e të dhënave midis hapësirave të memories dhe pastrimin e rajoneve të memories.
- Instruksione për qasje dhe ndryshim direkt të tabelave (table.set, table.get, table.size, table.grow). Mundësia për krijimin, importimin dhe eksportimin e disa tabelave në një modul. Funksionet e kopjimit/zgjerimit të tabelave në mënyrë grumbuj (table.copy, table.init dhe elem.drop).
Burimi: opennet.ru
