Was genau macht asm?

8

Soweit ich weiß, ist Asm.js nur eine strikte Spezifikation von JavaScript, es verwendet die JavaScript-Funktionen und es ist keine neue Sprache.

Zum Beispiel wird anstelle von var a = e; var a = e|0; angeboten.

Meine Frage ist, wenn asm.js nur eine Definition ist und erreicht werden kann, indem man die Art ändert, wie man Variablen und dynamische Typen benutzt und deklariert, was macht "use asm"; eigentlich? Ist es notwendig, diese Zeichenfolge vor dem Deklarieren der Funktionskörper zu setzen oder nicht?

    
Afshin Mehrabani 03.05.2014, 19:21
quelle

2 Antworten

4

Asm.js ist eine sehr strenge Teilmenge von JavaScript, die für Maschinen und nicht für Menschen optimiert ist. Wenn Ihr Browser bestimmten Code als asm.js-Code interpretieren soll, müssen Sie ein Modul erstellen, für das die folgenden Bedingungen gelten:

  • Der gesamte Code ist vollständig statisch typisiert und beschränkt sich auf die sehr restriktive asm.js-Untergruppe von JavaScript
  • Ihr Modul beginnt mit dem "use asm" Pragma

Zusätzlich erlaubt ein asm.js-Modul nur bis zu drei optionale, jedoch sehr spezifische Parameter:

  • ein Standardbibliotheksobjekt, das den Zugriff auf eine Teilmenge der JavaScript-Standardbibliotheken
  • ermöglicht
  • eine Fremdfunktionsschnittstelle (FFI), die Zugriff auf benutzerdefinierte externe JavaScript-Funktionen bietet
  • Ein Heap-Puffer, der ein einzelnes ArrayBuffer als asm.js-Heap
  • bereitstellt

Also sollte Ihr Modul im Prinzip so aussehen:

%Vor%

Die Funktionsparameter Ihres Moduls ermöglichen es asm.js, externen JavaScript-Code aufzurufen und seinen Heap-Puffer mit "normalem" JavaScript zu teilen. Das vom Modul zurückgegebene exports-Objekt ermöglicht externem JavaScript den Aufruf von asm.js.

Lassen Sie die "use asm" weg und Ihr Browser wird nicht wissen, dass er Ihren Code als ein asm.js Modul interpretieren sollte. Es behandelt Ihren Code als "normales" JavaScript. Die Verwendung von "use asm" reicht jedoch nicht aus, damit Ihr Code als asm.js interpretiert werden kann. Sie erfüllen keines der oben genannten Kriterien und Ihr Code wird auch als "gewöhnliches" JavaScript interpretiert:

Weitere Informationen zu asm.js finden Sie z. John Resigs Artikel von 2013 oder offizielle Spezifikationen .

    
John Slegers 22.06.2017, 10:43
quelle
5

"asm verwenden" ist ein Pragma, das der JavaScript-Engine spezifisch sagt, wie sie interpretiert wird. Obwohl es ein gültiges JavaScript ist und ohne das Pragma verwendet werden kann, kann FireFox zusätzliche Optimierungen an der Untermenge Asm.js vornehmen, um die Leistung zu erhöhen. Um dies zu tun, muss es wissen, dass es Asm.js ist.

    
Syntax 03.05.2014 19:26
quelle

Tags und Links