12.07.2015 Views

2008, Davisworld.org DSLs in Groovy Say what you mean ... - QCon

2008, Davisworld.org DSLs in Groovy Say what you mean ... - QCon

2008, Davisworld.org DSLs in Groovy Say what you mean ... - QCon

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

520Here ɛ- energy of electron, ω- energy of bremsstrahlung photon. The notations:Q = 2πZ2 α 2 ɛ(ɛ − ω)n a, Lm 4 1 =ln(a 2 s2ω/λ2 c ) = 2 ln(183Z−1/3 e −f ), (2)f =(Zα) 2 ∞ ∑k=11k(k 2 +(Zα) 2 )The determ<strong>in</strong>ation of L c :L c = ln( a2 s2) (3)λ 2 cρ 2 cIf 4QL 1 ≤ 1 then ρ c =1.If 4QL 1 > 1 then ρ c is the solution of equation:4Qρ 4 c ln( a2 s2)=1λ 2 c ρ2 cLetν1 2 = ɛ ɛ − ωɛ 0 ω , ɛ m0 =8πZ 2 α 2 n a λ 3 cExtract<strong>in</strong>g the imag<strong>in</strong>ary part from (1) we getdW = α m 2 {[ ∫dω∞r 1 ( 1 2π ɛ ɛ − ω 0 z − 1s<strong>in</strong>hz ) s<strong>in</strong>( z√ ) exp(− √ z )dz+ν 1 2Lc ν 1 2Lc√∫ Lc ∞ν 12 r 2 ( 10 z − 12 (s<strong>in</strong>hz) ) exp(− z]zz√ )[s<strong>in</strong>( √ ) + cos( √ )]dz +2 ν 1 2Lc ν 1 2Lc ν 1 2Lc∫1 ∞exp(−z}zz√ )[A s<strong>in</strong>( √ ) − B cos( √ )]dz (5)2L c 0 ν 1 2Lc ν 1 2Lc ν 1 2LcHere:A = r 1Ref 1 (z)+2r 2 Imf 2 (z), B = r 1Imf 1 (z) − 2r 2 Ref 2 (z)(s<strong>in</strong>h z) 2 (s<strong>in</strong>h z) 2Ref 1 (z) = [ln(ρ 2 c ) + ln(ν 1Ref 2 (z) = ν 1s<strong>in</strong>h zImf 2 (z) = ν 1s<strong>in</strong>h z√L c ) − ln(s<strong>in</strong>h z) − C]g(z) − 2 cosh(z)G(z),Imf 1 (z) =− π 4 g(z)√Lc2 (Ref 1(z) − g(z)2 − Imf 1(z))√Lc2 (Ref 1(z) − g(z)2 + Imf 1(z))(4)


What is aDoma<strong>in</strong> SpecificLanguage?3


Language9


DSL:a specific tool for aspecific job15


SQL16


select title, authorfrom bookwhere isbn = ‘abc123’;18


20


InternalorExternal?21


Simplicity26


monocalcium phosphate* Salt* Cornstarch* Corn flour* Corn syrup solids* Mono and diglycerides* Soy lecith<strong>in</strong>* Polysorbate 60* Dextr<strong>in</strong>* Calcium case<strong>in</strong>ate* Sodium stearol lactylate* Wheat gluten* Calcium sulfate* Natural and artificial flavors* Caramel color* Sorbic acid (to reta<strong>in</strong> freshness)* Artificial color (yellow 5, red 40)29


select * from books;31


What is<strong>Groovy</strong>?32


<strong>Groovy</strong> is a DSL for Java33


Install<strong>in</strong>g <strong>Groovy</strong>• Three steps:1. Download and unzip <strong>Groovy</strong> fromhttp://groovy.codehaus.<strong>org</strong>2. Create a GROOVY_HOME environment variable3. Add $GROOVY_HOME/b<strong>in</strong> to the PATH• Add<strong>in</strong>g <strong>Groovy</strong> to <strong>you</strong>r Java project is as simple asadd<strong>in</strong>g a s<strong>in</strong>gle JAR to <strong>you</strong>r CLASSPATH– $GROOVY_HOME/embeddable/groovy-all-1.5.7.jar36


public class HelloJava{public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){System.out.pr<strong>in</strong>tln("Hello Java");}}pr<strong>in</strong>tln “Hello <strong>Groovy</strong>”37


A DSL forInstallation38


#!/usr/b<strong>in</strong>/env groovyif(args){def project = args[0]pr<strong>in</strong>tln "Install<strong>in</strong>g ${project}...""cp jboss.tar.gz /<strong>in</strong>stall/jboss".execute()pr<strong>in</strong>tln "F<strong>in</strong>ished <strong>in</strong>stall<strong>in</strong>g ${project}..."} else{pr<strong>in</strong>tln """USAGE: <strong>in</strong>stall jboss[from src/dir] [to dest/dir]"""}40


A DSL forTime41


Integer.metaClass.getHour = {->delegate * 60}Integer.metaClass.getM<strong>in</strong>utes = {->delegate}pr<strong>in</strong>tln 1.hour + 30.m<strong>in</strong>utes43


A DSL is a specific toolInternal or ExternalTo simplify the solution44


<strong>Groovy</strong> is anoutstand<strong>in</strong>g tool forbuild<strong>in</strong>g <strong>DSLs</strong>45


<strong>DSLs</strong> <strong>in</strong> <strong>Groovy</strong><strong>Say</strong> <strong>what</strong> <strong>you</strong> <strong>mean</strong>,Mean <strong>what</strong> <strong>you</strong> say© <strong>2008</strong>, <strong>Davisworld</strong>.<strong>org</strong>46

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!