Emscripten

Ein LLVM nach JavaScript Compiler


Titel | Inhalt | Einleitung | Grundlegendes | Arbeitsweise | Der Relooper | Grenzen | Performanz | Fazit | Quellen

Einleitung

Emscripten ist ein Compiler, der die maschinennahe LLVM Sprache größtenteils nach JavaScript übersetzen kann. Dies ermöglicht es, Code unterschiedlicher Programmiersprachen in aktuellen Browsern auszuführen.
Dabei stellt sich das Projekt der ungewöhnlichen Aufgabe, eine maschinennahe Quellsprache in eine Hochsprache zu übersetzen, was in etwa der umgekehrten Situation eines normalen Compilers entspricht und einige eigene Herausforderungen mit sich bringt.

Das quelloffene Projekt ist unter der MIT-Lizenz und der University of Illinois/NCS Open Source Lizenz verfügbar. Emscripten selbst ist in JavaScript implementiert und wird seit Ende 2010 aktiv auf GitHub entwickelt.
Der Name Emscripten lehnt sich an das Kunstwort embiggen an, das einer Episode aus Die Simpsons entsprungen ist. (Siehe die FAQ und Wikipedia)
Vorangetrieben wird das Projekt maßgeblich von Alon Zakai. Der aktuell für Mozilla tätige Entwickler hat 2008 den Ph.D.-Doktorgrad im Bereich Neural Computation an der Hebräischen Universität Jerusalem in Israel erlangt.


Motivation

Die Motivation hinter der Idee, eine Programmiersprache in eine andere zu übersetzen, ist es ganz allgemein, bereits vorhandene Logik wiederverwenden zu können und bereits vorhandene Software auch auf weiteren Plattformen einzusetzen, ohne sie neu implementieren zu müssen. Andere Sprachen nach JavaScript zu übersetzen soll es ermöglichen, bereits vorhandene Software im Web laufen zu lassen, oder einfach andere Sprachen als JavaScript für die Implementierung von Anwendungen im Internet verwenden zu können.

Unterschiedliche Programmiersprachen im Web auszuführen, ist bereits möglich und wird meistens mit Hilfe von Browser-Plugins realisiert, wie z.B. dem Java-, Flash-, oder Silverlight-Plugin. Der Einsatz dieser Plugins ist aber aus unterschiedlichen gründen oft problematisch: Sie müssen manuell installiert werden, lassen sich schlecht in das umgebende HTML integrieren und sind nicht immer für alle Plattformen verfügbar. Außerdem eröffnen sie oft eine Vielzahl an Sicherheitslücken. Jeder Browser auf den unterschiedlichsten Geräten bringt jedoch von sich aus eine JavaScript-Engine mit und JavaScript formt zusammen mit HTML und CSS die standardisierte Grundlage des Internets. Daher ist JavaScript die attraktivste Programmiersprache für unterschiedlichste Anwendungen im Web, die auf vielen Plattformen laufen sollen.

Es existieren bereits einige Projekte mit dem Ansatz, andere Sprachen nach JavaScript zu übersetzen: Das Google Web Toolkit übersetzt zum Beispiel Java zu JavaScript, Pyjamas nutzt Python als Quellsprache. Diese Umsetzungen bringen jedoch zum Teil einige Einschränkungen mit sich. Pyjamas beispielsweise übersetzt Python nahezu 1-zu-1 nach JavaScript, wodurch die zugrundeliegende Semantik nicht der von Python, sondern der von JavaScript entspricht. Die Division ganzer Zahlen kann z.B. unerwartete Ergebnisse liefern, da die JavaScript-Engine im Browser Fließkommazahlen zur Repräsentation der ganzen Zahlen generieren kann. (JavaScript unterscheidet nicht zwischen unterschiedlichen Typen für Zahlen, daher werden diese meist durch doppelt genaue Fließkommazahlen dargestellt.)


Titel | Inhalt | Einleitung | Grundlegendes | Arbeitsweise | Der Relooper | Grenzen | Performanz | Fazit | Quellen