3.3    JavaScript Image Linker





Der JaSIL Compiler/Linker übersetzt Java Anwendungen in JavaScript. Als JDK wird derzeit Apache Harmony verwendet. Das vom Linker erzeugte optimierte Programm enthält nur die referenzierten Klassen, Felder und Methoden. Das JaSIL Projekt bietet die Möglichkeit preemitve Java Threads mit JavaScript in Clients von Web-Applikationen zu verwenden.

JaSIL übersetzt Java Bytecode in JavaScript und verwendet daher einen allgemeinerer Ansatz als ähnliche Projekte mit speziellen Java Front-Ends. Das System verwendet den Garbage Collector von JavaScript für die Speicherverwaltung.


• Motivation für die Übersetzung von Java in JavaScript

JavaScript ist eine funktionale Sprache, die in allen populären Web-Browsern verfügbar ist. Auf diese Weise ist diese Sprache eine der weltweit meistgenutzten Plattformen. Java ist eine populäre objektorientierte Programmiersprache mit einem starken Typkonzept, die ebenfalls auf vielen verschieden Plattformen verfügbar ist. Sehr gute IDE Unterstützung erlaubt es EntwicklerInnen auf effiziente Weise komplexe Java Anwendungen zu erzeugen und zu warten. Auch wenn Java die Entwicklung von komplexen Web-Anwendungen unterstützt, ist für bestehende Java Programme die Übersetzung auf JavaScript allein in der Regel nicht ausreichend, sondern darüber hinaus eine spezielle Anpassung an die Web-Browser Umgebung erforderlich.


• Java/JVM Kompatibilität

JaSIL bietet Optionen für mehr oder weniger Java/JVM Kompatibilität des generierten JavaScript Codes. So ist die Unterstützung für preemtive Java Threads, einschließlich Synchronisierung optional. Derartige Threads sind vollständig durch Software realisiert und bieten kein echtes hardwarebasiertes Multiprocessing. Es ist gegenwärtig nicht beabsichtigt dynamisches Laden von Klassen zu unterstützen und Reflection für Java Klassen ist nur begrenzt möglich. Wenn keine Threads benötigt werden, so kann optional durch die Eliminierung von Sprüngen [ Ero95 ] effizienterer Code generiert werden, wodurch die Laufzeit des JavaScript Codes um etwa 11 % verbessert wird.


• Ein Beispiel mit Threads

Über untenstehenden Pushbutton wird ein Dialog geöffnet und eine einfache Wortzählfunktion gestartet. Es wird eine Datei vom Server gelesen, die Anzahl der einzelnen Worte in der Datei ermittelt und das Resultat in einer Tabelle angezeigt. Das Schließen des Dialogs beendet die Funktion. Für diese Aufgabe wird ein Thread mit niedriger Priorität verwendet.

Durch die Verwendung von Threads bleibt die GUI reaktiv, der Dialog kann bewegt oder auf das WEB-Dock minimiert werden und die Tabelle wird permanent aktualisiert. Java EntwicklerInnen können die Thread-Konzepte verwenden, die ihnen bereits vertraut sind. Da das System Threads mit Prioritäten unterstützt, kann GUI Aktivität das Worte zählenden Thread bremsen.


• Beispiel with WebGL

Über untenstehenden Pushbutton wird ein Dialog geöffnet und eine WebGL Anwendung gestartet. Threads werden in diesem Beispiel keine verwendet, was bedeutet, dass die Anwendung im "GUI Thread" läuft.


• Ähnliche Projekte