domain-specific languages (dsls) entwickeln und anwenden
DESCRIPTION
Vortrag für die Java User Group Rostock (https://sites.google.com/site/jughro) am 16. 1. 2013 zu DSLs im Allgemeinen und dem Buch "Domain-Specific Languages" von Martin Fowler (http://martinfowler.com/dsl.html).TRANSCRIPT
Domain-Specific Languages(DSLs) entwickeln und anwenden
Kurzer Überblick & Buchrezension zuDomain-Specific Languages (Martin Fowler)
Roland Ewald
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 1
Was ist eine domänenspezifische Sprache?
• Formale Sprache(Ziel: Programmieren eines Computers)
• Möglichst nah an natürlicher Sprache(bzgl. Kombinationen von Konstrukten etc.)
• Eingeschränkte Ausdruckskraft
• Fokus auf eine bestimmte Anwendungsdomäne
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 2
Was ist eine domänenspezifische Sprache?
• Formale Sprache(Ziel: Programmieren eines Computers)
• Möglichst nah an natürlicher Sprache(bzgl. Kombinationen von Konstrukten etc.)
• Eingeschränkte Ausdruckskraft
• Fokus auf eine bestimmte Anwendungsdomäne
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 2
Kategorisierung von DSLs
http://www.flickr.com/photos/nofrills, cc-by-nc
• Eingebettet (Internal/Embedded DSL)
• Extern (External DSL)
• Language Workbenches (z.B. MDAs)
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 3
Beispiele: Embedded DSLs
Reguläre Ausdrücke:
1 System.out.println("aBb a5z aab".replaceAll("a[a-zA-Z]b", "bar"));
Javadoc:
1 /**
2 * @author John Doe
3 * @since 1.1
4 * @see Bar
5 */
6 public class Foo {
7 //...
8 }
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 4
Beispiele: External DSLs
Maven Projektbeschreibungen:
1 <project xmlns="...">
2 <modelVersion>4.0.0</modelVersion>
3 <groupId>org.jamesii.archetypes</groupId>
4 <artifactId>custom-extension</artifactId>
5 <version>0.9.1-SNAPSHOT</version>
6 <name>My Custom Extension</name>
7 <packaging>jar</packaging>
8 ...
9 </project>
Oder auch: CSS, SQL, UML, komplexere Konfigurationsdateien,Scripting-Interfaces, etc.
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 5
Eigenschaften (meist :-)
[>[->+>+<<]>[-<<-
[>]>>>[<[-<->]
<[>]>>[[-]>>+<]>-<]<<]
>>>+<<[-<<+>>]<<<]
>>>>>[-<<<<<+
>>>>>]<<<<<Division mit Brainfuck:http://jwodder.freeshell.org/brainf.html
• Deklarativer Stil
• Keine Implementierungsdetails
• Kurze, einfache, intuitive Notation
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 6
Vorteile
• Produktivitätssteigerung
• Kommunikation mit Domänenexperten
• Separation of Concerns
• Eingebettete DSLs sind meist einfacher zu entwicklen, externe DSLsbieten mehr Gestaltungsspielraum
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 7
Effektivität?
Studie zur Komplexität von APIs:
• Drei OOP Frameworks (JAXB, OpenSAML, simpleSAMLphp) und eineeingebettete DSL (xoSAML)
• Vergleich mittels Object-Points Analyse
„The main observation for our experiment is that the embedded, textual DSLincurs the smallest API complexity.“
S. Sobernig, P. Gaubatz, M. Strembeck, and U. Zdun, Comparing complexity of API designs: an exploratory experiment on DSL-based
framework integration, in GPCE ’11. ACM, 2011, pp. 157-166. http://dx.doi.org/10.1145/2047862.2047890
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 8
Aber: Sprachwirrwar vermeiden
Pieter Bruegel, Turmbau zu Babel, 1563 — rpi-virtuell, http://www.flickr.com/photos/84132860@N03, cc-by-nc
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 9
Aber: Der Kontext muss klar sein
http://www.xkcd.com/1090, cc-by-nc
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 10
M. Fowler: Domain-Specific Languages
Inhalt:
1. Einführung
2. Grundlegende Entwurfsmuster
3. Patterns für externe DSLs
4. Patterns für eingebettete DSLs
5. Berechnungsmodelle
6. Codegenerierung
Die Kapitel in den Teilen 2-6 sind immer gleich aufgebaut: How it works,When to use it, Beispiel(e)
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 11
Semantic Model
• Zentrales Domänenmodell
• Kann durch verschiedene DSLs erzeugt / befüllt werden
• Bildet alle benötigten Elemente und deren Beziehungen ab
• Erhöht z.B. Flexibilität und Wartbarkeit
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 12
Beispiel: Method Chaining
1 List<?> problems =
2 session.createCriteria(ProblemDefinition.class).add(eq("scheme",
myScheme)).list();
• Konstruktion von Ausdrücken
• Definition von Abläufen (do(x).then(y).or(z))
• Methodennamen müssen geschickt gewählt werden
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 13
Beispiel: Nested Function
1 new Experiment with Observation {
2 //...
3 withRunResult {
4 result => println("Last x-value:" + result("x"))
5 }
6 }
• Nicht alle Pattern funktionieren für alle Sprachen
• Event Handling (ActionListener...)
• Definition von Strukturen
• etc.
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 14
Wer sollte dieses Buch lesen?
• Gut für DSL-Einsteiger / einen ersten Überblick
• Viele interessante Techniken (ohne Anspruch auf Vollständigkeit)
• Viele Code-Beispiele (Java, C#, etc.)
• Jedoch kaum ’Theorie’
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 15
Links
• Buch-Homepage: http://martinfowler.com/dsl.html
• Liste der Patterns: http://martinfowler.com/dslCatalog
• Amazon: http://www.amazon.com/dp/0321712943
16. 1. 2013 c© 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 16