Suche
Aus Freude am Coden

Der Joy Compiler: So wird aus Go ganz einfach JavaScript

Dominik Mohilo
© Shutterstock.com / Yuliya Evstratenko

Frontend-Entwickler, die schon immer neidisch auf das Typsystem von Go und dessen Tooling waren, können dank dem neuen Joy Compiler aufhören zu träumen. Das Tool übersetzt in Go geschriebenen Quelltext eins zu eins nach JavaScript. So steht der Entwicklung großer Web-Anwendungen nichts mehr im Wege.

Seit einigen Monaten arbeitet Matthew Mueller am Joy Compiler, einem Tool, das sich für die genaue und direkte Übersetzung von Go in die Sprache JavaScript eignet. Der Erfolg ist kaum zu übersehen: Bereits nach aktuellem Stand hat das Projekt über 1.200 Stars, 27 Forks wurden angelegt. Joy macht also nicht nur dem Urheber Freude, sondern hat wirklich Potential ein sehr beliebtes Tool zu werden.

Joy: Mit Go das Web erobern

Go hat ein ausgezeichnetes Tooling, ein simples Design und ist stark typisiert. JavaScript kann sich über mangelnde Tools ebenfalls nicht wirklich beschweren, ist allerdings nicht stark typisiert. Zudem ist die Syntax von Go seit 2012 stabil und rückwärtskompatibel, was einer der Gründe für die Entscheidung war, Go als Ausgangssprache für die Frontend-Entwicklung zu nutzen. Ein weiterer Grund sind der schnelle Compiler und das flotte Type Checking sowie die Tatsache, dass Googles C-Alternative auf das Prinzip „Write once, read many times“ ausgelegt ist.

Zu den weiteren Grundprinzipien, auf denen Joy aufbaut, gehören auch „Weniger Syntax ist besser als hübsche Syntax“ und „Typisierter Code ist leichter zu aktualisieren und warten“. Auch sollte man es vermeiden, den Browser Support ohne guten Grund zu gefährden und nach Möglichkeit Standardbibliotheken und –tools verwenden.

Joy arbeitet in fünf Stufen: Parse, Index, Graph, Translate und Assemble.

  1. Parse wandelt den Go-Quelltext in einen abstrakten Syntaxbaum um (Abstract Syntax Tree, oder AST). Dafür wird die Library x/tools/loader verwendet.
  2. Index verarbeitet die im ersten Schritt erstellten ASTs und Fragen wie „Welche Abhängigkeiten bestehen für diese Funktion?“ können beantwortet werden.
  3. Graph nutzt den im zweiten Schritt erstellten Index und erstellt einen Abhängigkeitsgraphen. Der Graph ist topologisch sortiert und verästelt. Das Resultat ist eine Liste von Nodes, die die Funktionen, Variablen, Strukturen und Interfaces beinhalten, die im Programm verwendet werden.
  4. Translate ist der Schritt mit dem der Go AST in einen JavaScript AST übersetzt wird, basierend auf dem Index und den Nodes im Dependency Graph.
  5. Assemble generiert dann aus dem JavaScript AST den endgültigen JavaScript Code.

Hello World (links: Go, rechts: JavaScript) / Quelle: Matthew Mueller

Zum Eliminieren von Dead Code warden übrigens die Analysetools von Go verwendet, außerdem beinhaltet Joy ein Makrosystem für die Integration in existierendes JavaScript. Dazu kommt, dass Joy einen eingebauten Chrome-Browser (Headless), um Scripts zu nutzen. Und das Beste an Joy: Es ist Open Source und steht unter der GNU General Public Licence 3.0 auf GitHub zur Verfügung.

Ausblick

Joy ist noch lange nicht ausgereift oder gar für den Einsatz in der Produktion ausgelegt. Der erste Schritt wird also sein, die letzten 10 Prozent von Joy auf dem Weg zur Produktionsreife fertigzustellen. Dies beinhaltet die Fertigstellung des Übersetzers und die Finalisierung der DOM bzw. Virtual DOM APIs. Ein weiteres Ziel der Entwickler ist es, Joy mit inkrementeller Kompilierung auszustatten, was sich besonders für große Projekte eignet.

Für den nächsten Schritt nach der Produktionsreife ist die Implementierung vieler Standardbibliotheken von Go geplant, bspw. time, url und fmt. Auch go test und Frontend-Bibliotheken wie D3 sollen zukünftig unterstützt werden.

Langfristig sind ein neues „hygienisches“ Makrosystem, Performance-Verbesserungen und die Verringerung der Größe der JavaScript Builds sein. WebAssembly ist ebenfalls ein Punkt auf der langen To-Do-Liste der Entwickler von Joy: Es soll irgendwann durchaus möglich sein, Go in das WebAssembly-Binärformat zu kompilieren.

Weitere Informationen zu Joy gibt es auf der Offiziellen Homepage und – natürlich – auf GitHub.

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare
  1. Entwickler2018-01-05 20:19:47

    Joy mag Potential haben ein beliebtes Tool zu werden, nur Go laut dem TIOBE-Index Januar 2017 nicht mehr. Vielleicht ist der Hintergedanke aber ein ganz anderer, den Entwicklern des absteigenden Go die Möglichkeit einzuräumen, endlich auf das traumhafte JavaScript mit seiner dynamischen Typisierung und den ausgezeichneten Refactoring Möglichkeiten zu wechseln. Mit ein bisschen Glück kann Joy künftig Java, C, C++ und Asm ebenfalls in JavaScript übersetzen. Ein Unix oder Windows im Browser ist doch ein Ansage oder etwa nicht?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.