48
Domain Specific Domain Specific Language Language Dr. Weerasak Witthawaskul Dr. Weerasak Witthawaskul Mr. SweetCorn” Mr. SweetCorn” ([email protected]) ([email protected]) Narisa.com’s NJUG Meeting #3 Narisa.com’s NJUG Meeting #3 22 July 2007 22 July 2007

Domain Specific Languages

Embed Size (px)

DESCRIPTION

Domain Specific Languages presentation to NJUG3 on 22 July 2007

Citation preview

Page 1: Domain Specific Languages

Domain Specific Domain Specific LanguageLanguage

Dr. Weerasak WitthawaskulDr. Weerasak Witthawaskul““Mr. SweetCorn”Mr. SweetCorn”

([email protected])([email protected])

Narisa.com’s NJUG Meeting #3Narisa.com’s NJUG Meeting #322 July 200722 July 2007

Page 2: Domain Specific Languages

Who am I?Who am I? oop guy (Pantip) oop guy (Pantip) SweetCorn (narisa.com)SweetCorn (narisa.com) Wee (weerasak.com)Wee (weerasak.com)

UIUC – Home of Illiac, Transistor, UIUC – Home of Illiac, Transistor, Superconductivity, Mosaic, Paypal, Superconductivity, Mosaic, Paypal, YouTube, Design Patterns, RefactoringYouTube, Design Patterns, Refactoring

Motorola Labs, Schuamburg ILMotorola Labs, Schuamburg IL ThoughtWorks Inc., Chicago ILThoughtWorks Inc., Chicago IL

Page 3: Domain Specific Languages

Graduate LifeGraduate Life

Page 4: Domain Specific Languages

Programming Paradigm Programming Paradigm ShiftsShifts

Domain Specific LanguagesDomain Specific Languages Generative ProgrammingGenerative Programming Model Driven Architecture (MDA) - OMGModel Driven Architecture (MDA) - OMG Intentional Programming – Charles Intentional Programming – Charles

Simonyi, ex-MicrosoftSimonyi, ex-Microsoft Language Oriented Programming – Language Oriented Programming –

Sergey Dmitriev, JetBrains (Home of Sergey Dmitriev, JetBrains (Home of IntelliJ IDEA)IntelliJ IDEA)

Software Factories – Jack Greenfield, Software Factories – Jack Greenfield, MicrosoftMicrosoft

Page 5: Domain Specific Languages

What is DSL?What is DSL?

““วั�นน��มี�ประชุ�มีนร�สาดอทคอมีวั�นน��มี�ประชุ�มีนร�สาดอทคอมี””

ภาษาไทยภาษาไทย

““ท�าตั�วัตั�สตัด�น�กถู�กแมีวั�นมีาย�งท�าตั�วัชุ�วัชุ�วัอย��ท�าตั�วัตั�สตัด�น�กถู�กแมีวั�นมีาย�งท�าตั�วัชุ�วัชุ�วัอย��อ�กอ�ก...” ...”

ภาษาไทยเด กแนวั ภาษาไทยเด กแนวั (domain specific)(domain specific)

Page 6: Domain Specific Languages

What is DSL?What is DSL?

Mini-language to solve specific Mini-language to solve specific “domain” problem“domain” problem

Why is it important?Why is it important? SQL – Relational Database SQL – Relational Database

Manipulation LanguageManipulation Language Domain specific vs General purposeDomain specific vs General purpose What constitutes “domain specific” What constitutes “domain specific”

in programming languages?in programming languages?

Page 7: Domain Specific Languages

Mini GameMini Game

““What languages are they?”What languages are they?”

Are they languages for specific Are they languages for specific domains?domains?

From http://www.ntecs.de/old-hp/uu9r/lang/html/lang.en.htmlFrom http://www.ntecs.de/old-hp/uu9r/lang/html/lang.en.html

Page 8: Domain Specific Languages

What Languages are What Languages are they?they?

#include <stdio.h> #include <stdio.h>

main() { main() {

printf("Hello World\n");printf("Hello World\n");

}}

CC

Page 9: Domain Specific Languages

What Languages are What Languages are they?they?

.MODEL tiny.MODEL tiny

.CODE .CODE ORG 100h ORG 100h HELLO PROCHELLO PROC MOV AH,09h MOV AH,09h LEA DX,msg LEA DX,msg INT 21h ;Display Hello WorldINT 21h ;Display Hello World MOV AX,4C00h ;Exit to DOS MOV AX,4C00h ;Exit to DOS INT 21h INT 21h HELLO ENDP HELLO ENDP msg DB 'Hello World$' msg DB 'Hello World$' END HELLO END HELLO

Assembly Language Intel 80x86 (DOS/MASM)Assembly Language Intel 80x86 (DOS/MASM)

Page 10: Domain Specific Languages

What Languages are What Languages are they?they?

<?php <?php

echo "Hello World\n"; echo "Hello World\n";

?> ?>

PHPPHP

Page 11: Domain Specific Languages

What Languages are What Languages are they?they?

public class HelloWorld { public class HelloWorld {

public static void main(String[] args)public static void main(String[] args)

System.out.println("Hello World"); System.out.println("Hello World");

} }

}}

JavaJava

How about JME? JEE?How about JME? JEE?

Page 12: Domain Specific Languages

What Languages are What Languages are they?they?

PROGRAM HelloWorld; PROGRAM HelloWorld;

BEGIN BEGIN

WRITELN('Hello World'); WRITELN('Hello World');

END.END.

PASCALPASCAL

Page 13: Domain Specific Languages

What Languages are What Languages are they?they?

print "Hello World" print "Hello World"

PRINT “Hello World”PRINT “Hello World”

Basic, Python, Ruby, PerlBasic, Python, Ruby, Perl

Page 14: Domain Specific Languages

What Languages are What Languages are they?they?

SELECT 'Hello World' SELECT 'Hello World'

SQLSQL

Page 15: Domain Specific Languages

What Languages are What Languages are they?they?

BEGIN BEGIN

DBMS_OUTPUT.put_line('Hello World');DBMS_OUTPUT.put_line('Hello World');

END;END;

PL/SQLPL/SQL

Page 16: Domain Specific Languages

What Languages are What Languages are they?they?

Report Hello_World.Report Hello_World.

Write: "Hello World".Write: "Hello World".

ABAPABAP

Page 17: Domain Specific Languages

What Languages are What Languages are they?they?

io:fwrite("Hello World~n"). io:fwrite("Hello World~n").

ErlangErlang

Page 18: Domain Specific Languages

What Languages are What Languages are they?they?

IDENTIFICATION DIVISION. IDENTIFICATION DIVISION. PROGRAM-ID. HelloWorld. PROGRAM-ID. HelloWorld. AUTHOR. Fabritius. AUTHOR. Fabritius. ENVIRONMENT DIVISION. ENVIRONMENT DIVISION. CONFIGURATION SECTION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. INPUT-OUTPUT SECTION. DATA DIVISION. DATA DIVISION. FILE SECTION. FILE SECTION. WORKING-STORAGE SECTION. WORKING-STORAGE SECTION. LINKAGE SECTION. LINKAGE SECTION. PROCEDURE DIVISION. DISPLAY "Hello World". STOP RUN. PROCEDURE DIVISION. DISPLAY "Hello World". STOP RUN.

COBOLCOBOL

Page 19: Domain Specific Languages

What Languages are What Languages are they?they?

% Hello World % Hello World

/Courier findfont /Courier findfont

28 scalefont 28 scalefont

setfont setfont

0 0 moveto 0 0 moveto

(Hello World) show(Hello World) show

showpageshowpage

PostscriptPostscript

Page 20: Domain Specific Languages

What Languages are What Languages are they?they?

/(?ms)"((?>[^\\"]+)?(?>\\.[^\\"]*)*)//(?ms)"((?>[^\\"]+)?(?>\\.[^\\"]*)*)/

Regex – Regular ExpressionRegex – Regular Expression

Page 21: Domain Specific Languages

What Languages are What Languages are they?they?

describe ArticlesController, " GET index" dodescribe ArticlesController, " GET index" do it "should be successful" doit "should be successful" do get "index"get "index" response.should be_successresponse.should be_success endend

if "should set @articles" doif "should set @articles" do

Article.should_receive(:find).and_return(mock('artArticle.should_receive(:find).and_return(mock('articles'))icles'))

get "index"get "index" assigns[:articles].should_not be_nilassigns[:articles].should_not be_nilendend

RSpec on Ruby - Language of testing from TDD to RSpec on Ruby - Language of testing from TDD to BDDBDD

Page 22: Domain Specific Languages

What Languages are What Languages are they?they?

>gi|2501594|sp|Q57997|Y577_METJA >gi|2501594|sp|Q57997|Y577_METJA PROTEIN PROTEIN MJ0577MSVMYKKILYPTDFSETAEIALKHVKAFKTMJ0577MSVMYKKILYPTDFSETAEIALKHVKAFKTLKAEEVILLHVIDEREIKKRDIFSLLLGVAGLNKSVLKAEEVILLHVIDEREIKKRDIFSLLLGVAGLNKSVEEFENELKNKLTEEAKNKMENIKKELEDVGFKVKDIEEFENELKNKLTEEAKNKMENIKKELEDVGFKVKDIIVVGIPHEEIVKIAEDEGVDIIIMGSHGKTNLKEILIVVGIPHEEIVKIAEDEGVDIIIMGSHGKTNLKEILLGSVTENVIKKSNKPVLVVKRKNSLGSVTENVIKKSNKPVLVVKRKNS

BLAST queryBLAST query

Page 23: Domain Specific Languages

What Languages are What Languages are they?they?

aspect VisitAspect { aspect VisitAspect {

void Point.acceptVisitor(Visitor v) { void Point.acceptVisitor(Visitor v) {

v.visit(this); v.visit(this);

} }

} }

AspectJAspectJ

Page 24: Domain Specific Languages

What Languages are What Languages are they?they?

<!--ADVISOR--><!--ADVISOR--><bean id="<bean id="theCuckoosEggAdvisortheCuckoosEggAdvisor" "

class="org.springframework.aop.support.RegexpMethodPointclass="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> cutAdvisor">

<property name="advice"> <property name="advice"> <ref local="<ref local="theReplacementFeaturePart1AdvicetheReplacementFeaturePart1Advice"/> "/>

</property> </property> <property name="pattern"> <property name="pattern">

<value><value>IBusinessLogic.*IBusinessLogic.*</value> </value> </property> </property> </bean> </bean> <!--ADVICE--> <!--ADVICE--> <bean id="<bean id="theReplacementFeaturePart1AdvicetheReplacementFeaturePart1Advice" "

class="class="CuckoosEggCuckoosEgg"/> "/>

SpringAOPSpringAOP

Page 25: Domain Specific Languages

What Languages are What Languages are they?they?

<html> <html> <head><head> <title>Hello World</title> <title>Hello World</title> </head> </head> <body> <body> Hello World Hello World </body> </body>

</html></html>

Of course – HTML!Of course – HTML!

Page 26: Domain Specific Languages

What is DSL?What is DSL? No standard definitionNo standard definition

Specific vs General depends on point of viewSpecific vs General depends on point of view VB vs VBAVB vs VBA

It helps revealing intentionsIt helps revealing intentions Language that domain experts understandLanguage that domain experts understand

It becomes more and more popular It becomes more and more popular because of tooling supportbecause of tooling support You can apply DSLs to solve your problemsYou can apply DSLs to solve your problems You can even create your own DSL!You can even create your own DSL!

Page 27: Domain Specific Languages

DSL ExamplesDSL Examples

DSLDSL DomainDomain

SQLSQL Database Database ManipulationManipulation

PostscriptPostscript PublishingPublishing

HibernateHibernate Object Relational Object Relational MappingMapping

RegexRegex Pattern MatchingPattern Matching

BNLBNL Business Natural Business Natural LanguageLanguage

AdhersionAdhersion TelecomTelecom

Page 28: Domain Specific Languages

DSL – Telecom App DSL – Telecom App FrameworkFramework

Adhearsion (open source telecom application framework)

+ Asterisk (open source telephony platform)

Page 29: Domain Specific Languages

LEL – Layout Expression LEL – Layout Expression LanguageLanguage

Source: http://pphetra.blogspot.com/2007/07/lel.html

layout = " [ label_1 | label3 ] layout = " [ label_1 | label3 ]

[ (300,300)*text1 | (150)people ] [ (300,300)*text1 | (150)people ]

[ <label2 | _ ] [ <label2 | _ ]

[ message | buttons ] " [ message | buttons ] "

Page 30: Domain Specific Languages

When to justify DSL When to justify DSL

Repeated need of solutions to Repeated need of solutions to particular problemsparticular problems

You have a good understanding of You have a good understanding of problem domainproblem domain

There is a ready-to-use DSL in that There is a ready-to-use DSL in that domaindomain

Or if you have to invent one…Or if you have to invent one… What should it look like?What should it look like?

Page 31: Domain Specific Languages

Example - Coffee Order Example - Coffee Order DSLDSL

Starbucks Coffee Order Starbucks Coffee Order (*)(*)

“Venti half-caf, non-fat, no foam, no whip latte”

Traditional Implementation

(*) Agile DSL Development in Ruby – Obie Fernandez (http://obiefernandez.com)

Page 32: Domain Specific Languages

Problems with the Problems with the exampleexample

Depends on APIsDepends on APIs Code does not match the way the domain Code does not match the way the domain

is describedis described Still difficult to read and verifyStill difficult to read and verify

Page 33: Domain Specific Languages
Page 34: Domain Specific Languages

DSL styleDSL style

Reveal intention betterReveal intention better Take advantage of Ruby featuresTake advantage of Ruby features

Untyped declarationUntyped declaration No parenthesis parameterNo parenthesis parameter Metaprogramming support i.e. create Metaprogramming support i.e. create

class methods on the fly etc.class methods on the fly etc.

Page 35: Domain Specific Languages

Coffee Order DSL in JavaCoffee Order DSL in Java

API approachAPI approachCoffeeOrder order = new Latte(VENTI, CoffeeOrder order = new Latte(VENTI, HALF_CAF, NONFAT_MILK);HALF_CAF, NONFAT_MILK);

CoffeeOrder coffee = order.prepare(false);CoffeeOrder coffee = order.prepare(false);

DSL approachDSL approachCoffeeOrder order = new CoffeeOrder order = new Latte().size(VENTI).caffeine(HALF).milk(NOLatte().size(VENTI).caffeine(HALF).milk(NONFAT).foam(FALSE);NFAT).foam(FALSE);

CoffeeOrder coffee = order.prepare();CoffeeOrder coffee = order.prepare();

Page 36: Domain Specific Languages

How about other How about other representations?representations?

XMLXML<Order type=“Latte”><Order type=“Latte”> <caffeine>half</caffeine><caffeine>half</caffeine> <milk>nonfat</milk><milk>nonfat</milk> <foam>false</form><foam>false</form> <whip>false</whip><whip>false</whip></Order></Order> EnglishEnglish“Venti half-caf, non-fat, no foam, no whip

latte”“Venti latte with no whip cream, no foam,

non-fat milk, half-caffeine”

Page 37: Domain Specific Languages

Types of DSLTypes of DSL Internal DSLInternal DSL

Use an existing “host” programming language Use an existing “host” programming language to describe DSLto describe DSL

Leverage host compiler/interpreterLeverage host compiler/interpreter Some programming languages are better for Some programming languages are better for

describing DSL e.g. dynamic languages; some describing DSL e.g. dynamic languages; some use metaprogramming / annotationsuse metaprogramming / annotations

External DSLExternal DSL Define your own format of the languageDefine your own format of the language Use XML along with XSD or DTDUse XML along with XSD or DTD Must create your own parser/interpreterMust create your own parser/interpreter Or use DSL toolsOr use DSL tools

Page 38: Domain Specific Languages

External DSLExternal DSL

Business Natural Language (BNL)Business Natural Language (BNL)

““exclude offer 30 percent cli if d score exclude offer 30 percent cli if d score is less than or equal to 2”is less than or equal to 2”

Custom DSLCustom DSLshow us-state field when country select box is show us-state field when country select box is

"United States""United States"

show province field when country select box is show province field when country select box is "Canada""Canada"

show brutus when us-state select box is "Ohio" or show brutus when us-state select box is "Ohio" or "Michigan""Michigan"

Page 39: Domain Specific Languages

DSL DesignDSL Design DSL is not just APIDSL is not just API

show us-state field when country select box is "United States"show us-state field when country select box is "United States"show province field when country select box is "Canada"show province field when country select box is "Canada"show brutus when us-state select box is "Ohio" or "Michigan" show brutus when us-state select box is "Ohio" or "Michigan"

JavaScript Solution #1JavaScript Solution #1create_dynamic_field("show", "us-state-field", "country", "United create_dynamic_field("show", "us-state-field", "country", "United

States");States");create_dynamic_field("show", "province-field", "country", create_dynamic_field("show", "province-field", "country",

"Canada");"Canada");create_dynamic_field("show", "brutus", "state", ["Ohio", create_dynamic_field("show", "brutus", "state", ["Ohio",

"Michigan"]);"Michigan"]);

JavaScript Solution #2JavaScript Solution #2show("us-state-field").when("country").is("United States");show("us-state-field").when("country").is("United States");show("province-field").when("country").is("Canada");show("province-field").when("country").is("Canada");show("brutus").when("us-state").is("Ohio, Michigan");show("brutus").when("us-state").is("Ohio, Michigan");

Page 40: Domain Specific Languages

DSL ToolsDSL Tools

Martin Fowler coined the term Martin Fowler coined the term “Language Workbench”“Language Workbench”

Provide GUI frontend, metamodeling Provide GUI frontend, metamodeling and/or code generation to define and and/or code generation to define and use DSLuse DSL Microsoft DSL tool for Visual StudioMicrosoft DSL tool for Visual Studio Intentional SoftwareIntentional Software Eclipse EMFEclipse EMF JetBrains Meta Programing SystemJetBrains Meta Programing System

Page 41: Domain Specific Languages

MS DSL Tool for VS MS DSL Tool for VS StudioStudio

Tutorial: Applying Domain-Specific Modeling to Game Development with the Microsoft DSL Tools. André W. B. Furtado, André L. de M. Santos

Page 42: Domain Specific Languages

Metacase’s MetaEdit+Metacase’s MetaEdit+

http://www.metacase.com/fs.asp?vasen=vasen.html&paa=cases/dsm_examples.html

Page 43: Domain Specific Languages

Jetbrains Meta Jetbrains Meta Programming System Programming System

(MPS)(MPS)

Page 44: Domain Specific Languages

SummarySummary

DSL is one way to increase a level of DSL is one way to increase a level of abstractionabstraction DSL developers define syntax and DSL developers define syntax and

semantics to express solutions closer to semantics to express solutions closer to the domain problemthe domain problem Using DSL toolsUsing DSL tools Creating parser/interpreterCreating parser/interpreter Embedding to host languagesEmbedding to host languages

DSL users can be either programmers DSL users can be either programmers or domain expertsor domain experts

Page 45: Domain Specific Languages

SummarySummary

Types of DSLTypes of DSL Internal DSLInternal DSL

People start to use dynamic languages to People start to use dynamic languages to create DSLcreate DSL

Ruby on Rails/Grails, Rake (Make on Ruby)Ruby on Rails/Grails, Rake (Make on Ruby)

External DSLExternal DSL Design is importantDesign is important

Consult with domain expertsConsult with domain experts

Page 46: Domain Specific Languages

Further InformationFurther Information Wikipedia’s DSL Wikipedia’s DSL

http://en.wikipedia.org/wiki/Domain-http://en.wikipedia.org/wiki/Domain-specific_programming_languagespecific_programming_language

Martin Fowler’s Bliki on DSL Martin Fowler’s Bliki on DSL http://martinfowler.com/bliki/dsl.htmlhttp://martinfowler.com/bliki/dsl.html

Language Workbenches: The Killer-App for Language Workbenches: The Killer-App for Domain Specific Languages? Domain Specific Languages? http://martinfowler.com/articles/languageWorkbehttp://martinfowler.com/articles/languageWorkbench.htmlnch.html

Obie Fernandez’s Agile DSL Development in Ruby (http://obiefernandez.com/presentations/obie_fernandez-agile_dsl_development_in_ruby.pdf)

Sergey Dmitriev’s Language Oriented Sergey Dmitriev’s Language Oriented Programming: The Next Programming Paradigm Programming: The Next Programming Paradigm (www.onboard.jetbrains.com/is1/articles/04/10/lo(www.onboard.jetbrains.com/is1/articles/04/10/lop/mps.pdf)p/mps.pdf)

Page 47: Domain Specific Languages

Q&AQ&A

Thai’s resourcesThai’s resources

Narisa.com’s Design & Narisa.com’s Design & Analysis forum Analysis forum

ThaiDev.orgThaiDev.org

Page 48: Domain Specific Languages

Backup slidesBackup slides