writing dsls in groovy

46
 Scott Davis DSLs in Groovy  Say what you mean, Mean what you say

Upload: best-tech-videos

Post on 30-May-2018

243 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 1/46

 Scott Davis

DSLs in Groovy Say what you mean,

Mean what you say

Page 2: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 2/46

Page 3: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 3/46

Scott Davis

Page 4: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 4/46

What is a

Domain SpecificLanguage?

Page 5: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 5/46

Domain 

Page 6: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 6/46

Page 7: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 7/46

Page 8: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 8/46

Page 9: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 9/46

Page 10: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 10/46

Language

Page 11: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 11/46

Page 12: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 12/46

Page 13: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 13/46

Page 14: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 14/46

Page 15: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 15/46

Page 16: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 16/46

DSL:a specific tool for a

specific job

Page 17: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 17/46

 SQL 

Page 18: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 18/46

Page 19: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 19/46

Page 20: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 20/46

Page 21: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 21/46

<target name="compile"

description="Compiles the Java code"> <mkdir dir="${build.dir}" /> <mkdir dir="${classes.dir}" /> 

<javac srcdir="${source.dir}"destdir="${classes.dir}"

debug="on" deprecation="on"> 

<classpath refid="compile.classpath"/> 

</javac> 

<copy todir="${classes.dir}"> 

<fileset dir="${source.dir}"> <include name="**/*.properties" /> 

<include name="**/*.xml" /> </fileset> 

</copy> </target> 

Page 22: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 22/46

Internalor 

External?

Page 23: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 23/46

Page 24: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 24/46

Page 25: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 25/46

Page 26: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 26/46

Page 27: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 27/46

 Simplicity

Page 28: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 28/46

Page 29: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 29/46

* C h

Page 30: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 30/46

  * Cornstarch* Corn flour* Corn syrup solids

* Mono and diglycerides* Soy lecithin* Polysorbate 60* Dextrin* Calcium caseinate* Sodium stearol lactylate* Wheat gluten* Calcium sulfate* Natural and artificial flavors* Caramel color* Sorbic acid (to retain freshness)* Artificial color (yellow 5, red 40)

Page 31: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 31/46

Page 32: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 32/46

select * from books;

Page 33: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 33/46

What isGroovy?

Page 34: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 34/46

Groovy is a DSL for Java

Page 35: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 35/46

Page 36: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 36/46

Page 37: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 37/46

 A DSL for Installation 

Page 38: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 38/46

Page 39: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 39/46

#!/usr/bin/env groovy

if(args){

def project = args[0]

println "Installing ${project}..."

"cp jboss.tar.gz /install/jboss".execute()println "Finished installing ${project}..."

} else{

println """USAGE: install jboss

[from src/dir] [to dest/dir]"""

}

Page 40: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 40/46

 A DSL for Time

Page 41: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 41/46

Page 42: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 42/46

Integer.metaClass.getHour = {->

delegate * 60}

Integer.metaClass.getMinutes = {->

delegate}

println 1.hour + 30.minutes

Page 43: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 43/46

 A DSL is a specific tool

Internal or External

To simplify the solution 

Page 44: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 44/46

DSLs in Groovy Say what you mean,

Mean what you say

Page 45: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 45/46

Scott Davis

Questions?Thanks for your time.

[email protected]

Page 46: Writing DSLs in Groovy

8/14/2019 Writing DSLs in Groovy

http://slidepdf.com/reader/full/writing-dsls-in-groovy 46/46

Photo Credits

http://commons.wikimedia.org/wiki/Image:John_Hill_and_John_Linthicum_shaking_hands.jpghttp://commons.wikimedia.org/wiki/Image:Computer_keyboard.gif http://flickr.com/photos/lourdes_place/1384832252/sizes/l/http://flickr.com/photos/lydian/2732579654/sizes/o/

http://commons.wikimedia.org/wiki/Image:Rosetta_Stone.JPGhttp://upload.wikimedia.org/wikipedia/commons/d/dc/Hammer-vertical.jpghttp://upload.wikimedia.org/wikipedia/commons/7/74/Swiss_army_similar_knife(side).jpghttp://sourcemaking.com/files/sm/images/hammer.jpghttp://flickr.com/photos/cyron/97468482/http://commons.wikimedia.org/wiki/Image:Furniture_installation_tools.jpghttp://www.chiefhomeofficer.com/wp-content/uploads/2008/04/folders-image-courtesy-

dpscsmdgov.jpghttp://upload.wikimedia.org/wikipedia/commons/2/21/Cylinder.pnghttp://commons.wikimedia.org/wiki/File:ParseTree.svghttp://upload.wikimedia.org/wikipedia/commons/0/0d/XML_To_XML_Transformation.pnghttp://flickr.com/photos/alternatewords/2292389441http://en.wikipedia.org/wiki/Image:Hostess_twinkies.jpghttp://commons.wikimedia.org/wiki/File:RelojDespertador.jpg