Zum Inhalt springen

„Emscripten“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Kein zu-JS compiler, da es auch WASM beherrscht
K Leerzeichen vor Referenz entfernt, Leerzeichen in Überschrift
Zeile 1: Zeile 1:
'''Emscripten''' ist ein [[LLVM]]-zu-Web-[[Compiler]]. Emscripten kompiliert LLVM-[[Assemblersprache|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.&nbsp;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.&nbsp;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>https://github.com/kripken/emscripten/wiki#programming-languages</ref>, der Fokus der Entwickler liegt aber auf der Übersetzung von [[C (Programmiersprache)|C]]/[[C++]].
'''Emscripten''' ist ein [[LLVM]]-zu-Web-[[Compiler]]. Emscripten kompiliert LLVM-[[Assemblersprache|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.&nbsp;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.&nbsp;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>https://github.com/kripken/emscripten/wiki#programming-languages</ref>, der Fokus der Entwickler liegt aber auf der Übersetzung von [[C (Programmiersprache)|C]]/[[C++]].


Ein Beispiel für die Anwendung von Emscripten zeigt die Portierung der [[Unreal Engine#Vierte Generation|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>
Ein Beispiel für die Anwendung von Emscripten zeigt die Portierung der [[Unreal Engine#Vierte Generation|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>
Zeile 7: Zeile 7:


== Performance ==
== Performance ==
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.
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 ==
== Lizenz ==
Emscripten ist als [[freie Software]] unter zwei verschiedenen Lizenzen verwendbar: [[MIT-Lizenz]] und [[University of Illinois/NCSA Open Source License]].
Emscripten ist als [[freie Software]] unter zwei verschiedenen Lizenzen verwendbar: [[MIT-Lizenz]] und [[University of Illinois/NCSA Open Source License]].


== Verwendung==
== Verwendung ==
Seit dem 23. Dezember 2014 verwendet das [[Internet Archive]] eine Emscripten-konvertierte [[DOSBox]]-Emulation für Browser-basierte Präsentation von Tausenden archivierter [[MS-DOS|DOS]]-[[Computerspiel]]e<ref>{{cite web|url=https://www.washingtonpost.com/news/the-switch/wp/2015/01/05/you-can-now-play-nearly-2400-ms-dos-video-games-in-your-browser/ |title=You can now play nearly 2,400 MS-DOS video games in your browser |first=Abby |last=Ohlheiser |date=2015-01-05 |accessdate=2015-01-08 |publisher=[[Washington Post]]}}</ref><ref>[http://ascii.textfiles.com/archives/4471 Each New Boot a Miracle] by Jason Scott (23. Dezember 2014)</ref><ref>[https://archive.org/search.php?query=collection%3Asoftwarelibrary_msdos&page=1 collection:softwarelibrary_msdos] in the Internet Archive (29. Dezember 2014)</ref>, ausschließlich für ''"Schul- und Forschungszwecke"''.<ref>{{cite web|url=https://archive.org/about/terms.php |title=Internet Archive's Terms of Use, Privacy Policy, and Copyright Policy |date=2014-12-31 |accessdate=2015-01-08 |publisher=archive.org |quote=''Access to the Archive’s Collections is provided at no cost to you and is granted for scholarship and research purposes only.''}}</ref>
Seit dem 23. Dezember 2014 verwendet das [[Internet Archive]] eine Emscripten-konvertierte [[DOSBox]]-Emulation für Browser-basierte Präsentation von Tausenden archivierter [[MS-DOS|DOS]]-[[Computerspiel]]e<ref>{{cite web|url=https://www.washingtonpost.com/news/the-switch/wp/2015/01/05/you-can-now-play-nearly-2400-ms-dos-video-games-in-your-browser/ |title=You can now play nearly 2,400 MS-DOS video games in your browser |first=Abby |last=Ohlheiser |date=2015-01-05 |accessdate=2015-01-08 |publisher=[[Washington Post]]}}</ref><ref>[http://ascii.textfiles.com/archives/4471 Each New Boot a Miracle] by Jason Scott (23. Dezember 2014)</ref><ref>[https://archive.org/search.php?query=collection%3Asoftwarelibrary_msdos&page=1 collection:softwarelibrary_msdos] in the Internet Archive (29. Dezember 2014)</ref>, ausschließlich für ''"Schul- und Forschungszwecke"''.<ref>{{cite web|url=https://archive.org/about/terms.php |title=Internet Archive's Terms of Use, Privacy Policy, and Copyright Policy |date=2014-12-31 |accessdate=2015-01-08 |publisher=archive.org |quote=''Access to the Archive’s Collections is provided at no cost to you and is granted for scholarship and research purposes only.''}}</ref>



Version vom 9. Juni 2019, 21:46 Uhr

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/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-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

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[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: MIT-Lizenz und University of Illinois/NCSA Open Source License.

Verwendung

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[6][7][8], ausschließlich für "Schul- und Forschungszwecke".[9]

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
  6. Abby Ohlheiser: You can now play nearly 2,400 MS-DOS video games in your browser. Washington Post, 5. Januar 2015, abgerufen am 8. Januar 2015.
  7. Each New Boot a Miracle by Jason Scott (23. Dezember 2014)
  8. collection:softwarelibrary_msdos in the Internet Archive (29. Dezember 2014)
  9. Internet Archive's Terms of Use, Privacy Policy, and Copyright Policy. archive.org, 31. Dezember 2014, abgerufen am 8. Januar 2015: „Access to the Archive’s Collections is provided at no cost to you and is granted for scholarship and research purposes only.