Domain-Specific Languages (DSLs) entwickeln und anwenden

17
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

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 of Domain-Specific Languages (DSLs) entwickeln und anwenden

Page 1: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 2: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 3: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 4: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 5: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 6: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 7: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 8: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 9: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 10: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 11: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 12: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 13: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 14: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 15: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 16: Domain-Specific Languages (DSLs) entwickeln und anwenden

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

Page 17: Domain-Specific Languages (DSLs) entwickeln und anwenden

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