Ich habe kürzlich über asm.js und WebAssembly gelesen:
http://ejohn.org/blog/asmjs-javascript-compile-target/
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
Ich bin immer noch verwirrt über ein paar Dinge:
- Wird der Code von asm.js rechtzeitig kompiliert und ausgeführt? In was kompiliert?
- Was sind die Unterschiede zwischen den beiden, außer dass asm.js Text und wasm (Web Assembly) binär sind?
- Was bedeutet dies für andere Skriptsprachen, die im Browser ausgeführt werden? Nehmen wir zum Beispiel Python, wird es sein
- Python-Code zu wasm kompiliert? oder
- Python-Interpreter (Cpython) in Wasm kompiliert und Python interpretieren?
quelle
asm.js ist eine Teilmenge von JS mit "hochoptimierbaren" Anweisungen. Grundsätzlich können Sie den Typ (int, float) deklarieren und die js-Engine (in den Browsern, aber auch in der node.js-Engine) führt die Anweisungen schneller aus. Es hat Vorteile, wenn Ihre App in Verbindung mit WebGL viele Berechnungen oder Grafiken ausführt.
Web Assembly ist ein Binärformat für JS, alle JS, nicht nur asm.js. Es ist kein Bytecode, sondern eine binäre Codierung des AST, die der Parser berechnet. Es hat 2 große Vorteile:
Wir können bereits Code für Browser schreiben, die nicht JS sind: EMSCripten kann C ++ - Code in JS-Code kompilieren. Andere Transcompiler sind bereits verfügbar, um Ihren Code in JS zu kompilieren. Mit asm.js kann dieser Code schneller laufen, wenn er rechnet. Wenn Sie Web Assembly verwenden, wird dieser Code kompakter und der Browser kann ihn schneller verarbeiten (da er das Parsen überspringen kann). Sie müssen kein neues Plugin wie DirectX, JavaApplets, Flash oder Silverlight laden, da alles in der JS-Sandbox ausgeführt wird.
quelle
Verschiedene Browser kompilieren den asm.js-Code auf unterschiedliche Weise. Stand August 2015:
asm.js ist nur JavaScript und muss sich daher genau gemäß der JavaScript-Spezifikation verhalten. Als neuer Standard kann WebAssembly einige Eckfälle beheben, in denen das JavaScript-Verhalten nicht ideal ist (aus Sicht der Leistung oder Kompilierung) [ 3 ]. In Zukunft [ 4 ] kann WebAssembly Funktionen hinzufügen, die sonst in JavaScript nur schwer auszudrücken wären.
In Version 1 besteht die einfachste Möglichkeit, Python in einem Browser auszuführen, darin, einen Python-Interpreter für wasm zu kompilieren, wie Sie sagten. Dies bedeutet beispielsweise, dass der Python GC im Wasm-Code ausgeführt wird und den linearen Wasm-Speicher manuell verwaltet. Es gab bereits experimentelle Projekte, um PyPy [ 5 ] ein asm.js-Backend hinzuzufügen (was für wasm genauso gut funktionieren könnte). Derzeit stößt es auf Einschränkungen von asm.js, die durch die zukünftige Funktion der dynamischen Verknüpfung von wasm behoben werden könnten . Wasm ist außerdem bestrebt, sowohl GC-Integration als auch JIT-Kompilierungsunterstützung bereitzustellen, die eine effizientere und natürlichere Integration in die Webplattform ermöglichen.
quelle