ActionScript-Compiler für die Übersetzung nach JavaScript

JavaScript ist die Sprache des Webs und dient dazu Webseiten interaktiv zu machen. ActionScript dient dagegen zur Steuerung von Inhalten der proprietären Adobe Flash-Plattform. Der Nachteil ihrer Verwendung für die Entwicklung von Anwendungen ist die Abhängigkeit zu einer separaten Laufzeitumgebung. So benötigen Nutzer z.B. ein zusätzliches Browser-Plugin, um in Webseiten eingebundene Flash-Inhalte betrachten zu können. Vor Bestehen des HTML5 -Webstandards waren Entwickler auf derartige externe Plattformen angewiesen, da Möglichkeiten fehlten, Multimedia-Inhalte einzubinden. Über HTML5 werden für Webseiten inzwischen Audio- und Video-Inhalte nativ unterstützt. Es steht außerdem ein HTML-Element zur Verfügung, das 2D- und 3D-Grafiken rendern kann. Dies macht Flash für Entwickler von Spielen und Multimediaportalen zum großen Teil überflüssig.

Mit zunehmendem Einsatz mobiler Geräte durch Benutzer ist der Nachteil der Abhängigkeit zu einer externen Laufzeitumgebung nicht länger unerheblich. So wird Adobe Flash auf Apple-Geräten überhaupt nicht mehr und unter Android nur noch teilweise unterstützt. Mit unserem Compiler wollen wir eine Möglichkeit zur Unterstüzung von Entwicklern beim Portieren ihrer bestehenden AdobeFlash-Anwendungen schaffen.

Bereits 2010 wurde die Entwicklung einer ersten Version fertiggestellt, mit der die Physik-Engine Box2DFlash übersetzt wurde. Der generierte JavaScript-Code wurde unter dem Namen Box2dWeb veröffentlicht (siehe unten).

Aus diesem Grund liegt die Anforderung nahe, den ActionScript-Quellcode bestehender AdobeFlash-Anwendungen nach JavaScript zu portieren. Mitte 2010 wurde dafür ein Compiler entwickelt, durch den die Physik-Engine Box2DFlash übersetzt wurde. Der generierte Programmcode wurde unter dem Namen Box2dWeb veröffentlicht.

Ende 2014 wurde die Entwicklung fortgesetzt. Dabei wurde die Architektur des Compilers komplett überarbeitet. Die aktuelle Version erlaubt eine dynamische Konfiguration des Compilers über austauschbare Module. Eine flexible Architektur war vor allem notwenig, da es oft zahlreiche verschiedene Möglichkeiten gibt, ein spezifisches Sprachmerkmal zu übersetzen.

Box2dWeb: JavaScript-Version der Box2D-Physik-Engine

2010 portierten wir mit dem oben vorgestellten Compiler die beliebte Physik-Engine Box2DFlash nach JavaScript. Das Projekt ist unter folgender URL erreichbar: https://code.google.com/p/box2dweb/

Live-Demo:



phatPlaylist: Simulation von Wiedergabelisten durch Dateisystem-Manipulation

Dieses in C++ entwickelte Projekt dient zur Simulation von Wiedergabelisten und ist vor allem für MP3-fähige Autoradios gedacht, die in der Regel keine Wiedergabelisten-Dateien verarbeiten können. Um dennoch eine Art Wiedergabeliste zu erhalten, könnte man gewöhnliche Ordner verwenden und die Musik einfach hineinkopieren. Der Nachteil dabei ist, dass damit auch der benötigte Speicherplatz verdoppelt wird.

Abhilfe verschafft phatPlaylist, indem es Wiedergabelisten (z.B. M3U-Dateien) ausliest und jeweils einen Order erstellt. Für jeden Wiedergabelisteneintrag wird eine leere Datei erzeugt. Dieser Dateieintrag wird im FAT32-Dateisystem so manipuliert, dass er auf den Inhalt der bestehenden (in der Wiedergabeliste referenzierten) Datei verweist.

Die Vorsilbe phat bezieht sich auf das FAT32-Dateisystem. Dies ist üblicherweise das einzig durch Hifi-Anlagen unterstützte. Die Dateisystem-Manipulation entspricht einem Hardlink in moderneren Dateisystemen wie ext4 oder NTFS. Hardlinks werden unter FAT32 jedoch offiziell nicht unterstützt. Dies hat zur Folge, dass ein derartig manipulierter Datenträger von Betriebssystemen als beschädigt eingestuft wird. Hifi-Anlagen, die wir getestet haben, bemerkten dies nicht und konnten alle Dateien problemlos wiedergeben.

Die Funktionalität des Programmcodes wird über Unittests automatisiert geprüft. Bei jedem Testlauf wird ein virtuelles Laufwerk aus dem Duplikat einer Image-Datei erzeugt und eingebunden.

Um die Anwendung zu veröffentlichen, benötigen wir noch eine grafische Benutzeroberfläche. Außerdem suchen wir noch eine Lösung, um dem Benutzer eine Umstrukturierung seiner Dateien zu ermöglichen. Da Hardlinks nicht unterstützt werden, wird ein Betriebssystem beim Löschen einer Datei nicht die durch phatPlaylist erzeugten Duplikate entfernen. Für die Umstrukturierung muss daher eine eigene Benutzeroberfläche entwickelt werden.