Je crois que vous vous trompez dans votre compréhension de asm.js .
Tout d'abord, à partir de leur FAQ
Q. asm.js est-il une nouvelle langue?
R. Non, c'est juste (un sous-ensemble de) JavaScript.
Et vous avez demandé des éclaircissements ajoutés :
Mais comment est-il possible d'en écrire une [une application asm.js] en C ++
Vous n'écrivez pas une "application asm.js", mais asm.js est une cible 1 pour compiler votre code C ++.
Cet article de John Resig fournit un certain nombre de détails qui pourraient mieux expliquer comment asm.js serait utilisé.
En commençant par cette image:
vous pouvez voir que asm.js est une cible de traduction pour emscripten . Emscripten gère la traduction du bytecode LLVM en JavaScript, et asm.js est un sous-ensemble de JavaScript. Rester dans le sous-ensemble restreint de asm.js de JavaScript permet d'optimiser le code et de l'exécuter plus rapidement.
Vous avez également demandé:
Et si j'écris le code en C ++, alors comment utiliser les API js
Encore une fois, vous manquez le point. Asm.js permet de porter des applications C / C ++ existantes en JavaScript afin qu'elles puissent être exécutées dans un navigateur. Normalement, vous ne pourriez pas utiliser les API JS dans votre code C / C ++, et il n'y a rien de magique dans asm.js pour permettre cela.
Si vous avez une nouvelle application à écrire qui a besoin d'API JS, vous devez écrire l'application en JS et non futz en essayant d'écrire en C ++, puis de la porter en JavaScript.
Et pour revenir à l'article de Resig, il y a deux citations clés pour votre question:
le type d'applications qui cibleront Asm.js, dans un avenir proche, sont celles qui bénéficieront de la portabilité de l'exécution dans un navigateur mais qui ont un niveau de complexité dans lequel un port direct vers JavaScript serait irréalisable
et
Comme vous pouvez probablement le voir dans le code ci-dessus, Asm.js n'est pas conçu pour être écrit à la main. ... Le cas d'utilisation le plus courant pour Asm.js est actuellement dans les applications conformes de C / C ++ à JavaScript. Presque aucune de ces applications n'interagit avec le DOM de manière significative, au-delà de l'utilisation de WebGL et similaires.
Ce que vous voudrez peut-être envisager à la place, c'est d'avoir un programme JavaScript qui appelle les API JS dont vous avez besoin, ainsi que des appels au C ++ que vous avez compilé en JavaScript. Jetez un œil à ce didacticiel emscripten pour voir comment appeler du code C ++ à partir de JavaScript.
Pour quelques recherches supplémentaires, emscripten propose un didacticiel qui pourrait vous aider à comprendre comment prendre le code C ++, l'exécuter via LLVM, puis cibler asm.js.
1 Strictement parlant, ce n'est pas vrai. Le code C / C ++ ne sait pas à quoi il va être compilé, donc je ne peux pas vraiment appeler asm.js une cible. Un autre outil (emscripten) prend la sortie LLVM puis traduit en JavaScript compatible asm.js. Mais je vais appeler cela un objectif car il est plus facile à comprendre.