Der heilige Graal

GraalVM 1.0: Die virtuelle Maschine der polyglotten Zukunft

Dominik Mohilo

© Shutterstock / Dabarti CGI

Die Zeiten, in denen Anwendungen ausschließlich aus Java, C oder Script Code bestanden, sind schon lange vorüber. Heutzutage finden sich in vielen Code-Basen eingebettete Teile und Elemente, die in einer anderen Sprache geschrieben sind. Wäre es nicht schön, diese Anwendungen nativ auf einer einzigen virtuellen Maschine ausführen zu können? GraalVM bietet diese Möglichkeit nun.

Die Java Virtual Machine ist ein Kunstwerk, keine Frage. Aber auch Kunstwerke können in die Jahre kommen, deren Farben verblassen oder einfach nicht mehr den Zeitgeist treffen. Das ist vielleicht ein wenig pathetisch formuliert, aber betrachtet man sich die Softwareentwicklung über die vergangenen Jahre, so ist doch ein deutlicher Trend zu erkennen: Entwickler mögen es polyglott. Oder auch: Entwickler mögen ihre Freiheit, entscheiden zu können, in welcher Sprache sie ihre Code-Basis schreiben – unabhängig von engen Korsagen einer virtuellen Maschine. Natürlich sind Entwickler findige Menschen und haben sich über Tools und Erweiterungen aus der Einschnürung befreit: Ein Beispiel in Bezug auf die JVM ist zum Beispiel die Nashorn JavaScript Engine.

Trotzdem gab es immer Probleme, die auch die beste Erweiterung oder Konfiguration nicht beheben konnte, wie Thomas Wuerthinger, Leiter des GraalVM-Projektes, auf dem Blog von Oracle betont: Da wären zunächst inkonsistente Performance-Charakteristika, Toolings und Konfigurationen. Außerdem ist die Kommunikation zwischen Programmen, die in unterschiedlichen Sprachen geschrieben wurden, meist sehr aufwendig. Und natürlich sind hochperformante virtuelle Maschinen schwergewichtige Prozesse, die nicht nur schwer einzubetten sind, sondern auch einen gewaltigen Speicherverbrauch haben.

GraalVM 1.0 veröffentlicht

Mit der neuen GraalVM sollen all diese Probleme der Vergangenheit angehören. Die universelle virtuelle Maschine wurde speziell für die polyglotte Anwendung designt und ist nicht auf eine Sprache oder Sprachfamilie beschränkt. Durch den polyglotten Ansatz wird nicht nur eine hohe Performance für einzelne Sprachen gewährleistet, sondern auch die Interoperabilität zwischen verschiedenen Sprachen. Entwickler können so polyglotte Anwendungen ohne Performance Overhead erstellen.

Datenstrukturen werden durch die GraalVM nicht mehr innerhalb der von einzelnen Sprachen festgelegten Grenzen konvertiert. Objekte und Arrays werden von fremden Sprachen einfach direkt genutzt. So kann zum Beispiel auf die Funktionalität einer Java-Bibliothek aus dem Node.js Code heraus zugegriffen werden oder eine Statistik-Routine, die in Python geschrieben wurde, vom Java Code aus aufgerufen werden. Den Möglichkeiten sind hier kaum Grenzen gesetzt.

GraalVM unterstützt in Version 1.0 zunächst JVM-basierte Sprachen wie Java, Scala, Groovy oder Kotlin, JavaScript (inklusive Node.js) und LLVM Bitcode (der aus Programmen erstellt wird, die in C, C++ oder Rust geschrieben sind). Auf experimenteller Basis können auch die Sprachen Ruby, R und Python bereits verwendet werden, allerdings ist hier (wie bei experimentellen Features üblich) Vorsicht geboten.

Flexibel nicht nur in Sachen Sprache

Die GraalVM ist nicht nur polyglott, sie ist auch plattformagnostisch. Gemeint ist, dass sie entweder als eigenständige virtuelle Maschine laufen oder als Teil von anderen Plattformen wie etwa dem OpenJDK oder Node.js betrieben werden kann. Es ist sogar möglich, GraalVM in Datenbanken einzubetten, als Beispiele werden hier MySQL und Oracle RDBMS genannt.

Die jeweiligen Anwendungen sind, Dank der GraalVM Ausführungsumgebungen, flexibel über den ganzen Stack deploybar. Im Fall von Datenprozess-Engines, stellt GraalVM die in individuellen Formaten gespeicherten Daten dem ausgeführten Programm direkt und ohne Konvertierungs-Overhead zur Verfügung.

Sprachagnostisch ist übrigens auch das Tooling, welches für alle GraalVM Deployments nutzbar ist. Enthalten sind von Haus aus etwa ein Debugger, ein Profiler und ein Heap Viewer. Das Ende der Fahnenstange ist dabei aber noch lange nicht erreicht: Durch offene APIs lässt sich das GraalVM-Ökosystem nämlich durch Entwickler bestimmter Tools oder Sprachen in Zukunft problemlos erweitern.

Ausblick

Das Team von Twitter deployt GraalVM bereits jetzt für deren Scala-basierte Microservices in Produktion. Dennoch empfehlen die Macher der GraalVM, in Produktion zunächst lediglich die JVM-Sprachen und JavaScript (inkl. Node.js) zu verwenden. Die Unterstützung für Python, R und Ruby sind noch nicht ausgereift, wird aber in Zukunft weiter vorangetrieben.

Da das GraalVM-Ökosystem offen ist, hofft man natürlich darauf, dass bald viele Entwickler ihr Tools oder Sprachen auf die Plattform bringen, oder neue Sprachen und Tools direkt auf der GraalVM aufsetzen. Weitere Informationen gibt es auf dem Blog von Oracle und der offiziellen Webpräsenz des Projektes. Auf GitHub findet man die GraalVM natürlich auch.

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

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: