Credo che vi sbagliate nella vostra comprensione di asm.js .
Prima di tutto, dalle loro FAQ
D. asm.js è una nuova lingua?
R. No, è solo (un sottoinsieme di) JavaScript.
E hai chiesto chiarimenti aggiunti :
Ma come è possibile scrivere una [un'applicazione asm.js] in C ++
Non scrivi una "applicazione asm.js", piuttosto asm.js è un obiettivo 1 a cui compilare il tuo codice C ++.
Questo articolo di John Resig fornisce una serie di dettagli che potrebbero spiegare meglio come verrebbe utilizzato asm.js.
A partire da questa immagine:
puoi vedere che asm.js è un obiettivo di traduzione di emscripten . Emscripten gestisce la traduzione del bytecode LLVM in JavaScript e asm.js è un sottoinsieme di JavaScript. Rimanere all'interno del sottoinsieme limitato di JavaScript di asm.js consente di ottimizzare il codice e di eseguirlo più rapidamente.
Hai anche chiesto:
E se scrivo il codice in C ++, allora come usare le API js
Ancora una volta, ti manca un po 'il punto. Asm.js consente il porting delle applicazioni C / C ++ esistenti in JavaScript in modo che possano essere eseguite all'interno di un browser. Normalmente non saresti in grado di utilizzare le API JS nel tuo codice C / C ++ e non c'è nulla di magico in asm.js per permetterlo.
Se hai una nuova applicazione da scrivere che necessita di API JS, allora dovresti scrivere l'applicazione in JS e non futz con il tentativo di scrivere in C ++ e poi port su JavaScript.
E tornando all'articolo di Resig, ci sono due citazioni chiave per la tua domanda:
il tipo di applicazioni destinate ad Asm.js, nel prossimo futuro, sono quelle che trarranno vantaggio dalla portabilità dell'esecuzione in un browser ma che hanno un livello di complessità in cui una porta diretta su JavaScript sarebbe impossibile
e
Come probabilmente vedrai dal codice sopra, Asm.js non è progettato per essere scritto a mano. ... Il caso d'uso più comune per Asm.js in questo momento è nelle applicazioni rispettate da C / C ++ a JavaScript. Quasi nessuna di queste applicazioni interagisce con il DOM in modo significativo, oltre all'utilizzo di WebGL e simili.
Quello che potresti considerare di fare invece è avere un programma JavaScript che chiama le API JS di cui hai bisogno insieme a effettuare chiamate al C ++ che hai compilato in JavaScript. Dai un'occhiata a questo tutorial di emscripten per vedere come chiamare il codice C ++ da JavaScript.
Per alcune ricerche aggiuntive, emscripten ha un tutorial che potrebbe aiutarti a iniziare a capire come prendere il codice C ++, eseguirlo tramite LLVM e quindi target asm.js.
1 A rigor di termini, non è vero. Il codice C / C ++ non è a conoscenza di ciò che verrà compilato, quindi non posso davvero chiamare asm.js una destinazione. Un altro strumento (emscripten) utilizza l'output di LLVM e quindi si traduce in JavaScript conforme a asm.js. Ma lo chiamerò un obiettivo perché è più facile da capire.