Consorzio W3C per l'assegnazione della tecnologia WebAssembly come standard raccomandato. WebAssembly fornisce un codice intermedio universale a basso livello indipendente dal browser per l'esecuzione di applicazioni compilate da diversi linguaggi di programmazione. WebAssembly è posizionato come una tecnologia più promettente e portabile per la creazione di applicazioni web ad alte prestazioni. WebAssembly può essere utilizzato per affrontare attività che richiedono elevate prestazioni, come la codifica video, l'elaborazione audio, la manipolazione grafica e 3D, lo sviluppo di giochi, operazioni crittografiche, calcoli matematici e la creazione di implementazioni portabili di linguaggi di programmazione.
WebAssembly ricorda molto Asm.js, ma si differenzia per essere un formato binario non legato a JavaScript. In WebAssembly non è necessario l'uso di un garbage collector, poiché si utilizza la gestione esplicita della memoria. Grazie all'uso del JIT, per WebAssembly è possibile raggiungere un livello di prestazioni vicino al codice nativo. Tra le principali sfide di WebAssembly c'è la garanzia della portabilità, la prevedibilità del comportamento e l'identità dell'esecuzione del codice su diverse piattaforme. Ultimamente, WebAssembly è anche come una piattaforma universale per l'esecuzione sicura del codice in qualsiasi infrastruttura, sistema operativo e dispositivo, senza limitarsi ai browser.
Il W3C ha standardizzato tre specifiche relative a WebAssembly:
- — descrive una macchina virtuale a basso livello per l'esecuzione del codice intermedio WebAssembly. Le risorse associate a WebAssembly sono fornite nel formato «.wasm», simile a un file «.class» in Java e contenente dati statici e segmenti di codice per lavorare con questi dati.
- — definisce un'interfaccia di programmazione basata sul meccanismo Promise per richiedere ed eseguire risorse «.wasm». Il formato delle risorse WebAssembly è ottimizzato per l'avvio dell'esecuzione senza attendere il caricamento completo del file, il che aumenta la reattività delle applicazioni web.
- — fornisce un'API per l'integrazione con JavaScript. Permette di ottenere valori e trasmettere parametri alle funzioni WebAssembly. L'esecuzione di WebAssembly rispetta il modello di sicurezza di JavaScript e tutta l'interazione con il sistema sottostante avviene analogamente all'esecuzione del codice JavaScript.
In futuro si prevede di preparare specifiche per tali funzionalità di WebAssembly come:
- Multi-threading con memoria condivisa e accesso atomico alla memoria;
- Operazioni vettoriali basate su SIMD, che consentono di parallelizzare l'esecuzione dei cicli;
- Tipi di riferimento per puntamenti diretti su oggetti dal codice WebAssembly;
- Possibilità di chiamata di funzioni senza consumare spazio aggiuntivo nello stack;
- Integrazione con i moduli ECMAScript — possibilità di caricare codice WebAssembly da JavaScript come moduli conformi alla specifica ECMAScript 6;
- Modalità di lavoro con il garbage collector;
- Interfacce di debug;
- (WebAssembly System Interface) — API per interagire direttamente con il sistema operativo (API POSIX per lavorare con file, socket, ecc.).
Fonte: opennet.ru
