Upload
best-tech-videos
View
243
Download
0
Embed Size (px)
Citation preview
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
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 2/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 3/46
Scott Davis
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 4/46
What is a
Domain SpecificLanguage?
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 5/46
Domain
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 6/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 7/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 8/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 9/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 10/46
Language
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 11/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 12/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 13/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 14/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 15/46
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
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 17/46
SQL
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 18/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 19/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 20/46
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>
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 22/46
Internalor
External?
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 23/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 24/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 25/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 26/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 27/46
Simplicity
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 28/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 29/46
* C h
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)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 31/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 32/46
select * from books;
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 33/46
What isGroovy?
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 34/46
Groovy is a DSL for Java
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 35/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 36/46
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 37/46
A DSL for Installation
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 38/46
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]"""
}
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 40/46
A DSL for Time
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 41/46
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
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
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
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.
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