Xtend

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 2. Februar 2016 um 14:46 Uhr durch Incubus84 (Diskussion | Beiträge) (neue Version). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen
Xtend
Xtend-logo
Basisdaten
Paradigmen: objektorientiert, imperativ, funktional
Erscheinungsjahr: 2011
Designer: Sven Efftinge, Sebastian Zarnekow
Entwickler: itemis
Aktuelle Version: 2.9.0[1]  (1. Dezember 2015)
Typisierung: stark, statisch
Beeinflusst von: Java, Scala, Groovy, Smalltalk, Xpand
Lizenz: Eclipse Public License
www.xtend-lang.org

Xtend ist eine Programmiersprache für die Java Virtual Machine. Syntaktisch und semantisch hat Xtend seine Wurzeln in der Programmiersprache Java. Im Vordergrund stehen allerdings eine kompaktere Syntax und zusätzliche Funktionalität wie Typinferenz, Extension-Methoden und Operatorüberladung. Xtend ist primär objektorientiert, ermöglicht aber auch funktionale Programmierung, z. B. durch Lambda-Ausdrücke. Xtend ist statisch getypt und benutzt das Typsystem von Java ohne Änderungen. Es wird auf Java-Code compiliert und integriert sich daher nahtlos mit existierenden Java-Bibliotheken.

Die Sprache Xtend und ihre Entwicklungsumgebung werden im Eclipse-Projekt entwickelt[2] und nehmen am jährlichen Simultanrelease teil. Der Code ist Open Source unter der Eclipse Public License erhältlich. Dennoch kann die Sprache unabhängig vom Eclipse-Projekt compiliert und ausgeführt werden.

Geschichte

Xtend stammt ursprünglich aus dem Xtext-Projekt, mit dem die Sprache und der Editor entwickelt werden. Xtend wurde daher zunächst als Teil von Xtext im Eclipse-Release Indigo[3] im Juni 2011 veröffentlicht. Seit dem Eclipse-Release Juno[4] (Juni 2012, Xtend-Version 2.3) ist Xtend ein eigenständiges Projekt. Am 20. März 2013 wurde Xtend in Version 2.4.0 mit erweiterten Features wie "Active Annotations" releast.[5][6]

Die hier beschriebene Sprache Xtend ist nicht zu verwechseln mit der älteren Sprache gleichen Namens aus dem Xpand-Projekt.[7] Um Missverständnissen vorzubeugen, wurde Xtend daher zunächst Xtend2 genannt. Die '2' wurde allerdings der Einfachheit halber bald weggelassen. Dank seiner Template-Ausdrücke ersetzt Xtend die Xpand-Technologie komplett.

Philosophie

Java ist eine der populärsten Programmiersprachen und hat über die Jahre ein gewaltiges Ökosystem von Bibliotheken und Werkzeugen hervorgebracht. Dennoch ist die Syntax oft sperrig, und einige fehlende Eigenschaften werden erst langsam hinzugefügt. Xtend versucht, das Beste von Java zu erhalten, aber die Syntax zu verbessern und die fehlenden Features zu ergänzen, um besser lesbaren, ausdrucksstärkeren Code zu ermöglichen.

Xtends Syntax ist eng an Java angelegt. Xtend ist maximal kompatibel zu Java, indem es auf Java-Code kompiliert und Javas Typsystem unverändert verwendet. Java-Code und Xtend-Code können beliebig nebeneinander benutzt werden.

Durch eine Kombination von Lambda-Ausdrücken und Extension-Methoden kann die Sprache mit Bibliotheken erweitert werden, ohne dass die Sprachdefinition angepasst werden muss. Eine kleine Standardbibliothek nutzt das exzessiv aus.

Xtend ist von vornherein mit Blick auf eine gute IDE-Unterstützung konzipiert worden. Die Eclipse-basierte Xtend-IDE bietet unter anderem syntaktische Hervorhebung, Code-Vervollständigung, Refactoring, Navigation und Debugging. Sie integriert sich außerdem in Eclipses Java Development Toolkit.[8]

Semantik

Xtend gleicht Java in vielerlei Hinsicht, wie das nachstehende Xtend-Beispiel zeigt:

package sample

import java.util.List

class Greeter {
  def greetThem(List<String> names) {
    for(name: names) {
      println(name.sayHello)
    }
  }

  def sayHello(String name) {
    'Hello ' + name + '!'
  }
}

Xtend bietet Typinferenz, das heißt, die Typen von name und die Rückgabetypen der Methoden können aus dem Kontext inferiert werden. Klassen und Methoden sind standardmäßig public, Member-Variablen private. Semikolons sind optional.

In dem Beispiel wird die Methode sayHello als Extension-Methode aufgerufen, also wie eine Methode des ersten Arguments name. Extension-Methoden können auch von anderen Klassen oder Instanzen beigesteuert werden.

Statt der imperativen for-Schleife, kann man auch im funktionalen Stil einen Lambda-Ausdruck in eckigen Klammern verwenden, und die Funktion höherer Ordnung forEach in Extension-Syntax auf der Liste aufrufen:

def greetThem(List<String> names) {
  names.forEach [ println(sayHello) ]
}

Wird der Parameter eines Lambda-Ausdrucks nicht spezifiziert, wird sein Name implizit als it angenommen, was wie this in Java ausgelassen werden kann. Sein Typ wird inferiert. Lambda-Ausdrücke werden außerdem automatisch in Interfaces einer Methode konvertiert, sodass man sie beispielsweise als java.lang.Comparable benutzen kann.

Template-Ausdrücke sind mehrzeilige Strings in dreifachen Apostrophen mit interpolierten Ausdrücken in französischen Anführungszeichen. Das obige Beispiel sähe mit einem Template-Ausdruck so aus:

def sayHello(String name) '''
    Hello «name» !
'''

Template-Ausdrücke haben eine intelligente Leerzeichenverwaltung – der Text im Beispiel wird nicht eingerückt – und eignen sich daher sehr gut für Code-Generierung.

Weitere bemerkenswerte Sprachfeatures sind Multimethoden, eine erweiterte Switch-Anweisung und Operatorenüberladung mit Bibliotheksmethoden.

Weblinks

  • Sven Efftinge, Sebastian Zarnekow: Extending Java. In: Pragmatic Programmer Magazine, Dezember 2011.
  • Alex Blewitt: Xtend Extends Java. In: InfoQ, Juni 2012; Interview with Sven Efftinge.

Einzelnachweise

  1. Xtend Release Notes
  2. Official Xtend-Homepage auf Eclipse.org
  3. Eclipse Indigo release
  4. Eclipse Juno release
  5. Xtend 2.4 Release Notes
  6. Xtend 2.4 Release Notes
  7. Xpand
  8. JDT