Emscripten ist der Name eines Compilers, der die LLVM-Sprache großteils in JavaScript übersetzt. Damit ermöglicht er die Ausführung des Codes verschiedenartiger Programmiersprachen in aktuellen Browsern.
Emscripten dient dazu, die maschinennahe Sprache LLVM in eine Hochsprache zu kompilieren.
(Bild: Emscripten.org)
Emscripten hat die Aufgabe, verschiedene Sprachen in jeweils andere zu kompilieren. Hierbei besteht die wesentliche Herausforderung darin, eine maschinennahe Quellsprache (LLVM) in eine andere Art von Sprache (Hochsprache) zu übersetzen. Damit steht Emscripten vor der umgekehrten Aufgabe, die ein Compiler normalerweise übernimmt.
Emscripten ist ein quelloffenes Projekt. Verfügbar ist es unter Lizenz des MIT sowie unter Lizenz der University of Illinois / NCS Open Source (UIUC-Lizenz). Hauptentwickler des Projekts ist Alon Zakai, der auch für seine Arbeit für Mozilla bekannt ist. Emscripten ist als Begriff ein Neologismus aus dem Kunstwort embiggen. Dieses stammt ursprünglich aus der Serie „Die Simpsons“.
Herausforderungen und Besonderheiten
Die Übersetzung einer maschinennahen Sprache in eine Hochsprache ist mit einigen Herausforderungen verbunden, die sich von anderen Compilern unterscheiden.
JavaScript-Engines sind typischerweise auf einen natürlichen Codefluss ausgelegt. Dieser ist in manuellem Quellcode vorhanden. In der maschinennahen LLVM-Infrastruktur fehlt er hingegen. An Stelle der in handgeschriebenem Quellcode vorhandenen Verzweigungen und Schleifen wird der Programmablauf durch Sprünge und Sprungmarken bestimmt.
Eine der Aufgaben ist es folglich, die ursprüngliche Hochsprache wieder herzustellen. Nur auf diese Weise kann ein performantes JavaScript entstehen. Andere Compiler können Hochsprachen-Konstrukte unmittelbar übernehmen. Ihr Nachteil besteht jedoch darin, nur eine einzige Quellsprache unterstützen zu können.
Zusätzlich besteht eine weitere Herausforderung darin, die Semantik des Ausgangs-Codes genau umzusetzen und dabei dennoch ein performantes JavaScript hervorzubringen. Nicht alle Operationen der LLVM-Sprache lassen sich direkt in JavaScript umsetzen.
Zusammenhang zur LLVM Compiler Infrastruktur
LLVM ist eine Eigenbezeichnung für das Projekt und stand ursprünglich als Abkürzung für Low Level Virtual Machine. Inzwischen hat es mit der ursprünglichen Version einer virtuellen Maschine nicht mehr viele Gemeinsamkeiten. Das Projekt LLVM definiert die LLVM assembly language.
Hierbei stellt die LLVM IR (LLVM intermediate representation) eine Abstraktion der Maschinensprache für aktuelle Prozessoren dar. Der Code einer bestimmten Programmiersprache lässt sich durch ein Frontend in die LLVM Sprache übersetzen. Ein Backend kann die LLVM anschließend in den Code der Zielplattform übersetzen
Emscripten übernimmt in diesem Zusammenhang die Rolle des Backends. Auf diese Weise lässt sich eine große Anzahl an ursprünglichen Quell-Programmiersprachen in die Sprache der Zielplattform (in diesem Falle JavaScript) übersetzen. Emscripten kann weiterhin von den Optionen zur Optimierung des Codes Gebrauch machen, die LLVM-Werkzeuge bereits ab Werk beinhalten.
Ausführung der Sprachen und Möglichkeiten
Grundsätzlich sind zwei Optionen denkbar, um eine Sprache unter der Nutzung von Emscripten im Internet auszuführen. Der von einem vorhandenen Frontend erzeugte LLVM-Zwischencode lässt sich entweder direkt in JavaScript übersetzen. Oder aber die gesamte zur Ausführung der Sprache genutzte Laufzeitumgebung wird zu JavaScript portiert.
Hierbei gilt die erstgenannte Methode als die effizientere Variante. Auf diese Weise lassen sich zahlreiche beliebte und verbreitete Sprachen in JavaScript übersetzen. Sollte jedoch noch kein Frontend für eine bestimmte Sprache vorhanden sein, findet sich in der zweiten Methode ein alternativer Ansatz.
Sofern die Laufzeitumgebung der Sprache in einer Sprache geschrieben wurde, die von einem LLVM-Frontend unterstützt wird, ist eine komplette Übersetzung nach JavaScript möglich. Damit besteht die Möglichkeit zur Ausführung im Web. Der Code lässt sich unmittelbar im Browser analysieren. Ebenso kann er in der Laufzeitumgebung ausgeführt werden, die innerhalb der JavaScript-Engine läuft.
Emscripten und seine innere Funktionalität
Emscripten ist als Compiler selbst innerhalb von JavaScript entwickelt worden. Damit gehen einige Nutzungsvorteile einher. Emscripten ist beispielsweise imstande, numerische Ausdrücke durch eine direkte Auswertung mit eval() zu vereinfachen. Ebenso stellt der Compiler bestimmte konstante Strukturen des LLVM-Maschinencodes intern als JavaScript-Objekt dar.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Die Kompilierungsarbeit Emscriptens lässt sich in idealtypischen Phasen betrachten. Zunächst kommt es zur Übertragung des LLVM-Codes in die interne Repräsentation des Codes durch Emscripten. Dies geschieht über den so genannten intertyper.
Anschließend kommt es zur Untersuchung dieser internen Repräsentation durch den analyzer. Dieser generiert Informationen und Daten, die sich anschließend für Optimierungen nutzen lassen. In der letzten Phase kommt es zur Konvertierung der internen Daten-Repräsentation zum gewünschten JavaScript-Code durch den jsifier.
Anwendungsbereiche und Werkzeuge
Emscripten lässt sich sowohl unter Microsoft Windows als auch unter Max OS X und Linux anwenden. Voraussetzungen zur vollumfänglichen Nutzung des Compilers sind die Komponenten LLVM, Python und Node.js. Es existieren weitere Tools, die Anwendern die Nutzung erleichtern. Damit soll die Übersetzung bestehender Projekte (beispielsweise in C und C++) nach JavaScript mit Emscripten besonders leicht fallen.
Dazu gehört emcc, eine Art Ersatz für den gcc-Compiler. Dieser verfügt über weitgehend identische Aufrufkonventionen. In einfachen Anwendungsfällen können Nutzer einfach emcc an Stelle des gcc-Compilers zur Projekt-Erstellung nutzen. Emcc sorgt hierbei für die Erzeugung des LLVM-Bitcodes, wobei es die in Emscripten vorhandenen Schnittstellen nutzt.
Die Ausgabe kann in JavaScript-Code erfolgen oder auch in einem ein ein HTML-Dokument eingebettetes JavaScript. Weiterhin bietet Emscripten Tools für Projekte die über ./configure oder über Makefile entwickelt werden. Die Werkzeuge übernehmen die Aufrufe dieser Tools und können sie dabei konfigurieren.