Я вважаю , що ви помиляєтеся в вашому розумінні asm.js .
По-перше, з їх FAQ
Q. Чи є 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, щоб вони могли працювати в браузері. Ви, як правило, не можете використовувати API JS у своєму C / C ++ коді, і немає нічого магічного в тому, що це дозволяє asm.js.
Якщо у вас є нова програма для написання, яка потребує API JS, тоді ви повинні писати програму в JS, а не futz, намагаючись писати на 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 і переводить на JavaScript, сумісний з asm.js. Але я буду називати це мішенню, тому що це легше зрозуміти.