Creo que se equivoca en su comprensión de asm.js .
Primero, de sus preguntas frecuentes
P. ¿Es asm.js un nuevo idioma?
R. No, es solo (un subconjunto de) JavaScript.
Y pediste aclaraciones añadidas :
Pero, ¿cómo es posible escribir uno [una aplicación asm.js] en C ++
No escribe una "aplicación asm.js", sino que asm.js es un destino 1 para compilar su código C ++.
Este artículo de John Resig proporciona una serie de detalles que pueden explicar mejor cómo se usaría asm.js.
Comenzando con esta imagen:
puede ver que asm.js es un objetivo de traducción de emscripten . Emscripten maneja la traducción del código de bytes LLVM a JavaScript, y asm.js es un subconjunto de JavaScript. Mantenerse dentro del subconjunto restringido de JavaScript de asm.js permite que el código se optimice y se ejecute más rápido.
También preguntaste:
Y si escribo el código en C ++, entonces, ¿cómo usar las API-s de js?
De nuevo, te estás perdiendo el punto. Asm.js permite portar aplicaciones C / C ++ existentes a JavaScript para que puedan ejecutarse dentro de un navegador. Normalmente no podría usar las API de JS dentro de su código C / C ++, y no hay nada mágico en asm.js para permitir eso.
Si tiene una nueva aplicación para escribir que necesita API JS, entonces debe escribir la aplicación en JS y no tratar de escribir en C ++ y luego transferir a JavaScript.
Y volviendo al artículo de Resig, hay dos citas clave para su pregunta:
El tipo de aplicaciones que van a apuntar a Asm.js, en el futuro cercano, son aquellas que se beneficiarán de la portabilidad de ejecutarse en un navegador pero que tienen un nivel de complejidad en el que un puerto directo a JavaScript sería inviable
y
Como probablemente pueda ver en el código anterior, Asm.js no está diseñado para ser escrito a mano. ... El caso de uso más común para Asm.js en este momento es en aplicaciones que cumplen con C / C ++ a JavaScript. Casi ninguna de estas aplicaciones interactúa con el DOM de manera significativa, más allá del uso de WebGL y similares.
Lo que quizás desee considerar hacer es tener un programa de JavaScript que llame a las API de JS que necesita junto con realizar llamadas al C ++ que compiló en JavaScript. Eche un vistazo a este tutorial emscripten para ver cómo llamar al código C ++ desde JavaScript.
Para algunas investigaciones adicionales, emscripten tiene un tutorial que puede ayudarlo a comenzar a comprender cómo tomar el código C ++, ejecutarlo a través de LLVM y luego apuntar a asm.js.
1 Hablando estrictamente, eso no es cierto. El código C / C ++ no es consciente de lo que se va a compilar, por lo que realmente no puedo llamar a asm.js como objetivo. Otra herramienta (emscripten) toma la salida LLVM y luego la traduce a JavaScript compatible con asm.js. Pero lo llamaré un objetivo porque es más fácil de entender.