Wierzę, że jesteś w błędzie w zrozumieniu asm.js .
Po pierwsze, z ich FAQ
P: Czy asm.js jest nowym językiem?
A. Nie, to tylko (część) JavaScript.
I poprosiłeś o wyjaśnienie :
Ale jak można napisać jedną [aplikację asm.js] w C ++
Nie piszesz „aplikacji asm.js”, a raczej asm.js jest celem 1 do kompilacji kodu C ++.
Ten artykuł autorstwa Johna Resiga zawiera szereg szczegółów, które mogą lepiej wyjaśnić, w jaki sposób zostanie wykorzystany plik asm.js.
Począwszy od tego obrazu:
widać, że asm.js jest celem tłumaczenia emscripten . Emscripten obsługuje tłumaczenie kodu bajtowego LLVM na JavaScript, a asm.js jest podzbiorem JavaScript. Przebywanie w ograniczonym podzbiorze JavaScript asm.js pozwala na optymalizację i szybsze działanie kodu.
Zapytałeś także:
A jeśli napiszę kod w C ++, to jak używać interfejsów API js
Znów brakuje ci sensu. Asm.js umożliwia przenoszenie istniejących aplikacji C / C ++ do JavaScript, aby można je było uruchamiać w przeglądarce. Zwykle nie można używać interfejsów API JS w kodzie C / C ++, a asm.js nie pozwala na to.
Jeśli masz nową aplikację do pisania, która wymaga interfejsów API JS, powinieneś napisać aplikację w JS, a nie pisać, próbując pisać w C ++, a następnie przenieść na JavaScript.
Wracając do artykułu Resiga, są dwa kluczowe cytaty na twoje pytanie:
aplikacje, które w najbliższej przyszłości będą atakować Asm.js, to takie, które skorzystają z przenośności działania w przeglądarce, ale mają poziom złożoności, w którym bezpośredni port JavaScript byłby niemożliwy
i
Jak zapewne widać z powyższego kodu, plik Asm.js nie został zaprojektowany do ręcznego pisania. ... Najczęstszym przypadkiem użycia Asm.js jest w aplikacjach zgodnych z C / C ++ do JavaScript. Prawie żadna z tych aplikacji nie współdziała z DOM w znaczący sposób, poza wykorzystaniem WebGL i tym podobnych.
Zamiast tego powinieneś rozważyć skorzystanie z programu JavaScript, który wywołuje potrzebne interfejsy API JS oraz wykonywanie wywołań do C ++ skompilowanego do JavaScript. Obejrzyj ten samouczek emscripten, aby dowiedzieć się, jak wywołać kod C ++ z JavaScript.
W przypadku niektórych dodatkowych badań emscripten ma samouczek, który może pomóc w zrozumieniu, jak pobrać kod C ++, uruchomić go przez LLVM, a następnie celować w asm.js.
1 Ściśle mówiąc, to nieprawda. Kod C / C ++ nie jest świadomy tego, do czego zostanie skompilowany, więc nie mogę tak naprawdę nazwać asm.js celem. Inne narzędzie (emscripten) pobiera dane wyjściowe LLVM, a następnie tłumaczy je na JavaScript zgodny z asm.js. Ale zamierzam nazwać to celem, ponieważ łatwiej to zrozumieć.