Ich glaube , dass Sie in Ihrem Verständnis der irrt asm.js .
Zunächst einmal aus ihren FAQ
Frage: Ist asm.js eine neue Sprache?
A. Nein, es ist nur (eine Teilmenge von) JavaScript.
Und Sie baten um Klarstellung hinzugefügt :
Aber wie ist es möglich, eine [asm.js-Anwendung] in C ++ zu schreiben?
Sie schreiben keine "asm.js" -Anwendung, sondern asm.js ist ein Ziel 1 zum Kompilieren Ihres C ++ - Codes.
Dieser Artikel von John Resig enthält eine Reihe von Details, die möglicherweise die Verwendung von asm.js besser erläutern.
Mit diesem Bild beginnen:
Sie können sehen, dass asm.js ein Übersetzungsziel von emscripten ist . Emscripten übersetzt den LLVM- Bytecode in JavaScript, und asm.js ist eine Teilmenge von JavaScript. Durch die Einhaltung der eingeschränkten JavaScript-Untermenge von asm.js kann der Code optimiert und schneller ausgeführt werden.
Sie haben auch gefragt:
Und wenn ich den Code in C ++ schreibe, wie man die js API-s benutzt
Auch hier verpassen Sie den Punkt. Mit Asm.js können vorhandene C / C ++ - Anwendungen in JavaScript portiert und in einem Browser ausgeführt werden. Normalerweise können Sie in Ihrem C / C ++ - Code keine JS-APIs verwenden, und das lässt sich durch nichts Magisches an asm.js ändern.
Wenn Sie eine neue Anwendung zum Schreiben haben, die JS-APIs benötigt, sollten Sie die Anwendung in JS schreiben und nicht mit dem Versuch, in C ++ zu schreiben und dann auf JavaScript zu portieren, herumspielen.
Und zurück zu Resigs Artikel, es gibt zwei Schlüsselzitate für Ihre Frage:
Die Art von Anwendungen, die in naher Zukunft auf Asm.js abzielen werden, sind solche, die von der Portierbarkeit der Ausführung in einem Browser profitieren, jedoch eine Komplexität aufweisen, bei der ein direkter Port auf JavaScript nicht möglich wäre
und
Wie Sie wahrscheinlich aus dem obigen Code ersehen können, ist Asm.js nicht dazu gedacht, von Hand geschrieben zu werden. ... Der derzeit am häufigsten verwendete Anwendungsfall für Asm.js sind Anwendungen, die von C / C ++ bis JavaScript ausgeführt werden. Fast keine dieser Anwendungen interagiert auf sinnvolle Weise mit dem DOM, abgesehen von der Verwendung von WebGL und dergleichen.
Möglicherweise möchten Sie stattdessen ein JavaScript-Programm verwenden, das die erforderlichen JS-APIs aufruft und das C ++ aufruft, das Sie mit JavaScript kompiliert haben. In diesem emscripten-Tutorial erfahren Sie , wie Sie C ++ - Code aus JavaScript aufrufen.
Für zusätzliche Recherchen bietet emscripten ein Lernprogramm , mit dessen Hilfe Sie lernen können , wie Sie C ++ - Code verwenden, ihn über LLVM ausführen und dann asm.js als Ziel festlegen.
1 Genau genommen stimmt das nicht. Der C / C ++ - Code weiß nicht, wohin er kompiliert werden soll, daher kann ich asm.js nicht wirklich als Ziel aufrufen. Ein anderes Tool (emscripten) übernimmt die LLVM-Ausgabe und übersetzt sie in asm.js kompatibles JavaScript. Aber ich werde es ein Ziel nennen, weil es einfacher zu verstehen ist.