it-swarm.com.de

Was ist ASM.js und was bedeutet es für alle?

Ich fange an, Gerüchte über dieses Projekt namens ASM.js zu hören. Derzeit ist ihre Website schrecklich und verwirrend. Folgendes weiß ich aus meiner Recherche im Internet.

  • Es ist eine Teilmenge von JavaScript, die stark optimiert werden kann. Ich vermute, weil es die dynamischeren Teile der Sprache vermeidet.
  • Die Leistung von in ASM.js kompiliertem Code läuft mit etwa der halben Geschwindigkeit von C (nicht leicht).
  • Compiler sollen ihre Zielsprache ASM.js.
  • Firefox wird mit eingebauter ASM.js-Optimierung ausgeliefert.
  • Die Teams von Mozilla und Unreal haben die Unreal Engine ins Web portiert damit und in einem Build von Firefox mit nahezu nativen Geschwindigkeiten.

Es scheint keine konkreten Informationen im Web darüber zu geben, was dies wirklich ist oder was nützlich oder letztendlich zweckmäßig ist. Kann ich meine ansonsten serverseitigen Codebasen kompilieren und im Browser mit nahezu nativen Geschwindigkeiten ausführen lassen? Was sind die Konsequenzen für Entwickler?

28
Jarrod Nettles

Sie haben bereits beschrieben, was es ist. Die Verwendung ist, dass es sich um eine einfache Sprache handelt, die in all Browsern funktioniert, in den meisten ziemlich schnell und in einigen sehr schnell ist. Was Sie daraus machen, ist so offen wie das, was Sie mit jeder anderen Programmiersprache machen.

Der Anwendungsfall, an dem Mozilla am meisten interessiert zu sein scheint, ist folgender: Es gibt bereits Möglichkeiten, Sprachen mit LLVM-Backends (am bekanntesten C und C++) über Emscripten in JavaScript zu kompilieren. asm.js kommt dem sehr nahe, was Emscripten bereits ausgibt. Dadurch kann Emscripten-Code (der auf den heutigen JavaScript-JIT-Compilern bereits beeindruckend schnell ist) noch schneller werden, was das Ziel der Portierung vorhandener Codebasen ins Web fördert. Wiederum, wofür genau Sie dies verwenden, ist Ihre Entscheidung. Das Portieren von Spielen ist ein Anwendungsfall (an dem Mozilla anscheinend aktiv beteiligt ist), aber in C und C++ sind unzählige Dinge geschrieben, von denen einige für die Website einer anderen Person nützlich sein könnten. Einige habe ich herumgeschleudert gesehen (plus einige meiner eigenen), ohne Garantie für die Machbarkeit:

  • Portierung von Allzweckalgorithmen (z. B. zlib-, libjpeg-, openssl- und FFT-Implementierungen), um JavaScript/Websites zu mehr Aufgaben zu befähigen, ohne einen neuen Webstandard erstellen zu müssen und abhängig von den einzelnen Browsern, um ihn zu implementieren.
  • Portieren von Interpreten, damit andere Sprachen als JavaScript im Browser ausgeführt werden können, mit weniger Aufwand und minimalem Portierungsaufwand.
  • Verwenden von asm.js als Backend für mehr Compiler, insbesondere für solche, die JavaScript nicht gut zuordnen und die meisten Funktionen und den Overhead nicht benötigen. Ein Beispiel könnte eine Sprache sein, die für schnelles numerisches Arbeiten ohne Speicherzuweisung entwickelt wurde.
  • Verwenden von asm.js zum Erstellen eines JIT in JavaScript. Es kann jede Sprache implementieren - zum Beispiel ActionScript .
  • In gleicher Weise sollten vorhandene JIT-Compiler für die Ausführung im Browser portiert werden (vgl. Portierung von Interpretern mit praktisch keinem Overhead über JS). Dies ist wahrscheinlich nur möglich, wenn JIT-Compiler wie bei PyPy automatisch generiert werden.
21
user7043

Stellen Sie sich ASM.js als einen großen binären ArrayBuffer vor, der als Heap und eine Reihe von JavaScript-Modulen bezeichnet wird und mit einer Prolog-Direktive beginnt: "use asm"; und führen Sie schnelle Operationen auf niedriger Ebene für binäre Rohdaten aus, ähnlich wie in Assemblersprachen. Diese Module könnten von Hand geschrieben oder besser mit Skripten wie Emscripten aus LLVM-Code kompiliert werden. Ihre Leistung könnte dank der Mozilla OdinMonkey-Engine gesteigert werden, aber sie sind abwärtskompatibel mit den meisten modernen ECMAScript-Interpreten.

ASM.js ist nicht auf Spiele beschränkt, Sie können sogar ganze Qt-Apps in Ihrem Browser ausführen, wie diese !

4
niutech