Я считаю , что вы ошибаетесь в вашем понимании asm.js .
Во-первых, из их FAQ
В. Является ли asm.js новым языком?
О. Нет, это просто (подмножество) JavaScript.
А ты попросил уточнения добавил :
Но как можно написать одно [приложение asm.js] на C ++?
Вы не пишете «приложение asm.js», скорее, asm.js - это цель 1, для которой нужно скомпилировать код C ++.
Эта статья Джона Резига содержит ряд деталей, которые могут лучше объяснить, как будет использоваться asm.js.
Начиная с этого изображения:
Вы можете видеть, что asm.js является целью перевода emscripten . Emscripten осуществляет перевод байт-кода LLVM в JavaScript, а asm.js является подмножеством JavaScript. Пребывание в ограниченном подмножестве JavaScript в asm.js позволяет оптимизировать код и ускорить его выполнение.
Вы также спросили:
И если я напишу код на C ++, то как использовать js API-ы
Опять же, вы как бы упускаете из виду. Asm.js позволяет портировать существующие приложения C / C ++ в JavaScript, чтобы их можно было запускать в браузере. Обычно вы не сможете использовать JS API в своем коде на C / C ++, и в asm.js нет ничего волшебного, чтобы это позволить.
Если у вас есть новое приложение для написания, которое нуждается в JS API, вы должны написать приложение на JS, а не пытаться писать на C ++, а затем портировать на JavaScript.
И возвращаясь к статье Ресига, есть два ключевых цитаты на ваш вопрос:
приложения, которые нацелены на Asm.js в ближайшем будущем, - это те приложения, которые выиграют от переносимости работы в браузере, но имеют уровень сложности, при котором прямой порт на JavaScript был бы невозможен
а также
Как вы, вероятно, видите из кода выше, Asm.js не предназначен для написания от руки. ... Наиболее распространенный вариант использования Asm.js в настоящее время - это приложения, совместимые с C / C ++ и JavaScript. Почти ни одно из этих приложений не взаимодействует с DOM значимым образом, помимо использования WebGL и тому подобного.
Вместо этого вам стоит подумать о том, чтобы иметь JavaScript-программу, которая вызывает нужные вам API-интерфейсы JS, а также делать вызовы C ++, скомпилированного в JavaScript. Взгляните на этот учебник, чтобы узнать, как вызывать код C ++ из JavaScript.
Для некоторых дополнительных исследований в emscripten есть учебное пособие, которое поможет вам начать понимать, как брать код на C ++, запускать его через LLVM, а затем нацеливать на asm.js.
+1 Строго говоря, это неправда. Код C / C ++ не знает, для чего он будет скомпилирован, поэтому я не могу назвать asm.js целью. Другой инструмент (emscripten) получает вывод LLVM, а затем переводит его в совместимый с asm.js JavaScript. Но я собираюсь назвать это целью, потому что это легче понять.