Consorțiul W3C a publicat o versiune preliminară a noii specificații care standardizează codul intermediar WebAssembly 2.0 și API-ul asociat, permițând crearea de aplicații de înaltă performanță, portabile între browsere și platforme hardware. WebAssembly oferă un cod intermediar universal, de nivel scăzut, independent de browser, pentru executarea aplicațiilor compilate din diverse limbaje de programare. Datorită utilizării JIT pentru WebAssembly, se poate atinge un nivel de performanță comparabil cu codul nativ.
Tehnologia WebAssembly poate fi utilizată pentru a efectua în browser sarcini care necesită performanță ridicată, cum ar fi codarea video, procesarea audio, manipularea graficii și 3D, dezvoltarea jocurilor, operațiuni criptografice și calcule matematice prin organizarea execuției în browser a codului scris în limbaje compilabile, cum ar fi C/C++.
Printre principalele obiective ale WebAssembly se numără asigurarea portabilității, predictibilitatea comportamentului și identitatea execuției codului pe diferite platforme. Recent, WebAssembly este, de asemenea, promovat ca o platformă universală pentru execuția sigură a codului în orice infrastructuri, sisteme de operare și dispozitive, fără a se limita la browsere.
W3C a publicat trei specificații preliminare pentru WebAssembly 2.0:
- WebAssembly Core — descrie o mașină virtuală de nivel jos pentru executarea codului intermediar WebAssembly. Resursele asociate cu WebAssembly sunt livrate în format „.wasm”, similar cu fișierele „.class” din Java și conțin date statice și segmente de cod pentru a lucra cu aceste date.
- Interfața WebAssembly JavaScript — oferă un API pentru integrarea cu JavaScript. Permite obținerea de valori și transmiterea parametrilor în funcții WebAssembly. Execuția WebAssembly respectă modelul de securitate JavaScript și toată interacțiunea cu sistemul de bază se realizează analog cu execuția codului JavaScript.
- WebAssembly Web API — definește o interfață de programare bazată pe mecanismul Promise pentru a solicita și executa resurse „.wasm”. Formatul resurselor WebAssembly este optimizat pentru a începe execuția fără a aștepta încărcarea completă a fișierului, ceea ce crește reactivitatea aplicațiilor web.
Principalele modificări în WebAssembly 2.0 comparativ cu prima versiune a standardului:
- Suport pentru tipul vectorial v128 și instrucțiuni vectoriale asociate, care permit executarea în paralel a unor acțiuni asupra mai multor valori numerice (SIMD, instrucțiune unică de date multiple).
- Posibilitatea de a importa și exporta variabile globale modificabile, permițând utilizarea legăturilor globale pentru valori precum pointerii de stivă în C++.
- Instrucțiuni noi pentru conversia tipului float în int care, în loc să genereze o excepție la depășirea rezultatului, returnează valoarea minimă sau maximă posibilă (necesară pentru SIMD).
- Instrucțiuni pentru extinderea semnului numerelor întregi (creșterea dimensiunii numărului cu păstrarea semnului și valorii).
- Suport pentru returnarea mai multor valori prin blocuri și funcții (în plus față de transmiterea mai multor parametri în funcții).
- Implementarea funcțiilor JavaScript BigInt64Array și BigUint64Array pentru conversia între tipul BigInt din JavaScript și reprezentarea numerelor întregi pe 64 de biți în WebAssembly.
- Suport pentru tipurile de referință (funcref și externref) și instrucțiunile asociate (select, ref.null, ref.func și ref.is_null).
- Instrucțiuni memory.copy, memory.fill, memory.init și data.drop pentru copierea datelor între zonele de memorie și curățarea regiunilor de memorie.
- Instrucțiuni pentru accesul direct și modificarea tabelelor (table.set, table.get, table.size, table.grow). Posibilitatea de a crea, importa și exporta mai multe tabele într-un singur modul. Funcții pentru copierea/umplerea tabelelor în modul lot (table.copy, table.init și elem.drop).
Sursa: opennet.ro
