Eu acredito que você está enganado em sua compreensão de asm.js .
Primeiro, a partir do FAQ
P. o asm.js. é um novo idioma?
R. Não, é apenas (um subconjunto de) JavaScript.
E você pediu esclarecimentos adicionados :
Mas como é possível escrever um [um aplicativo asm.js.] em C ++
Você não escreve um "aplicativo asm.js.", mas sim o asm.js. é o alvo 1 para compilar seu código C ++.
Este artigo de John Resig fornece vários detalhes que podem explicar melhor como o asm.js seria usado.
Começando com esta imagem:
você pode ver que o asm.js é um destino de tradução do emscripten . O Emscripten manipula a tradução do bytecode do LLVM em JavaScript, e o asm.js é um subconjunto de JavaScript. Permanecer no subconjunto restrito de JavaScript do asm.js. permite que o código seja otimizado e executado mais rapidamente.
Você também perguntou:
E se eu escrever o código em C ++, como usar o js API-s
Novamente, você está meio que perdendo o objetivo. O Asm.js permite transportar aplicativos C / C ++ existentes para JavaScript, para que possam ser executados em um navegador. Normalmente, você não seria capaz de usar APIs JS no seu código C / C ++, e não há nada mágico no asm.js para permitir isso.
Se você tiver um novo aplicativo para gravação que precise de APIs JS, deverá gravá-lo em JS e não futz tentando gravar em C ++ e, em seguida, portar para JavaScript.
E voltando ao artigo de Resig, há duas citações principais para sua pergunta:
os tipos de aplicativos que atingirão o Asm.js, em um futuro próximo, serão aqueles que se beneficiarão da portabilidade de execução em um navegador, mas que terão um nível de complexidade em que uma porta direta para JavaScript seria inviável
e
Como você provavelmente pode ver no código acima, o Asm.js não foi projetado para ser escrito à mão. ... O caso de uso mais comum para o Asm.js agora é em aplicativos compatíveis de C / C ++ a JavaScript. Quase nenhum desses aplicativos interage com o DOM de maneira significativa, além do uso de WebGL e similares.
O que você pode querer considerar fazer é ter um programa JavaScript que chame as APIs JS necessárias, além de fazer chamadas para o C ++ que você compilou para JavaScript. Dê uma olhada neste tutorial emscripten para ver como chamar o código C ++ do JavaScript.
Para alguma pesquisa adicional, o emscripten possui um tutorial que pode ajudá-lo a entender como usar o código C ++, executá-lo no LLVM e, em seguida, direcionar para asm.js.
1 Estritamente falando, isso não é verdade. O código C / C ++ não tem conhecimento do que será compilado, então não posso realmente chamar o asm.js de destino. Outra ferramenta (emscripten) pega a saída do LLVM e depois converte para JavaScript compatível com asm.js. Mas vou chamá-lo de alvo porque é mais fácil de entender.