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).
Domain-Specific Languages (DSLs) entwickeln und anwenden
1. Domain-Specific Languages
(DSLs) entwickeln und anwenden
Kurzer Überblick & Buchrezension zu
Domain-Specific Languages (Martin Fowler)
Roland Ewald
16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 1
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.)
16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 2
3. 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
4. Kategorisierung von DSLs
• Eingebettet (Internal/Embedded DSL)
• Extern (External DSL)
• Language Workbenches (z.B. MDAs)
http://www.flickr.com/photos/nofrills, cc-by-nc
16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 3
5. 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
6. 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
7. Eigenschaften (meist :-)
[>[->+>+<<]>[-<<-
[>]>>>[<[-<->] • Deklarativer Stil
<[>]>>[[-]>>+<]>-<]<<]
>>>+<<[-<<+>>]<<<] • Keine Implementierungsdetails
>>>>>[-<<<<<+
>>>>>]<<<<< • Kurze, einfache, intuitive Notation
Division mit Brainfuck:
http://jwodder.freeshell.org/brainf.html
16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 6
8. Vorteile
• Produktivitätssteigerung
• Kommunikation mit Domänenexperten
• Separation of Concerns
• Eingebettete DSLs sind meist einfacher zu entwicklen, externe DSLs
bieten mehr Gestaltungsspielraum
16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 7
9. Effektivität?
Studie zur Komplexität von APIs:
• Drei OOP Frameworks (JAXB, OpenSAML, simpleSAMLphp) und eine
eingebettete DSL (xoSAML)
• Vergleich mittels Object-Points Analyse
„The main observation for our experiment is that the embedded, textual DSL
incurs 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
10. 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
11. 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
12. 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
13. 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
14. 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
15. 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
16. 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
17. 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