Xtext-Lead Sven Efftinge über die Neuerungen in Xtext 2.0

Xtext 2.0: DSLs unleashed

Eclipse ist traditioneller Weise eines der starken Themen auf der JAX-Konferenz – so auch in diesem Jahr, in dem drei Eclipse Days und ein ganztägiger Power-Workshop zu Eclipse 4.0 auf dem Programm stehen. Den Anfang macht am Montag, 2. Mai 2011 der Eclipse Modeling Day, moderiert von Sven Efftinge und Eike Stepper, die u.a. EMF-Leiter Ed Merks zu Gast haben. Im Gespräch mit JAXenter verrät Sven Efftinge, an welchen spannenden Neuerungen man derzeit bei dem Eclipse-DSL-Framework Xtext arbeitet und vor welchen Herausforderungen das Eclipse-Modeling-Projekt im Allgemeinen steht.

Eclipse Days auf der JAX 2011

Und nicht vergessen: Der Very-Early-Bird-Frühbucherrabatt für die JAX 2011 läuft noch bis zum Donnerstag, 24.02.2011. Wer sich bis dahin für 2 Tage der JAX-Hauptkonferenz anmeldet, profitiert von den Frühbucherpreisen und kann den Agile Day gleich gratis mitbesuchen!

JAXenter: Hallo Sven! Die Xtext-Version 2.0 für Eclipse Indigo wird gerade entwickelt. Eine der Neuerungen ist Xbase. Was hat es damit auf sich?

Sven Efftinge: Ein großer Vorteil von internen domänenspezifischen Sprachen (DSL), also DSLs, die mittels geschickten API-Designs in eine Programmiersprache (Hostsprache) eingebettet sind, ist die Möglichkeit, auf die Hostsprache auszuweichen, um z.B. Werte zu berechnen. Das ist fast immer notwendig, da viele Softwareprobleme nicht ausschließlich mit deklarativer Struktur gelöst werden können, sondern auf Werteberechnung und damit auf Expressions angewiesen sind. Bekannte Beispiele für solche DSLs sind z.B. die Gradle-DSL oder auch XML-Dialekte wie die Konfiguration von Spring, die die Einbettung verschiedener Skriptsprachen ermöglicht.

Mit Xtext werden externe DSLs entwickelt. Externe DSLs sind nicht in eine Sprache eingebettet und müssen deshalb keine syntaktischen Kompromisse mit einer Hostsprache eingehen. Weiterhin ist es möglich, für externe DSLs spezifische Werkzeugunterstützung zu entwickeln. Wer schon einmal etwas mit Xtext gemacht hat, weiß, dass die DSL-Editoren, die durch das Framework für die eigene Sprache abgeleitet werden, denen der Java-IDE schon recht nahe kommen. Der große Nachteil von externen DSLs war bislang, dass man eben nicht hier und da einfach die Expressions der Hostsprache wiederverwenden konnte, weil es ja keine Hostsprache gibt. Als Workaround wurde dann oft Quellcode generiert, in dem die fehlenden Informationen hinterher manuell ergänzt wurden. Dies geschieht entweder durch die Nutzung von geschützten Bereichen, die der Generator beim nächsten Generieren (hoffentlich) nicht verändert, oder durch Nutzung von Zielsprachkonzepten wie Vererbung oder Includes. Das ist nicht nur umständlich und kompliziert, sondern zwingt uns auch dazu, Informationen, die eigentlich zusammen gehören, in zwei unterschiedliche Dateien zu schreiben und zu pflegen.

Xbase ist eine in Xtext implementierte Expression-Sprache, die man in jeder Xtext DSL einbetten und wiederverwenden kann. Die Sprache ist statisch typisiert und nutzt das Typsystem von Java. Sie bietet moderne Konzepte wie Typinferenz, Closures und Operator-Overloading, ist aber gleichzeitig nicht unnötig aufgebläht. Das muss sie auch nicht sein, denn man kann sie mit Xtext-Mitteln erweitern. Z.B. ist es sehr einfach, neue Literale für domänenspezifische Konzepte, wie Datum, Beträge, Maßeinheiten usw. einzuführen. Man kann außerdem auch komplexe neue Expressions oder Operatoren definieren.

Xbase wird komplett mit Typsystem, Interpreter und Compiler ausgeliefert. Alle Komponenten können über Dependency Injection sehr einfach erweitert und angepasst werden.

Weiterhin haben wir auf Basis von Xbase die Sprache Xtend2 entwickelt. Xtend2 ist der Nachfolger von den aus openArchitectureWare bekannten Sprachen. Die Sprache enthält ein paar einzigartige Konzepte und wird in Zukunft zur Entwicklung von Codegeneratoren verwendet. Sie eignet sich aber auch sehr gut zur Lösung anderer Probleme, wie z.B. Model-zu-Model-Transformationen.

Für das Xtext 2.0 Release verwenden wir den Untertitel „DSLs unleashed“, weil wir denken, dass durch die Einführung von Xbase ein riesiges Manko externer DSLs gelöst ist und sich in Kombination mit den anderen Features von Xtext ein fantastisches Werkzeug zur Entwicklung von DSLs ergibt.

JAXenter: An welchen neuen Features arbeitet ihr sonst noch für das Indigo-Release von Xtext?

Sven Efftinge: Xtext 2.0 wird für alle Sprachen automatisch ein Rename-Refactoring zur Verfügung stellen. Durch die gute Infrastruktur für das Linking der Sprachen war es nur eine Frage der Zeit, bis wir dieses Feature hinzufügen konnten. Das ganze ist wie immer sehr flexibel anpassbar und erweiterbar, funktioniert aber auch in der Standardeinstellung schon prima. Wir verwenden die aus der Java IDE bekannten Shortcuts und Metaphern. Auch gibt es ein API, mit dem beliebige andere sprachspezifische Refactorings entwickelt werden können.

Ein weiteres UI-Feature sind die Hover-Informationen. Über Querverweisen erscheint nun ein Hover mit Informationen aus der Deklaration. Wenn Java-Elemente referenziert werden, erscheint der aus der Java-IDE bekannte Hover. Für Xtext-Elemente werden standardmäßig der Name und der Typ des Elements, sowie zugehörige Dokumentation eingeblendet.

Prinzipiell kann man diesen Hook für viele interessante Dinge nutzen, und wir sind schon gespannt, auf welche Ideen unsere User kommen werden.

Ansonsten haben wir sehr viel Zeit in Details gesteckt, die für die alltägliche User-Experience ungemein wichtig sind. Dazu gehört eine Grunderneuerung der AutoEdit-Strategien. AutoEdit ist z.B. dafür zuständig, dass eine bestimmte Einrückung bestehen bleibt, oder dass einer öffnenden Klammer automatisch eine schließende hinzugefügt wird. Auch die Selektion und Navigation mit CTRL, ALT und den Cursortasten innerhalb des Textes wurde verbessert und fühlt sich nun genauso an wie im Java Editor. Doppelklick-Strategien sowie die aus Eclipse bekannte „Mark Occurrences“-Funktionalität sind ebenfalls mit dabei.

Schließlich wurde intern ziemlich viel aufgeräumt. Einer unserer Kunden hatte beispielsweise Probleme, seine 2MB große Textdatei flüssig zu editieren. Wir haben das Framework deshalb nochmals sehr genau mit dem Profiler betrachtet und konnten den Memory-Footprint um bis zu 85% senken und die Performance beim Laden und Validieren eines Modells dramatisch verbessern. Xtext 2.0 skaliert sehr gut.

Kommentare

Schreibe einen Kommentar

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