Zum Inhalt springen

Emscripten

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 29. Dezember 2014 um 22:44 Uhr durch Editorfun (Diskussion | Beiträge) (Typos.). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Emscripten ist ein LLVM-zu-JavaScript Compiler. Emscripten kompiliert LLVM-Assemblercode zu Standard-JavaScript. Je nach verwendeter Programmiersprache werden bei der Übersetzung verschiedene Ansätze verfolgt. Der Sourcecode wird entweder direkt von LLVM-Bytecode in JavaScript übersetzt (z. B. C/C++), oder die Ausführungsumgebung der Programmiersprache wird in JavaScript übersetzt. Die kompilierte Ausführungsumgebung wird dann genutzt um Code der jeweiligen Programmiersprache auszuführen (z. B. CPython) [1]. Emscripten unterstützt eine ganze Reihe von Programmiersprachen [2], der Fokus der Entwickler liegt aber auf der Übersetzung von C/C++.

Ein Beispiel für die Anwendung von Emscripten zeigt die Portierung der Unreal Engine 4 auf JavaScript [3].

Übersetzungsvorgang

Die erste Stufe des Kompiliervorgangs ist das LLVM Frontend. Das verwendete LLVM Frontend übersetzt den Sourcecode der verwendeten Sprache in LLVM Assembler Code (LLVM Intermediate Representation). Für die Übersetzung von C++ Code kann beispielsweise Clang verwendet werden. Der erzeugte LLVM Assembler Code wird anschließend von LLVM mit dem entsprechenden Backend in die Zielsprache übersetzt. Normalerweise würde im Backend der ausführbare Assembler Maschinencode für eine bestimmte Platform erzeugt. Diese Rolle übernimmt aber der Emscripten Compiler. Der Emscripten Compiler übersetzt den erzeugte LLVM Assembler Code zu einem performant übersetzbarem Subset von JavaScript (asm.js).

Performance

Im Gegensatz zur Ausführung nativer Applikationen ist die Ausführungsgeschwindigkeit von Emscripten-generiertem JavaScript-Code deutlich länger. Dabei spielt auch der verwendete Browser eine große Rolle, je nach Anwendung variiert die Performance stark. Ein optimistischer Richtwert ist eine ca. zweifach längere Ausführungszeit [4][5]. Bei performance-kritischen Anwendungen muss daher auch die Ausführungsumgebung genau spezifiziert werden.

Lizenz

Emscripten ist als freie Software unter zwei verschiedenen Lizenzen verwendbar.

Einzelnachweise

  1. Zakai, Alon. "Emscripten: an LLVM-to-JavaScript compiler." Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion. ACM, 2011.
  2. https://github.com/kripken/emscripten/wiki#programming-languages
  3. https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic-preview-unreal-engine-4-running-in-firefox/
  4. http://arewefastyet.com/#machine=11&view=breakdown&suite=asmjs-ubench
  5. https://kripken.github.io/mloc_emscripten_talk/gindex.html#/11