Igor Khotin - Domain Specific Languages

Embed Size (px)

Citation preview

Domain Specific Languages

E-mail: [email protected]

Background

10+ IT-

6+ Java

Agile-

...

DSL

DSL

Java DSL

Q&A

DSL?

-

DSL?

Domain-Specific Language

-

DSL?

DSL

DSL

4GL, MDD, MDA...

Unix

shell

grep

awk

make

lexx

yacc

troff

DSLs

PostScript, VRML, POV-Ray

Csound, PureData

Maple, Maxima

QuakeC, UnrealScript

Lisp Forth

XML

XPath

XQuery

XSLT

XSL-FO

DSL?

Logo

Erlang DSL

DSLs

Internal DSLsAPI vs DSL

OpenGL

Lisp

Forth

Rebol

External DSLs

DSL

API

DSL

-

API

IDE

DSL

API

Regular Expressions

RegExPattern pattern = new RegExPattern();

pattern.add("http://") .openBlock() .add(RegExPattern.DIGIT) .add(RegExPattern.SYMBOL) .add(".").add("-") .closeBloc().add(RegExPattern.ONE_OR_MORE) .openBlock() .add(RegExPattern.SYMBOL) .closeBloc().times(3);pattern.match("http://regex.test.org");

Regular Expressions

"http://regex.test.org" .matches("http:\\/\\/[A-Za-z0-9\\.-]*\\.[A-Za-z]{3}");

Pizza Wars

Java Pizza

XML Pizza

Decaf Pizza

Java Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.getInstance(); robot.establishCrust(Crust.MEDIUM_AND_THIN); robot.addSauce(Sauce.TOMMATO, 30); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); robot.addOlives(50);

robot.pack();}

Java Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.getInstance(); robot.establishCrust(Crust.MEDIUM_AND_THIN); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); robot.addOlives(50); robot.addSauce(Sauce.TOMMATO, 30);

robot.pack();}

Java Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.getInstance(); robot.establishCrust(Crust.MEDIUM_AND_THIN); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); robot.addOlives(50); robot.addSauce(Sauce.TOMMATO, 30);

robot.pack();}

Java Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.getInstance(); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); robot.addOlives(50);

robot.pack();}

Java Pizza

public void makePizza() throws IOException { PizzaRobot robot = PizzaRobot.getInstance(); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); Socket socket = new Socket("localhost", 80); robot.addOlives(50);

robot.pack();}

Java Pizza

XML Pizza

Cheddar 150 200 50 tomato 50

XML Pizza

Cheddar 150 200 50 tomato 50

XML Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.parseRecipe("capricciosa.xml"); robot.make();}

Decaf Pizza

capricciosa.pizza:

On medium thin crust add: sauce tomato 30 chesse Cheddar 150 mushroms 200 olives 50pack

public void makePizza() { PizzaRobot.execute("capricciosa.pizza");}

Decaf Pizza

capricciosa.pizza:

sauce tomato 30chesse Cheddar 150mushroms 200olives 50Pack

>> Error! No crust defined!

Java Pizza

public void makePizza() { PizzaRobot robot = PizzaRobot.getInstance(); robot.establishCrust(Crust.MEDIUM_AND_THIN); robot.addSauce(Sauce.TOMMATO, 30); robot.addCheese(Cheese.CHEDDAR, 150); robot.addMushrooms(200); robot.addOlives(50);

robot.pack();}

XML Pizza

Cheddar 150 200 50 tomato 50

Decaf Pizza

capricciosa.pizza:

On medium thin crust add: sauce tomato 30 chesse Cheddar 150 mushroms 200 olives 50pack

Voodoo Magic

Voodoo Magic

, DSL

reflection

Voodoo Magic Tools

Voodoo Preprocessors

IDE

Voodoo Generators

DSL Java

Voodoo Generators

,

-

Run-time

Voodoo Interpreters

- JVM

Voodoo Compilers

Voodoo JVMagic

Hotspot-

State of the art garbage collector

JRuby , Ruby

DSL

DSL

DSL

Voodoo Syntax

parser-

ANTLR - ANother Tool for Language Recognition

JavaCC

SableCC

Coco/R

Bytecode

Jasmin

Jamaica

Asm

Javassist

Xtext Language Development Framework

Eclipse Modeling Framework

DSL Eclipse

Out of the box

Meta Programming System

Language Oriented Programming

JetBrains MetaProgramming System

IDE DSL , ,

Meta Programming System

Meta Programming System

Meta Programming System

IDE?

?

DSL

, ,

DSL , , ,

DSL

DSL

DSL

DSL

, DSL

Java + + DSLs = ultimate platform

Java

=

Java

= DSL

...

!

http://martinfowler.com/dsl.html

http://www.eclipse.org/Xtext

http://www.jetbrains.com/mps

http://www.antlr.org

http://jasmin.sourceforge.net

http://asm.ow2.org

Sergey Dmitriev, JetBrains, 2004. Language Oriented Programming: The Next Programming Paradigm.

Martin Fowler, 2010. Domain-Specific Languages

Fergal Dearle , 2010. Groovy for Domain-Specific Languages

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, 2006. Compilers: Principles, Techniques, and Tools (2nd Edition)

E-mail: [email protected]: ikhotin.comTwitter: chaostarterlinkedin.com/pub/igor-khotin/5/193/257

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso