Il linguaggio più universale usato nella programmazione web, supportato da tutti i browser è sicuramente Javascript, che a differenza di altre tipologie di linguaggi, non richiede ai browser l’installazione di plugin o componenti aggiunti.
Javascript infatti è già nativo in tutti i browser presenti attualmente in rete, ma non è il linguaggio web più comodo soprattutto quando si cerca di trasformare applicativi desktop sul web, semplicemente perché Javascript non è nato per questo.
Oggi le nuove applicazioni risultano alquanto complesse per la realizzazione e richiedono molte risorse per poter funzionare correttamente, avendo come risultato un’esecuzione lenta e dispendiosa di risorse.
ASM.JS viene in aiuto a questo problema. Il motore ASM.JS, che ci permette di scrivere le nostre applicazioni web in un linguaggio differente come C++, compila il codice sotto forma di codice macchina (denominato ASM o codice Assembler).
Vediamo dunque come funziona in poche parole: scriviamo il nostro programma in C++, lo compiliamo in linguaggio macchina e scriviamo del semplice codice Javascript contente in una serie di variabili il codice macchina e ASM.JS provvederà ad eseguire il nostro programma scritto in C++ al caricamento della pagina web.
La compilazione di linguaggio macchina in codice Javascript è concettualmente lo stesso trucco utilizzato dai pirati informatici nell’eseguire del codice scritto in shell (shellcode) sul computer di una vittima tramite Javascript.
Quali sono i vantaggi?
I benchmark indicano che l’esecuzione di un algoritmo scritto in C++ puro è 10 volte più veloce se scritto in Javascript, mentre lo stesso algoritmo realizzato in ASM.JS risulta essere 5-6 volte più veloce rispetto al codice Javascript puro.
Se riteniamo che 5-6 volte non sia molto, c’è da considerare che se un algoritmo impiega 5 minuti in ASM.JS impiegherebbe solo 1 minuto, riducendo notevolmente i tempi di esecuzione del codice.
Compiliamo per ASM.JS
Per effettuare la compilazione da C++ ad ASM.JS è necessario installare l’SDK EMScripten, installabile su sistemi Windows, MacOS e GNU/Linux. Questo SDK non richiede particolari privilegi ed è facilmente aggiornabile. L’SDK è disponibile cliccando qui.
Il programma che verrà usato per compilare si chiama emcc situato nella cartella emscripten\master. In questa cartella sono presenti anche molti esempi già pronti per essere utilizzati. Proviamo il classico Hello World.
Se proviamo da terminale a dare il comando:
./emcc tests/hello_world.c
Troveremo come risultato un file chiamato a.out.js che costituisce la versione Javascript del codice di esempio scritto in C++.
Il compilatore può inoltre creare anche la pagina HTML in modo automatico con il comando:
./emcc tests/hello_world.c -o hello.html
La pagina HTML conterrà un grafico di progressione che indica il caricamento attuale dello script Javascript, il programma ASM.JS deve essere scaricato completamente sul computer dell’utente prima di essere avviato. Solo al termine troveremo lo script hello.js nel seguente formato:
<script async type=”text/javascript” src=”hello.js”></script>
Che risulterà essere la versione ASM.JS del programma Hello World!
A chi è rivolto ASM.JS?
La compilazione di codice scritto in un linguaggio a basso livello come C++ in Javascript, è rivolto a tutti coloro che hanno la necessità di integrare nelle proprie pagine web, algoritmi che richiedono dei server con elevate prestazioni e vogliono diminuire i tempi di attesa e di esecuzione delle proprie funzioni da parte degli utenti web.
In modo particolare i vantaggi sono a favore per chi vuol eseguire del rendering 3D ad alta definizione direttamente nel browser diminuendo drasticamente i tempi e l’efficienza della nostra app.