Eclipse Xtend – kompakt, statisch, perfekt für die Codegenerierung [Pirates of the JVM]

Unsere Reise in der Welt der Pirates of the JVM geht weiter. Wir finden uns wieder, wo sich der objektorientierte Ozean und die statische See treffen: Dort liegt die Insel Xtend. Sven Efftinge, Entwickler der JVM-Sprache, sprach mit uns über die Anwendungsbereiche von Xtend und worin sich die Sprache von anderen unterscheidet.
Aus dem Eclipse-Projekt Xtext ging die Programmiersprache Xtend hervor. Seine Wurzeln hat Xtend, wie die im Folgenden gezeigten Code-Beispiele recht deutlich zeigen, in Java. Ziel der Sprache ist es, die Syntax von Java zu verbessern und um diverse Features zu verbessern. Wenig überraschend ist es da, dass das Motto der Xtend-Piraten „Java 10, today!“ lautet.
JAXenter: Was hat dich dazu bewogen, Xtend zu entwickeln? Welche Vorteile bietet Xtend, die andere Programmiersprachen nicht haben?

Sven Efftinge
Als JVM-Sprache wird Xtend heute für alle möglichen Zwecke verwendet. Wenn ich neben den Templates und Extension Methods noch ein weiteres Alleinstellungsmerkmal nennen darf, dann sind das sicher die Active Annotations. Xtend wird ja nicht direkt in Java-Bytecode übersetzt, sondern in lesbaren Java-Sourcecode. Das macht es für den Entwickler einfacher, die konzepte zu verstehen.
Mit einer Active Annotation kann der Entwickler bei der Übersetzung mitmachen und die zu erzeugenden Java-Klassen und -Interfaces modifizieren. Active Annotations sind ein sehr handliches und gleichzeitig mächtiges Makrosystem. Wir benutzen heute bei sehr strukturellen Codegeneratoren oft lieber Active Annotations statt einer externen DSL.
JAXenter: Kannst du die Kernprinzipien der Sprache darlegen?
Sven Efftinge: Neben einer sehr kompakten Syntax und einer einfachen Erweiterbarkeit war mir beim Entwurf der Sprache vor allem eine nahtlose Kompatibilität mit Java wichtig. Wir wollten keine neue Sprache mit Library und Ökosystem entwerfen, sondern eine mächtigere Syntax für Java. Alle Java-Bibliotheken sollten mit Xtend mindestens genauso gut funktionieren wie mit Java selbst. Tatsächlich funktioniert Xtend in den meisten fällen sogar wesentlich besser, weil wir bestehende Java-Idiome beim Design berücksichtigt haben.
Wir haben etwa das Konzept der Functional Interfaces eingeführt, bevor es für Java 8 überhaupt in Erwägung gezogen wurde. Auch Java Bean Properties werden von Xtend nativ unterstützt:
Ich kann beispielsweise mit der @Data
-Annotation eine Immutable Class mit Properties, Hashcode/Equals, Konstruktor usw. deklarieren:
@Data class Person { String name int age }
@Data
ist übrigens eine Active Annotation. Das heißt Xtend kann solche Dinge, im Gegensatz zu anderen Sprachen wie Scala oder Kotlin, mit Libraries lösen.
JAXenter: Wie würde ein typisches Programm mit Xtend aussehen?
Sven Efftinge: Im Prinzip sieht Xtend aus wie Java. Die auffälligste Änderung ist wohl das def
-Keyword für Methoden, das erforderlich ist, weil Xtend sehr weitgehende Typ-Inferenz unterstützt. Als Beispiel ist hier ein Hello World:
class HelloWorld { def static void main(String[] args) { println("Hello World") } }
JAXenter: Für welche Art von Anwendungen eignet sich Xtend besonders gut? Für welche eher weniger?
Sven Efftinge: Für Codegeneratoren und Modelltransformationen gibt es wohl kaum eine bessere Alternative, aber im Prinzip profitieren Nutzer von Xtend bei allen Einsatzzwecken, bei denen es auf prägnanten und lesbaren Code ankommt. Xtend bietet eine handvoll Features mit denen sehr deklarative APIs definitert werden können.
Wenn es um Bytes & Bit Shifting geht, würde ich Xtend nicht verwenden.
Für Codegeneratoren und Modell- transformationen gibt es wohl kaum etwas Besseres als Xtend
JAXenter: Wie ist der derzeitige Status Quo der Sprache?
Sven Efftinge: Die Sprache ist ausgereift und wird überall auf der Welt verwendet.
JAXenter: Welche Pläne gibt es für die Zukunft von Xtend?
Sven Efftinge: Der Xtend Compiler wurde mit Xtext entwickelt und unterstützt damit Microsofts Language Server Protocol. Wir wollen Xtend dafür fit machen und damit die Integration in andere Tools außerhalb von Eclipse ermöglichen.
JAXenter: Wie steigt man am besten in die Arbeit mit Xtend ein?
Sven Efftinge: Der einfachste Weg ist es, das Xtend Plug-in in einer aktuellen Eclipse-Version zu installieren und dann in einem beliebigen Java-Projekt einfach eine Xtend-Datei anzulegen, oder auch bestehende Java-Dateien automatisch zu konvertieren (Rechtsklick -> Convert to Xtend).

Die Pirates of the JVM
Gehen wir auf Schatzsuche! In der Infografik „Pirates of the JVM“ verbirgt sich so manches Programmiersprachen-Juwel, das inspirierte Entwickler auf der Java-Plattform für sich entdecken werden. Doch sehen Sie selbst…
- Pirates of the JVM – die Infografik
- Frege – das Haskell für die JVM: Eine Einführung
- Eclipse Golo – leichtgewichtig und dynamisch auf der JVM
- Eclipse Xtend – kompakt, statisch, perfekt für die Codegenerierung
- Eta – rein funktional auf der JVM
- Kotlin – lesbar, bündig, sicher
- Gosu – Die skriptbare Universalsprache mit offenem Typsystem
- Jython – Python in der JVM-Welt
Haben Sie Lust auf Schatzsuche zu gehen? In unserem Gewinnspiel „Pirates of the JVM“ ist Ihr Rätseltalent gefragt. Belohnt werden Sie mit 3 tollen Preisen…
PIRATES OF THE JVM – DAS GEWINNSPIEL
Piratenflagge via Shutterstock.com / katyam1983
Ich kann mir nicht mehr vorstellen, ohne Xtend zu arbeiten – auch und besonders in Nicht-Java-Projekten:
Xtend generiert meine C++ Entities für BB10 Projekte unter Eclipse Momentics (CDT) und Qt Creator IDE
das erleichtert es mir für verschiedene Plattformen mobile Apps zu bauen:
* BlackBerry10 (C++/Qt 4.8)
* Android / iOS / W10 mobile (C++/ Qt 5.8 / QtQUICKCONTROLS2)