Im Gespräch mit Sven Efftinge

Xtext in Indigo: Von Xtend, grafischer DSL-Modellierung und dem nächsten großen X

Xtext, das Framework zur Generierung domänenspezifischer Sprachen in Eclipse, kommt in der Version 2.0 mit vielen neuen Features. Eines davon ist Xbase, eine in Xtext implementierte Expression-Sprache, die uns Projektleiter Sven Efftinge bereits in einem früheren Interview beschrieben hat. Eine weitere Neuentwicklung ist Xtend, das die Nachfolge des openArchitectureWare-Projektes Xpand antritt. Was hat es mit Xtend auf sich, und welche Entwicklungen hat das Xtext-Team in den kommenden Monaten auf ihrer Roadmap?

JAXenter: Was verbirgt sich hinter Xtend?

Sven Efftinge: Xtend ist eine statisch getypte Programmiersprache, die sich besonders für die Entwicklung von Codegeneratoren aber auch für viele andere Dinge eignet. Xtend wird direkt auf Java kompiliert und bietet eine sehr kompakte Syntax. Die Sprache ist mit Xtext implementiert und benutzt die neue Expressions Sprachbibliothek, die jetzt jeder in seiner Xtext DSL einbetten kann.

JAXenter: Was sind die Vorteile von Xtend gegenüber Java oder anderen JVM-Sprachen wie Scala?

Efftinge: Der Hauptzweck von Xtend ist wie gesagt die Codegenerierung. Dabei geht es primär darum, mehrzeilige String-Literale mit dynamischen Werten zusammen zu bringen und das Ganze dann in Dateien abzuspeichern. Mit Java macht das aus vielen offensichtlichen Gründen keinen Spaß, weshalb Entwickler seit jeher auf Alternativen setzen. Aus gutem Grund fällt die Wahl dann meist auf eine Template-Sprache wie Velocity. Groovy bietet mit seinen GStrings ebenfalls eine gut lesbare Template-Syntax an. Leider sind diese Sprachen allesamt nicht statisch getypt. Da sich die Templates im Kontext von Xtext auf getypte EMF-Modelle beziehen, ist statische Typisierung sehr hilfreich. EMF-Modelle werden typischerweise genau wie der Codegenerator im Kontext eines Projekts iterativ weiterentwickelt und den veränderten Rahmenbedingungen und Anforderungen angepasst. Umbenennungen und andere Refactorings erfordern gutes Tooling, das auf statischer Typisierung basiert. Xtend bietet das und mehr.
Scala wäre im Prinzip ein guter Kandidat gewesen, und tatsächlich finden sich viele Konzepte aus Scala auch in Xtend wieder. Leider bietet Scala selbst keine Template-Syntax.
Es geht aber nicht ausschließlich um die Template-Syntax, auch Konzepte wie das Dispatching von überladenen Methoden auf Basis der Laufzeittypen oder die direkte Kompilierung nach Java sind interessante Merkmale von Xtend, die man so in anderen Sprachen nicht findet. Im Gegensatz zu Scala haben wir das Typsystem von Java nicht verändert. Wir haben sehr viel Wert darauf gelegt, dass die Einstiegshürde für Entwickler, die sich mit Java auskennen, äußerst gering ist.

JAXenter: Xtext bietet viele Funktionen von Core EMF deutlich komfortabler an. Die Verknüpfung von EMF und Xtext ist für Einsteiger aber oft verwirrend. Ist Xtext EMF 2.0? Wo verläuft die Grenze und wohin entwickelt sie sich?

Efftinge: Xtext ist ein Framework für die Entwicklung von domänenspezifischen Sprachen und Programmiersprachen im Allgemeinen. EMF ist dabei eine von vielen Technologien, auf die Xtext aufbaut. Die Abstraktionen, die EMF bietet, passen im Kontext von Xtext wie die Faust aufs Auge. Wäre das nicht der Fall, würden wir es nicht verwenden. Die enorme Verbreitung von EMF hat zusätzlich den Vorteil, dass viele andere Technologien mit Xtext verwendet werden können.

JAXenter: Es gab einige Demonstrationen, bei denen Xtext mit grafischen Views verbunden wurde. Ist die Kombination aus textueller und grafischer Modellierung die Zukunft? Was ist für Xtext geplant?

Efftinge: Gut, dass du Views sagst und nicht Editoren. Ich denke, dass es durchaus Sinn macht, bestimmte Aspekte eines Softwaresystems grafisch darzustellen. Ob man darin dann auch editieren können muss, ist eine andere Frage. Letztlich kommt es immer auf den Kosten-Nutzen-Faktor an, und da steht es um die grafischen Editoren sehr schlecht: Die Entwicklungskosten sind immer noch extrem hoch und übersteigen die eines textuellen Editors auf Basis von Xtext meistens um ein Vielfaches.
In Xtext 2.0 gibt es z. B. eine Railroad Diagram View für Grammatiken. Das kann durchaus helfen, bestimmte Aspekte einer Grammatik besser zu verstehen.
Jan (Köhnlein) hat darüber hinaus kürzlich einen Prototypen für ein View-Framework entwickelt, mit dem man auf sehr einfache Weise Diagrammtypen und dessen Styling definieren kann. Die Konfiguration geschieht natürlich textuell mittels Xtext-basierten DSLs.

JAXenter: Was ist das nächste große X, was sind die Pläne für das Release nach Indigo?

Efftinge: Wir werden zusammen mit Ed Merks eine textuelle Sprache zur Definition von Ecore-Modellen entwickeln. Diese Sprache soll, genau wie Xtend, auf die neue Expression-Sprache aufsetzen. Damit wird ermöglicht, sowohl die Struktur von EMF-Klassen als auch das Verhalten von Operationen und Derived Features textuell zu definieren. Weiterhin arbeiten wir an einer Integration mit dem Debugger von JDT: Wenn aus einer DSL Java-Code generiert wurde, soll beim Debuggen optional auch durch die DSL-Datei gesteppt werden können.

Ansonsten werden wir vor allem die Qualität und Performance von Xtext und Xtend noch weiter verbessern, so wie wir es bisher jedes Jahr getan haben. Nachhaltigkeit war uns schon immer sehr wichtig, tritt aber mit zunehmender Reife des Projekts noch weiter in den Vordergrund. Außerdem gibt es Pläne, ein Buch über Xtext zu schreiben.

JAXenter: Vielen Dank für das Gespräch!

Sven Efftinge leitet für die itemis AG den Standort Kiel. Er ist Projektleiter von Xtext und spricht regelmäßig auf Konferenzen, schreibt für Fachmagazine und ist Koautor eines Buchs zum Thema modellgetriebene Softwareentwicklung.

Kommentare

Schreibe einen Kommentar

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