Writing DSLs in Groovy
-
Upload
best-tech-videos -
Category
Documents
-
view
243 -
download
0
Transcript of Writing DSLs in Groovy
![Page 1: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/1.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/2.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 2/46
![Page 3: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/6.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 6/46
![Page 7: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/7.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 7/46
![Page 8: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/8.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 8/46
![Page 9: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/9.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 9/46
![Page 10: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/11.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 11/46
![Page 12: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/12.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 12/46
![Page 13: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/13.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 13/46
![Page 14: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/14.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 14/46
![Page 15: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/15.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 15/46
![Page 16: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/18.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 18/46
![Page 19: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/19.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 19/46
![Page 20: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/20.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 20/46
![Page 21: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/23.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 23/46
![Page 24: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/24.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 24/46
![Page 25: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/25.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 25/46
![Page 26: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/26.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 26/46
![Page 27: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/28.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 28/46
![Page 29: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/29.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/30.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/31.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 31/46
![Page 32: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/32.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/33.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/35.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 35/46
![Page 36: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/36.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 36/46
![Page 37: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/37.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/38.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 38/46
![Page 39: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/39.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/40.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/41.jpg)
8/14/2019 Writing DSLs in Groovy
http://slidepdf.com/reader/full/writing-dsls-in-groovy 41/46
![Page 42: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/42.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/43.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/44.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/45.jpg)
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.
![Page 46: Writing DSLs in Groovy](https://reader030.fdocuments.in/reader030/viewer/2022021401/577dabee1a28ab223f8d2ec7/html5/thumbnails/46.jpg)
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