Was ist der Unterschied zwischen asm.js und WebAssembly?
Habe ich gelesen, über asm.js und WebAssembly vor kurzem:
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:
- Ist asm.js code kompiliert, in der Zeit und laufen? Für Sie zusammengestellt, was?
- Andere als asm.js sein text und wasm (web assembly) wird Binär, was sind die Unterschiede zwischen den 2?
- Was bedeutet dies für andere Skriptsprachen, die im browser ausgeführt? Nehmen Sie python zum Beispiel, ist es
- python-code kompiliert, um wasm? oder
- - interpreter für python (Cpython) zusammengestellt wasm und interpretieren python?
Du musst angemeldet sein, um einen Kommentar abzugeben.
asm.js regelmäßig ist javascript-code, und wird in bytecode kompiliert, die von der JS-interpreter wie immer. Aber einen Dolmetscher mit asm-Unterstützung soll das tun, ahead-of-time-Kompilierung, und möglicherweise zu generieren mehr effiziente code-Darstellung aufgrund der statischen Typisierung. Sehen http://asmjs.org/ für details.
Keiner, für jetzt. wasm soll rückwärts-kompatibel, kompilierbar zu asm (die wiederum die ausführbare Datei als normales JS). Es könnte jedoch erweitert werden, mit weitere features in die Zukunft, wie die Unterstützung für Sie wächst.
Letztere eher als Python noch interpretiert werden muss. Scripting-Sprachen, die nicht brauchen einen Dolmetscher, kann natürlich auch direkt kompiliert (w)asm, da gibt es einen compiler (Kette), die es unterstützt als Ziel.
asm.js ist eine Teilmenge von JS mit "sehr optimierbare" Anweisungen. Grundsätzlich können Sie deklarieren den Typ (int, float) und die js-engine (in den Browsern, sondern auch die node.js eine) werden die Befehle ausführen, die schneller. Es hat Vorteile, wenn Sie Ihre app hat eine Menge von Berechnungen oder die Grafik, wenn zusammen verwendet mit WebGL.
web Montage ist ein binäres format für die JS alle JS, nicht nur asm.js. Es ist kein bytecode, es ist eine binäre Kodierung der AST, den der parser berechnet. Es hat 2 große Vorteile:
Wir bereits können, schreiben Sie den code für Browser, die nicht JS: EMSCripten kompilieren von c++ - code in JS code. Andere transcompiler sind bereits verfügbar kompilieren Sie Ihren code in JS.
Mit asm.js kann code schneller laufen, wenn es nicht Mathe.
Mit web-assembly code kompakter wird und der browser verarbeitet werden kann, ist es schneller (weil es in der Lage, überspringen Sie die Analyse).
Sie müssen nicht ein neues plugin zu laden wie DirectX, JavaApplets, Flash oder Silverlight, weil alles, was in der JS-sandbox.
Verschiedene Browser kompilieren asm.js code auf unterschiedliche Weise. Ab August 2015:
asm.js ist nur JavaScript und so Verhalten müssen, genau entsprechend den JavaScript-spec. Als neuer standard, WebAssembly ist in der Lage zu beheben einige Ecke Fällen, in denen JavaScript-Verhalten ist nicht das ideale (aus performance-oder compilation-Perspektive) [Drei]. In die Zukunft [Vier], WebAssembly wird in der Lage sein, um Funktionen hinzuzufügen, die sonst nur schwer Ausdrücken in JavaScript.
In v. 1, die einfachste Möglichkeit zum ausführen von Python im browser kompiliert ein Python-interpreter, um wasm, wie Sie sagte. Dies bedeutet, z.B. die Python-GC läuft im wasm code und die manuelle Verwaltung der wasm linearen Speicher. Es wurde bereits eine experimentelle Projekte hinzufügen asm.js backend PyPy [Fünf] (das könnte genauso gut funktionieren für wasm). Es läuft momentan in Grenzen asm.js das könnte gelöst werden, indem die dynamic linking Zukunft Funktion von wasm. Weiter zu gehen, wasm soll sowohl GC-integration und Die JIT-Kompilierung-Unterstützung beide würden es erlauben, mehr effiziente und Natürliche integration mit der Web-Plattform.