Emscripten
Emscripten ist ein LLVM-zu-Web-Compiler. Emscripten kompiliert LLVM-Assemblercode zu Standard-JavaScript oder zu WebAssembly. 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++ oder 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)<ref>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.</ref>. Emscripten unterstützt eine ganze Reihe von Programmiersprachen<ref>Porting Examples and Demos. Abgerufen am 19. Oktober 2022.</ref>, der Fokus der Entwickler liegt aber auf der Übersetzung von C und C++.
Ein Beispiel für die Anwendung von Emscripten zeigt die Portierung der Unreal Engine 4 auf JavaScript.<ref>https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic-preview-unreal-engine-4-running-in-firefox/</ref>
Übersetzungsvorgang[Bearbeiten]
Die erste Stufe des Kompiliervorgangs ist das LLVM-Frontend. Das verwendete LLVM-Frontend übersetzt den Sourcecode der verwendeten Sprache in LLVM-Assemblercode (LLVM Intermediate Representation). Für die Übersetzung von C++-Code kann beispielsweise Clang verwendet werden. Der erzeugte LLVM-Assemblercode 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 Plattform erzeugt. Diese Rolle übernimmt stattdessen der Emscripten-Compiler. Der Emscripten-Compiler übersetzt den erzeugten LLVM-Assemblercode zu einem performant übersetzbarem Subset von JavaScript (asm.js).
Performance[Bearbeiten]
Im Gegensatz zur Ausführung nativer Applikationen ist die Ausführungsgeschwindigkeit von Emscripten-generiertem JavaScript-Code deutlich geringer. 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<ref>http://arewefastyet.com/#machine=11&view=breakdown&suite=asmjs-ubench</ref><ref>https://kripken.github.io/mloc_emscripten_talk/gindex.html#/11</ref>. Bei performance-kritischen Anwendungen muss daher auch die Ausführungsumgebung genau spezifiziert werden.
Lizenz[Bearbeiten]
Emscripten ist als freie Software unter zwei verschiedenen Lizenzen verwendbar: MIT-Lizenz und University of Illinois/NCSA Open Source License.
Verwendung[Bearbeiten]
Seit dem 23. Dezember 2014 verwendet das Internet Archive eine Emscripten-konvertierte DOSBox-Emulation für Browser-basierte Präsentation von Tausenden archivierter DOS-Computerspiele,<ref>Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig You can now play nearly 2,400 MS-DOS video games in your browser.] Washington Post, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 8. Januar 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref><ref>Each New Boot a Miracle by Jason Scott (23. Dezember 2014)</ref><ref>collection:softwarelibrary_msdos in the Internet Archive (29. Dezember 2014)</ref> ausschließlich für Schul- und Forschungszwecke.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Internet Archive's Terms of Use, Privacy Policy, and Copyright Policy.] archive.org, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 8. Januar 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „Access to the Archive’s Collections is provided at no cost to you and is granted for scholarship and research purposes only.“Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
Einzelnachweise[Bearbeiten]
<references />