Donnerstag, 24. Mai 2012 |
| |
Markus Völter wird auf der JAX 2009 im Rahmen des Eclipse Forum Europe mit Sessions zu den Themen MDD, DSLs und Spracharchitektur vertreten sein. Im Gespräch mit JAXenter erklärt er uns, warum es ständig neue Sprachen geben muss und warum es immer einfacher wird, Modell-getriebene Softwareentwicklung zu betreiben.
JAXenter: Hallo Herr Völter. Auf der JAX-Konferenz halten Sie eine Session zum Thema "Trends in Sprachen 2009". Warum gibt es immer wieder neue Sprachtrends? Genügen uns die existierenden Sprachen und die darauf aufsetzenden elaborierten Frameworks nicht?
Markus Völter: Zum einen ist es so, dass sich die Anforderungen an die Sprachen ändern. Man denke hier nur an die Multicore-Problematik, und auch die Anforderungen bzgl. interner DSLs sind relativ neu. Zum anderen ist es auch so, dass sich bestimmte Trends einfach auch in Sprachen abzeichnen. Nehmen wir z. B. das Thema Funktionalität oder dynamische Typisierung: Da diese Themen gerade in Mode sind, ob begründet oder nicht, werden eben auch entsprechende Sprachen dafür zur Verfügung gestellt.
Was die Frameworks angeht, so kann man sagen, dass ein gutes Framework eine schlechte Sprache nur bis zu einem gewissen Grad kompensieren kann. So kann man Closures oder Higher-Order-Funktionen mittels Inner Classes und Command Pattern nur bis zu einem bestimmten Punkt ersetzen, ohne dass es hässlich wird.
Die Idee von Java war ja ursprünglich: einfache Sprache, mächtige Frameworks. Das Pendel ist damals also in die Richtung "Frameworks" ausgeschlagen. Jetzt zeigt sich, dass das vielleicht seinerzeit nicht unbedingt schlecht war, dass jetzt aber wieder der Wunsch nach mächtigeren Sprachen besteht und weniger Wert auf Frameworks gelegt wird. Das Pendel schlägt nun eben wieder in die andere Richtung um.
Ein weiterer Grund dafür, dass es neue Sprachen gibt, ist, dass sich die Technologien ständig weiterentwickeln. Scala enthält z. B. ziemlich mächtige Type-Inference-Funktionalität. Das war vor 10, 15 Jahren, als man Java erfunden hat, so in dem Maße nicht verfügbar.
JAXenter: Sie sprechen ja auch besonders das Thema Domain Specific Languages an. Wie hat dieses doch recht junge Phänomen der DSLs die Software- und Entwicklungslandschaft verändert?
Markus Völter: Zum einen liegt der Fokus bei allgemeinen Programmiersprachen auf internen DSLs, d. h. man möchte in der Lage sein, domänenspezifische Syntax und Abstraktionen innerhalb eines Programms zu verwenden. Da kommt einem natürlich vor allem Ruby in den Sinn. Aber auch in Scala kann man aufgrund von Operator Overloading einiges tun, was in Java, was die Syntax angeht, nicht möglich war.
Zum anderen können wir einen anderen Trend in der Sprach- und Entwicklungstool-Landschaft feststellen, dass nämlich Compilerbau auf einmal in Mode kommt. Wenn ich z.B. vor 5, 6 Jahren zu einem Kunde gegangen wäre und gesagt hätte: "Lest einmal dieses Compilerbau-Buch und wir bauen uns unsere eigene Sprache", dann hätten die mich wieder nach Hause geschickt, und zwar wahrscheinlich mit recht unfreundlichen Worten.
Heute ist das anders. Die Tools haben sich weiterentwickelt. Ich kann mit wenig Aufwand eine eigene DSL bauen, inklusive einer schönen IDE dazu. Das hat dann natürlich zur Folge, dass dieser Ansatz auch praktikabler wird. Auch Codgegeneratoren sind heute mit den üblichen Tools einfach zu bauen, verglichen mit früher. Insofern ist das Thema "Sprachbau" heute gesellschaftsfähig, weil wirtschaftlich rentabel.
Das hat dann bezüglich der externen DSLs die Auswirkung, dass es immer mehr Tools und Frameworks gibt, die es erlauben, effizient DSLs und die zugehörigen Generatoren zu entwickeln.
JAXenter: Sie moderieren auch den Eclipse Modeling Day auf der JAX. Welchen Zusammenhang gibt es zwischen DSLs und MDD?
Markus Völter: Da gehen die Meinungen ein wenig auseinander. Es gibt Leute, die sagen, MDD ist schwerpunktmäßig UML, und UML hat mit DSLs nicht viel zu tun. Ich bin aber anderer Meinung. Ich denke, der Kern von modellgetriebener Entwicklung ist die Definition guter domänenspezifischer Sprachen, deren Instanzen man dann Modelle nennt, daher der Name. Aus diesen Modellen wird dann entweder Code generiert, oder ein Interpreter verarbeitet das Programm.
Man kann also grob sagen: Domänenspezifische Sprachen gibt es als interne DSLs (Ruby usw.) und als externe DSLs, die mehr oder weniger ein Synonym für modellgetriebene Entwicklung sind.
JAXenter: Ed Merks hat kürzlich in einem Interview mit dem Eclipse Magazin gesagt: "Ich sehe nur Modelle" und meinte damit, dass die Grenzen zwischen Modellieren und Kodieren zunehmend ineinander verschwimmen. Können sich Ihrer Meinung nach die klassischen Codeschreiber dem MDD völlig verschließen?
Markus Völter: Ich denke, das sind zwei Fragen in einer. Zunächst: Können sich die Kodierer dem MDD völlig verschließen?
Natürlich können Sie sich dem MDD verschließen. Wer keine Lust hat, etwas Neues zu lernen, der lässt es halt bleiben. Aber da die Werkzeuge heute immer leichtgewichtiger werden und sich besser mit den klassischen Entwicklungstools (IDEs) integrieren, wird natürlich die Hemmschwelle immer niedriger. Es wird einfacher, solche Dinge auch den Skeptikern beizubringen.
Wenn ich vor 4-5 Jahren von "modellgetrieben" geredet habe, war eigentlich klar: Ich spreche von grafischen DSLs. Inzwischen läuft MDD aber sehr viel auf textueller Ebene ab, und ein Programmierer, der es gewohnt ist, Code zu schreiben, tut sich natürlich viel leichter mit einer schönen textuellen DSL, mit einem schönen Editor und den üblichen IDE-Funktionen.
Der Editor läuft dabei dann noch in der gleichen IDE wie sein Java-Editor, z. B. in Eclipse, und er merkt fast nicht, dass es sich dabei um modellgetriebene Entwicklung handelt. Wir kommunizieren das oft auch nicht so. Wir sagen: "Hey, wir bauen ne kleine Sprache und einen Generator."
Klar: Entwickler können sich dem entziehen – aber die Dinge wachsen zusammen, die Tools werden leichtgewichtiger und angenehmer zu nutzen, und die Textorientierung tut das Übrige.
Die andere Frage war, ob die Grenzen zwischen Modellieren und Kodieren immer mehr ineinander verschwimmen. Das ist ein interessantes Thema, über das ich in letzter Zeit viel nachgedacht habe, und spätestens auf der nächsten JAX möchte ich etwas darüber erzählen.
Ich denke: Eigentlich wollen wir gar nicht modellieren. Wir wollen eigentlich programmieren, und zwar programmieren auf verschiedenen Abstraktionslevels.
Wir wollen für die verschiedenen Aspekte eines Systems passende Sprachen haben. Einige davon sind Turing-vollständig, haben z. B. Expression Languages, so wie der Expression-Kern von Java, andere sind auf einer höheren Abstraktionsebene angesiedelt, um z. B. Architekturabstraktionen auszudrücken, Komponenten, Ports usw. Wieder andere sind vielleicht fachdomänenspezifisch, um irgendwelche Versicherungsregeln beschreiben zu können. Und eigentlich sollen all diese verschiedenen Sprachen in der gleichen Tool-Landschaft arbeiten und beliebig kombinier- und integrierbar sein.
Im Endeffekt will ich also so etwas wie Sprachmodule. Jedes Sprachmodul adressiert einen bestimmten Aspekt von Softwareentwicklung, und wenn ich ein System baue, kann ich diese verschiedenen Sprachmodule nach meinen Bedürfnissen zusammenklicken und zusammenkonfigurieren. Ob ich das dann "Modellierung" oder "Programmierung" nenne, ist eigentlich vollkommen egal.
In diese Richtung gehen gerade meine Gedanken. Das muss ich aber noch ein wenig strukturieren, um später einmal etwas ausführlicher darüber zu schreiben.
JAXenter: Welche Rolle spielt die Eclipse-Plattform beim MDD?
Markus Völter: Eclipse ist eine große Community, bei der alles Mögliche passiert. Die Eclipse-Modelling-Community ist auch sehr lebhaft, und man kann argumentieren, dass die Eclipse-Modelling-Community die größte Modelling-Community ist, was das Tooling angeht. Mit anderen Worten: Viele State-of-the-Art- und auch Research-orientierten Tools bezüglich Modelling sind auf Eclipse gehostet. Es gibt alle möglichen Tools, angefangen bei Tools zur Sprachdefinition über Codegeneratoren, Frameworks für Datenbankpersistenz von Modellen, Queries, Transaktionen, grafischer Editorbau, textueller Editorbau.
Auch wenn die Eclipse-Plattform nicht bei jedem dieser Themen unbedingt Marktführer ist - grafische Editoren lassen sich z. B. besser mit Metaedit bauen als mit GMF – dann ist Eclipse als Gesamtplattform doch die Ecke, wo bezüglich Modelling am meisten passiert und wo die größte Dynamik herrscht. Das liegt natürlich auch daran, dass es eine Open-Source-Plattform ist und schon deshalb eine große Diversiät entsteht. Viele OMG-Standards haben auch eine De-facto-Referenzimplementierung auf Eclipse, auch, wenn diese offiziell nicht so heißen.