Top Banner
Domain Specific Languages International PHP Conference 2012 Tobias Schlitt (@tobySen) Gordon Oheim (@go oh) 2012-10-15 Domain Specific Languages 1 / 42
95

Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Jun 22, 2018

Download

Documents

doanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Domain Specific LanguagesInternational PHP Conference 2012

Tobias Schlitt (@tobySen)Gordon Oheim (@go oh)

2012-10-15

Domain Specific Languages 1 / 42

Page 2: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 2 / 42

Page 3: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Qafoopassion for software quality

Domain Specific Languages 3 / 42

Page 4: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Qafoopassion for software quality

Domain Specific Languages 3 / 42

Page 5: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Qafoopassion for software quality

Domain Specific Languages 3 / 42

Page 6: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Qafoopassion for software quality

Domain Specific Languages 3 / 42

Page 7: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Co-founder of

Qafoopassion for software quality

Domain Specific Languages 3 / 42

Page 8: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Co-founder of

Qafoopassion for software quality

Helping teams to createhigh quality web

applications.

Domain Specific Languages 3 / 42

Page 9: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Tobias Schlitt (Toby)I Degree in computer scienceI More than 10 years of

professional PHPI Open source enthusiastI Software Architecture,

Design, Testing . . .

Co-founder of

Qafoopassion for software quality

Helping teams to createhigh quality web

applications.

http://qafoo.com

Domain Specific Languages 3 / 42

Page 10: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Gordon OheimI Professional PHP developerI More than 10 years

experienceI OOA, OOD, OOP loverI Interested in agile and leanI PHP Documentation TeamI Stack overflow contributor

Domain Specific Languages 4 / 42

Page 11: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Gordon OheimI Professional PHP developerI More than 10 years

experienceI OOA, OOD, OOP loverI Interested in agile and leanI PHP Documentation TeamI Stack overflow contributor

Domain Specific Languages 4 / 42

Page 12: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Gordon OheimI Professional PHP developerI More than 10 years

experienceI OOA, OOD, OOP loverI Interested in agile and leanI PHP Documentation TeamI Stack overflow contributor

Domain Specific Languages 4 / 42

Page 13: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Gordon OheimI Professional PHP developerI More than 10 years

experienceI OOA, OOD, OOP loverI Interested in agile and leanI PHP Documentation TeamI Stack overflow contributor

Domain Specific Languages 4 / 42

Page 14: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

About us

I Gordon OheimI Professional PHP developerI More than 10 years

experienceI OOA, OOD, OOP loverI Interested in agile and leanI PHP Documentation TeamI Stack overflow contributor Freelance Developer

Domain Specific Languages 4 / 42

Page 15: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 16: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 17: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 18: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 19: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 20: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Before we start . . .

I Please take a minute after the talk . . .I . . . to rate this talk . . .I . . . to make it better for . . .

I . . . OrganizersI . . . SpeakersI . . . You

I Just go to https://joind.in/7281I We’ll show the link later again :)

Domain Specific Languages 5 / 42

Page 21: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 6 / 42

Page 22: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

A common DSL

1 (2 h t t p : / / # match hype r l i nks3 ( ? :www\ . ) ? # o p t i o n a l www4 s tackover f low .com/ # p o i n t i n g to s tackover f low5 q ( ? : ues t ions ) ? / # w i th path q or quest ions6 (?P<qid >\d+) # and get the Question ID7 ) x iu

Domain Specific Languages 7 / 42

Page 23: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

PCRE

I Only for text matchingI Limitted expressabilityI Embedded into other languages (e.g. PHP)

. . . concise and flexible means to “match” (specify andrecognize) strings of text, such as particular characters,words, or patterns of characters.

–Wikipedia

Domain Specific Languages 8 / 42

Page 24: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

PCRE

I Only for text matchingI Limitted expressabilityI Embedded into other languages (e.g. PHP)

. . . concise and flexible means to “match” (specify andrecognize) strings of text, such as particular characters,words, or patterns of characters.

–Wikipedia

Domain Specific Languages 8 / 42

Page 25: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Another well-known DSL

1 SELECT COUNT( course . person id ) AS count persons ,p ro fessor . name

2 FROM pro fessor3 LEFT OUTER JOIN course4 ON pro fessor . i d = course . p r o f i d5 GROUP BY pro fessor . i d

Domain Specific Languages 9 / 42

Page 26: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

SQL

I Only for RDBMS querying / manipulationI Limitted expressabilityI Embedded into other languages (e.g. PHP)

. . . a special-purpose programming language designedfor managing data in relational database managementsystems. . .

–Wikipedia

Domain Specific Languages 10 / 42

Page 27: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

SQL

I Only for RDBMS querying / manipulationI Limitted expressabilityI Embedded into other languages (e.g. PHP)

. . . a special-purpose programming language designedfor managing data in relational database managementsystems. . .

–Wikipedia

Domain Specific Languages 10 / 42

Page 28: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

What is a DSL?

Domain-specific language (noun): a computerprogramming language of limited expressivenessfocused on a particular domain.

–Martin Fowler

Domain Specific Languages 11 / 42

Page 29: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 30: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 31: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 32: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 33: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 34: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 35: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Do you know more?

XPath

ant

CSS

graphviz

Java

Domain Specific Languages 12 / 42

Page 36: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Java

Java is a Domain Specific Language to compilelarge XML files into stack traces

Domain Specific Languages 13 / 42

Page 37: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

Domain Specific Languages 14 / 42

Page 38: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 39: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 40: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 41: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 42: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 43: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Why create a DSL?

I Easy to read and useI Business communicationI Simplify complex model adjustmentsI Ease repetetive tasksI Expressive and noiselessI Powerful configuration

Domain Specific Languages 15 / 42

Page 44: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 16 / 42

Page 45: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Behat / Mink

I BehatI BDD framework written in PHPI http://behat.org/

I MinkI Web-Acceptance-Test framework for BehatI http://mink.behat.org/

Domain Specific Languages 17 / 42

Page 46: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Mink

1 Feature : R e g i s t r a t i o n2 In order to perform ac t ions l i k e an order3 As a normal user4 I must perform a r e g i s t r a t i o n5

6 Scenario : Test a d e f a u l t r e g i s t r a t i o n7 Given I am on ” / r e g i s t e r ”8 When I s e l e c t ” p r i v a t e ” from ”

reg i s te r pe rsona l cus tomer t ype ”9 And I f i l l i n ” f i r s tname ” w i th ” Tobias ”

10 And I f i l l i n ” lastname ” w i th ” S c h l i t t ”11 And I f i l l i n ” reg is te r password ” w i th ” s i n d e l f i n g e n ”12 And I f i l l i n ” reg is te r password2 ” w i th ” s i n d e l f i n g e n13 And I press ” r e g i s t e r b u t t o n ”14 Then I should see ” Willkommen , Tobias S c h l i t t ”

Domain Specific Languages 18 / 42

Page 47: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Gherkin

Gherkin is a Business Readable DSL created especiallyfor behavior descriptions.

–Gherkin websiteI Behavior Driven Development (BDD)I Write test cases your business can readI Create your own DSL based on Gherkin

Domain Specific Languages 19 / 42

Page 48: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Gherkin

Gherkin is a Business Readable DSL created especiallyfor behavior descriptions.

–Gherkin websiteI Behavior Driven Development (BDD)I Write test cases your business can readI Create your own DSL based on Gherkin

Domain Specific Languages 19 / 42

Page 49: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Gherkin

Gherkin is a Business Readable DSL created especiallyfor behavior descriptions.

–Gherkin websiteI Behavior Driven Development (BDD)I Write test cases your business can readI Create your own DSL based on Gherkin

Domain Specific Languages 19 / 42

Page 50: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Building an external DSL

1. Domain Language

2. Grammar (BNF)

3. Lexer

4. Parser (or Parser-Generator)

5. . . .

Domain Specific Languages 20 / 42

Page 51: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Gherkin Parser

Domain Specific Languages 21 / 42

Page 52: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know
Page 53: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 23 / 42

Page 54: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Interface Distiller

Allows you to create Interfaces from existing classes

–Gordon

Domain Specific Languages 24 / 42

Page 55: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Semantic Model 1/2

1 $ r e f l e c t o r = new \Ref lec t ionC lass ( ’ ConcreteFoo ’ ) ;2

3 $methodI te ra to r = new F i l t e r s \NoImplementedMethodsIterator (

4 new F i l t e r s \NoInher i tedMethods I te ra to r (5 new F i l t e r s \NoOldS ty leCons t ruc to r I t e ra to r (6 new F i l t e r s \NoMagicMethodsIterator (7 new \ A r r a y I t e r a t o r ( $ r e f l e c t o r −>

getMethods ( ) )8 )9 ) ,

10 $ r e f l e c t o r11 )12 ) ;

Domain Specific Languages 25 / 42

Page 56: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Semantic Model 2/2

1 $ d i s t i l l a t e = new D i s t i l l a t e ;2

3 $ d i s t i l l a t e −>setInterfaceName ( ’ FooIn te r face ’ ) ;4 $ d i s t i l l a t e −>se tEx tend ing In te r faces ( ’ I t e r a t o r ,

Seekab le I t e ra to r ’ ) ;5 foreach ( $methodI te ra to r as $method ) {6 $ d i s t i l l a t e −>addMethod ( $method ) ;7 }

8

9 $ f i l e = new \ Sp lF i l eOb jec t ( ’ Foo In te r face ’ ) ;10 $ w r i t e r = new D i s t i l l a t e \Wr i te r ( $ f i l e ) ;11 $wr i t e r −>w r i t e T o F i l e ( $ d i s t i l l a t e ) ;

Domain Specific Languages 26 / 42

Page 57: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Semantic Model

I ”The Domain”I Lots of Syntactic NoiseI No linguistic abstractionI Basis for ”the language”I Follows general design principles

Domain Specific Languages 27 / 42

Page 58: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Semantic Model

I ”The Domain”I Lots of Syntactic NoiseI No linguistic abstractionI Basis for ”the language”I Follows general design principles

Domain Specific Languages 27 / 42

Page 59: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Semantic Model

I ”The Domain”I Lots of Syntactic NoiseI No linguistic abstractionI Basis for ”the language”I Follows general design principles

Domain Specific Languages 27 / 42

Page 60: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Semantic Model

I ”The Domain”I Lots of Syntactic NoiseI No linguistic abstractionI Basis for ”the language”I Follows general design principles

Domain Specific Languages 27 / 42

Page 61: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Expression Builder

1 $ d i s t i l l e r = new I n t e r f a c e D i s t i l l e r ;2 $ d i s t i l l e r3 −>methodsWithModif iers (\ Ref lect ionMethod : :

IS PUBLIC )4 −>extendInter faceFrom ( ’ I t e r a t o r , Seekab le I t e ra to r

’ )5 −>excludeImplementedMethods ( )6 −>excludeInher i tedMethods ( )7 −>excludeMagicMethods ( )8 −>exc ludeOldSty leConst ruc tors ( )9 −>saveAs ( ’ Foo In te r face . php ’ )

10 −> d i s t i l l ( ’ ConcreteFoo ’ , ’ Foo In te r face ’ ) ;

Domain Specific Languages 28 / 42

Page 62: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Expression Builder

I ”The language”I Capture essential usageI Hide complexity and mechanicsI Effectively: Semantic FacadeI Fluent InterfaceI Pragmatic implementation

Domain Specific Languages 29 / 42

Page 63: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Expression Builder

I ”The language”I Capture essential usageI Hide complexity and mechanicsI Effectively: Semantic FacadeI Fluent InterfaceI Pragmatic implementation

Domain Specific Languages 29 / 42

Page 64: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Expression Builder

I ”The language”I Capture essential usageI Hide complexity and mechanicsI Effectively: Semantic FacadeI Fluent InterfaceI Pragmatic implementation

Domain Specific Languages 29 / 42

Page 65: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Pattern: Expression Builder

I ”The language”I Capture essential usageI Hide complexity and mechanicsI Effectively: Semantic FacadeI Fluent InterfaceI Pragmatic implementation

Domain Specific Languages 29 / 42

Page 66: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Different Syntax

1 p h p d i s t i l l −−boots t rap . / boo ts t rap . php \2 −−methodsWithModif iers 256 \3 −−extendInter faceFrom I t e r a t o r , \4 Seekab le I t e ra to r \5 −−excludeImplementedMethods \6 −−excludeInher i tedMethods \7 −−excludeMagicMethods \8 −−exc ludeOldSty leConst ruc tors \9 −−saveAs FooIn te r face . php ConcreteFoo

FooIn te r face

Domain Specific Languages 30 / 42

Page 67: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know
Page 68: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Additional example: Zeta SQL Abstraction

1 $updateQuery2 −>update ( ’ e z c o n t e n t o b j e c t a t t r i b u t e ’ )3 −>set (4 ’ language id ’ ,5 $updateQuery−>bindValue ( $newLanguageMask )6 )7 −>where (8 $updateQuery−>expr−>lAnd (9 $updateQuery−>expr−>eq (

10 ’ c o n t e n t o b j e c t i d ’ ,11 $updateQuery−>bindValue ( $conten t Id )12 ) ,13 $updateQuery−>expr−>eq (14 ’ ve rs ion ’ ,15 $updateQuery−>bindValue ( $versionNo )16 )17 )18 ) ;

Domain Specific Languages 32 / 42

Page 69: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Additional example: Mockery

1 $mock = M: : mock ( ’ Engineer ing ’ ) ;2 $mock−>shouldReceive ( ’ disengageWarp ’ )3 −>once ( )−>ordered ( ) ;4 $mock−>shouldReceive ( ’ d iver tPower ’ )5 −>wi th (0 .40 , ’ sensors ’ )−>once ( )−>ordered ( ) ;6 $mock−>shouldReceive ( ’ d iver tPower ’ )7 −>wi th (0 .30 , ’ auxengines ’ )−>once ( )−>ordered ( ) ;8 / / . . .9

10 $s ta rsh ip = new Starsh ip ( $mock ) ;11 $s ta rsh ip −>e n t e r O r b i t ( ) ;

Domain Specific Languages 33 / 42

Page 70: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 34 / 42

Page 71: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser

Renders code into a browsable HTML presentation

–Toby

Domain Specific Languages 35 / 42

Page 72: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser DSL

1 base : ” . / ”2 −

3 f i l e : ” example3−behat . php ”4 d i sp lay : ”2 ,8 ,9−21”5 h i g h l i g h t s :6 1: ”9 ,10 ,21”7 2: ”11−13”8 3: ”16−19”9 −

10 f i l e : ” example7− i n t e r f a c e − d i s t i l l e r . php ”11 d i sp lay : ”3−7 ,11 ,12”12 h i g h l i g h t s :13 1: ” 3 ”14 2: ”11 ,12”

Domain Specific Languages 36 / 42

Page 73: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser DSL

1 base : ” . / ”2 −

3 f i l e : ” example3−behat . php ”4 d i sp lay : ”2 ,8 ,9−21”5 h i g h l i g h t s :6 1: ”9 ,10 ,21”7 2: ”11−13”8 3: ”16−19”9 −

10 f i l e : ” example7− i n t e r f a c e − d i s t i l l e r . php ”11 d i sp lay : ”3−7 ,11 ,12”12 h i g h l i g h t s :13 1: ” 3 ”14 2: ”11 ,12”

Domain Specific Languages 36 / 42

Page 74: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser DSL

1 base : ” . / ”2 −

3 f i l e : ” example3−behat . php ”4 d i sp lay : ”2 ,8 ,9−21”5 h i g h l i g h t s :6 1: ”9 ,10 ,21”7 2: ”11−13”8 3: ”16−19”9 −

10 f i l e : ” example7− i n t e r f a c e − d i s t i l l e r . php ”11 d i sp lay : ”3−7 ,11 ,12”12 h i g h l i g h t s :13 1: ” 3 ”14 2: ”11 ,12”

Domain Specific Languages 36 / 42

Page 75: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser DSL

1 base : ” . / ”2 −

3 f i l e : ” example3−behat . php ”4 d i sp lay : ”2 ,8 ,9−21”5 h i g h l i g h t s :6 1: ”9 ,10 ,21”7 2: ”11−13”8 3: ”16−19”9 −

10 f i l e : ” example7− i n t e r f a c e − d i s t i l l e r . php ”11 d i sp lay : ”3−7 ,11 ,12”12 h i g h l i g h t s :13 1: ” 3 ”14 2: ”11 ,12”

Domain Specific Languages 36 / 42

Page 76: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser DSL

1 base : ” . / ”2 −

3 f i l e : ” example3−behat . php ”4 d i sp lay : ”2 ,8 ,9−21”5 h i g h l i g h t s :6 1: ”9 ,10 ,21”7 2: ”11−13”8 3: ”16−19”9 −

10 f i l e : ” example7− i n t e r f a c e − d i s t i l l e r . php ”11 d i sp lay : ”3−7 ,11 ,12”12 h i g h l i g h t s :13 1: ” 3 ”14 2: ”11 ,12”

Domain Specific Languages 36 / 42

Page 77: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 78: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 79: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 80: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 81: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 82: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Example: Code browser Semantic Model

1 $codeManager = new CodeManager ( D IR ) ;23 $s l ideGenera tor = new L i s t i ngS l i deGene ra to r (4 $codeManager ,5 ’ example3−behat . php ’ ,6 new D i s p l a y F i l t e r (7 new Tools \Range (8 2 , 8 , range ( 9 , 21 )9 )

10 ) ,11 new H i g h l i g h t D e f i n i t i o n (12 ar ray (13 ar ray (14 new Tools \Range ( 1 ) ,15 new Tools \Range ( 9 , 10 , 21 )16 ) ,17 ar ray (18 new Tools \Range ( 2 ) ,19 new Tools \Range ( range ( 11 , 13 ) )20 ) ,21 ar ray (22 new Tools \Range ( 3 ) ,23 new Tools \Range ( range ( 16 , 19 ) )24 ) ,25 )26 )27 ) ;Domain Specific Languages 37 / 42

Page 83: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Outline

About us

DSL WTF?

External DSL

Internal DSL

Abusing other languages

Summary

Domain Specific Languages 38 / 42

Page 84: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

DSL vs. Configuration

Is every configuration a DSL?

I Simple: No.I Missing semanticsI Missing expressivenessI But it’s a fluid transition . . .

Domain Specific Languages 39 / 42

Page 85: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

DSL vs. Configuration

Is every configuration a DSL?

I Simple: No.I Missing semanticsI Missing expressivenessI But it’s a fluid transition . . .

Domain Specific Languages 39 / 42

Page 86: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

DSL vs. Configuration

Is every configuration a DSL?

I Simple: No.I Missing semanticsI Missing expressivenessI But it’s a fluid transition . . .

Domain Specific Languages 39 / 42

Page 87: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

DSL vs. Configuration

Is every configuration a DSL?

I Simple: No.I Missing semanticsI Missing expressivenessI But it’s a fluid transition . . .

Domain Specific Languages 39 / 42

Page 88: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 89: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 90: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 91: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 92: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 93: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Conclusion

I DSLs can greatly enhance your liveI Business communicationI Simplify complex (repetetive?) tasksI Expressive and noiselessI Powerful configuration

I No need for external DSL in 1st place1. Create Semantic Model2. Create an internal DSL3. Maybe abuse other language4. Create a (E)BNF5. Use a parser generator

I DSLs are no golden hammer!

Domain Specific Languages 40 / 42

Page 94: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Thanks for Listening!

Stay in touch

I GordonI @go ohI [email protected]

I TobyI @tobySenI [email protected]

Rate the talk!

https://joind.in/7281

Domain Specific Languages 41 / 42

Page 95: Domain Specific Languages - Qafoo€“Martin Fowler Domain Specific Languages 11 / 42. Do you know more? XPath ant CSS graphviz Java Domain Specific Languages 12 / 42. Do you know

Attribution

I Hammer photo CC-BY stebulus,https://secure.flickr.com/photos/stebulus/231058538/

I Cat photo CC-NC-BY-SA buttersweet,https://secure.flickr.com/photos/buttersweet/433993378/

Domain Specific Languages 42 / 42