If you can't read please download the document
Upload
igor-khotin
View
1.693
Download
1
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