Anteprima standard WebAssembly 2.0 disponibile

Il W3C ha pubblicato una bozza di una nuova specifica che standardizza il middleware WebAssembly 2.0 e le API associate, consentendo la creazione di applicazioni ad alte prestazioni portabili su browser e piattaforme hardware. WebAssembly fornisce codice intermedio di basso livello, universale e indipendente dal browser per l'esecuzione di applicazioni compilate da vari linguaggi di programmazione. Utilizzando JIT per WebAssembly, puoi raggiungere livelli di prestazioni vicini al codice nativo.

La tecnologia WebAssembly può essere utilizzata per eseguire attività ad alte prestazioni nel browser, come codifica video, elaborazione audio, grafica e manipolazione 3D, sviluppo di giochi, operazioni crittografiche e calcoli matematici consentendo il codice scritto in linguaggi compilati come C/C++ .

Tra gli obiettivi principali di WebAssembly c'è quello di garantire portabilità, comportamento prevedibile ed esecuzione identica del codice su piattaforme diverse. Recentemente, WebAssembly è stato promosso anche come piattaforma universale per l'esecuzione sicura del codice su qualsiasi infrastruttura, sistema operativo e dispositivo, non limitato ai browser.

Il W3C ha pubblicato tre bozze di specifiche per WebAssembly 2.0:

  • WebAssembly Core: descrive una macchina virtuale di basso livello per l'esecuzione di codice intermedio WebAssembly. Le risorse associate a WebAssembly vengono fornite in un formato ".wasm", simile ai file ".class" in Java, contenente dati statici e segmenti di codice per lavorare con tali dati.
  • Interfaccia JavaScript WebAssembly: fornisce un'API per l'integrazione con JavaScript. Consente di ottenere valori e passare parametri alle funzioni WebAssembly. L'esecuzione di WebAssembly segue il modello di sicurezza JavaScript e tutta l'interazione con il sistema principale viene eseguita allo stesso modo dell'esecuzione del codice JavaScript.
  • WebAssembly Web API: definisce un'interfaccia di programmazione basata sul meccanismo Promise per la richiesta e l'esecuzione di risorse ".wasm". Il formato della risorsa WebAssembly è ottimizzato per iniziare l'esecuzione senza attendere il caricamento completo del file, migliorando la reattività delle applicazioni Web.

Le principali modifiche in WebAssembly 2.0 rispetto alla prima versione dello standard:

  • Supporto per il tipo vettoriale v128 e relative istruzioni vettoriali che consentono di eseguire azioni su più valori numerici in parallelo (SIMD, single instructions multiple data).
  • Possibilità di importare ed esportare variabili globali mutabili, consentendo l'associazione globale per valori come i puntatori di stack in C++.
  • Nuove istruzioni di conversione da float a int che, invece di lanciare un'eccezione quando il risultato va in overflow, restituiscono il valore minimo o massimo possibile (necessario per SIMD).
  • Istruzioni per l'espansione del segno degli interi (aumento della profondità di bit di un numero mantenendo segno e valore).
  • Supporto per blocchi e funzioni che restituiscono più valori (oltre a passare più parametri alle funzioni).
  • Implementazione delle funzioni JavaScript BigInt64Array e BigUint64Array per la conversione tra il tipo JavaScript BigInt e la rappresentazione WebAssembly di interi a 64 bit.
  • Supporto per i tipi di riferimento (funcref ed externref) e le relative istruzioni associate (select, ref.null, ref.func e ref.is_null).
  • Istruzioni Memory.copy, memory.fill, memory.init e data.drop per copiare i dati tra regioni di memoria e cancellare regioni di memoria.
  • Istruzioni per accedere e modificare direttamente le tabelle (table.set, table.get, table.size, table.grow). Possibilità di creare, importare ed esportare più tabelle in un unico modulo. Funzioni per copiare/riempire tabelle in modalità batch (table.copy, table.init e elem.drop).

Fonte: opennet.ru

Aggiungi un commento