Ahoi, objektorientierter Ozean

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

Redaktion JAXenter

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.

Klick auf die Karte für die komplette Infografik.

JAXenter: Was hat dich dazu bewogen, Xtend zu entwickeln? Welche Vorteile bietet Xtend, die andere Programmiersprachen nicht haben?

Sven Efftinge

Sven Efftinge: Wir haben Xtend primär im Kontext von Xtext und dort für Codegenerierungszwecke und Modelltransformationen entwickelt. Bis dahin wurden diese Dinge meist mit einzelnen domänenspezifischen Sprachen gelöst, da man Java speziell für Codegenerierung wirklich nicht gebrauchen kann. Mit Xtend hatten wir endlich eine kompakte, statisch getypte JVM-Sprache mit erstklassiger Eclipse-Integration. Und natürlich bietet Xtend mit den Template Expressions und Extension Methods Features, die man bei der Implementierung von Codegeneratoren nicht missen möchte.

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).

Sven Efftinge ist leidenschaftlicher Softwareentwickler und ein Geschäftsführer bei TypeFox (typefox.io) in Kiel, einem jungen Unternehmen, das auf die Entwicklung von Softwarewerkzeugen spezialisiert ist. In seiner Freizeit verbringt er gerne Zeit mit seiner Familie und ist begeisterter Kitesurfer.
 

 

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…

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

Geschrieben von
Kommentare
  1. ekke2017-03-28 07:51:07

    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)

Schreibe einen Kommentar

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