Google, Mozilla, Microsoft: insieme per un linguaggio binario per il web

Si chiama WebAssembly e consentirà a molti più linguaggi di programmazione di produrre codice per il web

Web Assembly

Web Assembly è il nuovo formato binario per la compilazione di applicazioni web. Credits: Mozilla Hacks

Google, Microsoft e Mozilla e gli ingegneri di WebKit Open Source Project hanno annunciato l’intenzione di voler unire le forze per lanciare WebAssembly, un nuovo formato binario per la compilazione di applicazioni per il web.

Negli anni sono stati notevoli gli sforzi che hanno consentito agli sviluppatori di aggirare le limitazioni che JavaScript imponeva, progettando compilatori che convertivano codici da altri linguaggi a JavaScript. Alcuni di questi progetti si concentrano sull’aggiunta di funzionalità, come TypeScript di Microsoft o asm.js di Mozilla. Tutti questi progetti, ora, stanno per essere unificati sotto forma di WebAssembly.

Non si tratta di un vero e proprio linguaggio di programmazione, ma di una sottocategoria di JavaScript progettata per comportarsi allo stesso modo sia che venga lanciata all’interno di un motore JavaScript sia che venga eseguita in un compilatore ahead-of-tume (AoT).

Infatti, asm.js nacque per aumentare le prestazioni della applicazioni Web scritte con linguaggi sorgente come C o C++. Si fa quindi riferimento all’atto di compilazione di un linguaggio di alto o medio livello nel codice macchina, con lo scopo di eseguire in modo nativo il binario risultante dal processo.

Di default, i file JavaScript sono semplici file di testo che vengono scaricati dal server e quindi analizzati e compilati dal motore JavaScript nel browser. Il team di WebAssembly ha deciso di procedere con un formato binario perché tale codice può essere compresso molto più degli standard JavaScript e perché risulta molto più veloce, per il motore, decodificare il formato binario (fino a 23x più rapido).

Da tempo, l’obiettivo di asm.js di Mozilla è quello di portare al web velocità quasi native. Anche Google aveva proposto il progetto Native Client per l’esecuzione di codice nativo, ma non ebbe lauto successo. Sembra, invece, che WebAssembly sia il punto di incontro di questi progetti e riuscirà a portare il meglio di ciascuno di loro all’interno dei browser.

Come primo passo, il team si propone di offrire quasi le stesse funzionalità di asm.js (e gli sviluppatori saranno in grado di utilizzare lo stesso strumento Emscripten per WebAssembly come per la compilazione di codice asm.js).

In questa fase iniziale, il team prevede anche di lanciare la cosiddetta polyfill library che traduce codice WebAssembly in JavaScript così da poter essere eseguito in qualsiasi browser, anche quelli senza supporto WebAssembly nativo. Nel corso del tempo, poi, la squadra si concentrerà sugli strumenti come compilatori e debugger e nell’aggiunta di altri linguaggi (Rust, Go, C#…).

Come sottolinea l’inventore di JavaScript (e CEO a breve termine di Mozilla), Brendan Eich, i due sistemi non saranno per sempre legati: una volta che i principali browser supporteranno il nuovo formato, JavaScript e WebAssembly potranno di nuovo divergere.

L’idea non è, infatti, quella di sostituire JavaScript, ma di consentire a molti più linguaggi di produrre codice per il web. Infatti è probabile che JavaScript e WebAssembly saranno utilizzati in parallelo. Alcune parti delle applicazioni potranno essere in WebAssembly (ad esempio: animazione, visualizzazione, compressione), mentre l’interfaccia grafica potrebbe essere scritta in JavaScript.

È cosa rara vedere tutti i principali produttori di browser lavorare insieme ad un progetto come questo, quindi si tratta sicuramente di qualcosa che vale la pena seguire nei prossimi mesi e anni.