domain specific language design

261
DSL Design A conceptual framework for building good DSLs Markus Voelter independent/itemis [email protected] www.voelter.de voelterblog.blogspot.de @markusvoelter +Markus Voelter [email protected] http://eelcovisser.or based on material from a paper written with Eelco Visser

Upload: markus-voelter

Post on 10-May-2015

1.222 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Domain Specific Language Design

DSL DesignA conceptual frameworkfor building good DSLs

Markus Voelterindependent/itemis

[email protected]

www.voelter.devoelterblog.blogspot.de

@markusvoelter+Markus Voelter

[email protected]://eelcovisser.org/

based on materialfrom a paper written with Eelco Visser

Page 2: Domain Specific Language Design

Introduction

Page 3: Domain Specific Language Design

A DSL is a focussed, processable language for

describing a specific concern when building a system in a

specific domain. The abstractions and notations

used are natural/suitable for the stakeholders who specify that

particular concern.

Page 4: Domain Specific Language Design

more in GPLs more in DSLDomain Size large and complex smaller and well-defined

Designed by guru or committee a few engineers and domain experts

Language Size large small

Turing-completeness

almost always often not

User Community large, anonymous and widespread

small, accessible and local

In-language abstraction

sophisticated limited

Lifespan years to decades months to years (driven by context)

Evolution slow, often standardized fast-paced

Incompatible Changes

almost impossible feasible

Page 5: Domain Specific Language Design

C

LEGO Robot Control

Components

State Machines

Sensor Access

General Purpose

Domain Specific

Page 6: Domain Specific Language Design

my L

a b c

d e f

g h i

j k l

Modular Language

composable moduleswith many optional,

Page 7: Domain Specific Language Design

Case Studies

Page 8: Domain Specific Language Design

Components

Example

Page 9: Domain Specific Language Design

Components

Example

Page 10: Domain Specific Language Design

RefrigeratorsRefrigerators

Example

Page 11: Domain Specific Language Design

Refrigerators

Example

Page 12: Domain Specific Language Design

Refrigerators

Example

Page 13: Domain Specific Language Design

Extended C

Example

Page 14: Domain Specific Language Design

Pension Plans

Example

Page 15: Domain Specific Language Design

Pension Plans

Example

Page 16: Domain Specific Language Design

WebDSL

Example

Page 17: Domain Specific Language Design

Terms &

Concepts

Page 18: Domain Specific Language Design

Model

A schematic description of a system, theory, or phenomenon that accounts for its known or inferred properties and may be

used for further study of its characteristics

www.answers.com/topic/model

Page 19: Domain Specific Language Design

A representation of a set of components of a process, system,

or subject area, generally developed for understanding, analysis, improvement, and/or

replacement of the process

www.ichnet.org/glossary.htm

Model

Page 20: Domain Specific Language Design

an abstraction or simplification of reality

ecosurvey.gmu.edu/glossary.htm

which ones?

what should we leave out?

Model

Page 21: Domain Specific Language Design

… code generation… analysis and checking… platform independence… stakeholder integration… drives design of

language!

Model Purpose

Page 22: Domain Specific Language Design

Model Purpose

… code generation… analysis and checking… platform independence… stakeholder integration

Components

Example

Page 23: Domain Specific Language Design

Refrigerators

Model Purpose

… code generation… analysis and checking… platform independence… stakeholder integration

Refrigerators

Example

Page 24: Domain Specific Language Design

Extended C

Model Purpose

… code generation… analysis and checking… platform independence… stakeholder integration

Extended C

Example

Page 25: Domain Specific Language Design

Model Purpose

… code generation… analysis and checking… platform independence… stakeholder integration

PensionPlans

Example

Page 26: Domain Specific Language Design

Domain

body of knowledge

in the real worlddeductivetop down

existing software (family)

inductivebottom up

Page 27: Domain Specific Language Design

Domain

body of knowledge

in the real worlddeductivetop down

RefrigeratorsRefrigerators

Example

PenionPlans

Example

Page 28: Domain Specific Language Design

Domain

Componetns

Example

existing software (family)

inductivebottom up

Domain

Extended C

Example

Page 29: Domain Specific Language Design

A DSL LD for D is a language that is

specialized to en-coding PD programs.

more efficientsmaller

Page 30: Domain Specific Language Design

Programs are trees

element

Page 31: Domain Specific Language Design

Fragments are subtrees w/ root

fragment

fragment rootf

Page 32: Domain Specific Language Design

Parent-ChildRelation

f

Page 33: Domain Specific Language Design

Programs and Fragments

f

Page 34: Domain Specific Language Design

Programs are graphs, really.

reference

Page 35: Domain Specific Language Design

Programs are graphs, really.

Page 36: Domain Specific Language Design

Languages are sets of concepts

C1

C2

C3

Cn

L

Page 37: Domain Specific Language Design

Languages are sets of concepts

C1

C2

C3

Cn

L

Page 38: Domain Specific Language Design

Programs and languages

C1

C2

C3

Cn

Page 39: Domain Specific Language Design

Language: concept inheritance

C1

C2

L2

L1

C1

C3

Page 40: Domain Specific Language Design

Independence

Languagedoes not depend on any other language

Fragmentdoes not depend on any other fragment

Page 41: Domain Specific Language Design

Independence

Refrigerators

Example

Page 42: Domain Specific Language Design

HomogeneousFragmenteverything expressed with one language

Page 43: Domain Specific Language Design

HeterogeneousC

Statemachines

Testing

Heterogeneous

Extended C

Example

Page 44: Domain Specific Language Design

Domain Hierarchy

Page 45: Domain Specific Language Design

Domain Hierarchy

all programs

embeddedsoftware

automotiveavionics

Extended C

Example

Page 46: Domain Specific Language Design

Design Dimensions

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 47: Domain Specific Language Design

Expressivity

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 48: Domain Specific Language Design

Shorter Programs

More Accessible Semantics

Page 49: Domain Specific Language Design

For a limitedDomain!

Domain Knowledge

encapsulated in language

Page 50: Domain Specific Language Design

Smaller Domain

More Specialized Language

Shorter Programs

Page 51: Domain Specific Language Design

Ѱ

The do-what-I-want

language

Page 52: Domain Specific Language Design

Ѱ

Single Program vs. Class/Domain

No Variability!

Page 53: Domain Specific Language Design

Domain Hierarchy

more specialized domainsmore specialized languages

Page 54: Domain Specific Language Design

Reification

Dn

Dn+1

==

Page 55: Domain Specific Language Design

Reification

==Language Definition

Transformation/Generation

Page 56: Domain Specific Language Design

?

Page 57: Domain Specific Language Design

?Overspecification!Requires Semantic Analysis!

Page 58: Domain Specific Language Design

!Declarative!Directly represents Semantics.

Linguistic Abstraction

Page 59: Domain Specific Language Design

Def: DSLA DSL is a language at D that provides linguistic abstractions for common patterns and idioms of a language at D-1 when used within the domain D.

Page 60: Domain Specific Language Design

Def: DSL cont’dA good DSL does not require the use of patterns and idioms to express semantically interesting concepts in D.Processing tools do not have to do “semantic recovery” on D programs.

Declarative!

Page 61: Domain Specific Language Design

Another Example

Extended C

Example

Page 62: Domain Specific Language Design

Another Example

Turing Complete!Requires Semantic Analysis!

Extended C

Example

Page 63: Domain Specific Language Design

Linguistic Abstraction

Extended C

Example

Page 64: Domain Specific Language Design

Linguistic Abstraction

Extended C

Example

Page 65: Domain Specific Language Design

Linguistic Abstraction

In-LanguageAbstractionLibrariesClassesFrameworks

Page 66: Domain Specific Language Design

Linguistic Abstraction

In-LanguageAbstractionUser-DefinableSimpler Language

AnalyzableBetter IDE Support

Page 67: Domain Specific Language Design

Linguistic Abstraction

In-LanguageAbstractionUser-DefinableSimpler Language

AnalyzableBetter IDE Support

Special Treatment!

Page 68: Domain Specific Language Design

Linguistic Abstraction

In-LanguageAbstraction

Std Lib

Page 69: Domain Specific Language Design

Std Lib

Refrigerators

Example

Page 70: Domain Specific Language Design
Page 71: Domain Specific Language Design

Coverage

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 72: Domain Specific Language Design

Domain DL defined inductively by L

CL(L) == 1 (by definition)

not very interesting!

(the domain that can be expressed by L)

Page 73: Domain Specific Language Design

Def: Coverage

to what extend can a language L cover a domain D

Page 74: Domain Specific Language Design

Def: Coverage

why would CD(L) be != 1?

1) L is deficient

2) L is intended to cover only a subset of D,

corner cases may make Ltoo complex

Rest must be expressed in D-1

Page 75: Domain Specific Language Design

Def: Coverage

Coverage is full.You call always write C.

Extended C

Example

Page 76: Domain Specific Language Design

Def: Coverage

Only a particular style of web apps are suported.

Many more are conceivable.

WebDSL

Example

Page 77: Domain Specific Language Design

Def: Coverage

DSLs are continuously evolved so the relevant parts of the deductive domain aresupported.

PensionPlans

Example

Refrigerators

Example

Components

Example

Page 78: Domain Specific Language Design

Semantics &Execution

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 79: Domain Specific Language Design

Static Semantics

Execution Semantics

Page 80: Domain Specific Language Design

Static Semantics

Execution Semantics

Page 81: Domain Specific Language Design

Static Semantics

ConstraintsType Systems

Page 82: Domain Specific Language Design

Unique State Names

Unreachable States

Dead End States

Extended C

Example

Page 83: Domain Specific Language Design

Unique State Names

Unreachable States

Dead End States

Easier to do on a declarative Level!

Extended C

Example

Page 84: Domain Specific Language Design

Unique State Names

Unreachable States

Dead End States

Easier to do on a declarative Level!

Thinking of all constraints is a coverage problem! Exten

ded C

Example

Page 85: Domain Specific Language Design

Assign fixed types

Derive TypesCalculate Common Types

Check Type Consistency

What does a type system do?

Page 86: Domain Specific Language Design

Intent +Check

Derive

More code

Better error messages

Better Performance

More convenient

More complex checkers

Harder to understand for users

Page 87: Domain Specific Language Design

Refrigerators

Example

Page 88: Domain Specific Language Design

Execution Semantics

What does it all mean?

Page 89: Domain Specific Language Design

Def: Semantics… via mapping to lower level

OB: Observable Behaviour (Test Cases)

Page 90: Domain Specific Language Design

Def: Semantics… via mapping to lower level

LD

LD-1

TransformationInterpretation

Page 91: Domain Specific Language Design

Dn

Dn+1

Transformation

Page 92: Domain Specific Language Design

Transformation

Extended C

Example

Page 93: Domain Specific Language Design

LD

LD-1

Transformation

Known Semantics!

Transformation

Page 94: Domain Specific Language Design

LD

LD-1

TransformationCorrect!?

Transformation

Page 95: Domain Specific Language Design

Transformation

LD

LD-1

Transformation

Tests (D)

Tests (D-1)

Run tests on both levels; all pass.Coverage Problem!

Page 96: Domain Specific Language Design

Refrigerators

Example

Page 97: Domain Specific Language Design

Transformation

PensionPlans

Example

Page 98: Domain Specific Language Design

Behavior

Refrigerators

Example

Page 99: Domain Specific Language Design

Multi-Stage

L3

L2

L1

L0

Modularization

Page 100: Domain Specific Language Design

Multi-Stage: Reuse

L3

L2

L1

L0

Reusing Later Stages

Optimizations!

L5

Page 101: Domain Specific Language Design

Multi-Stage: Reuse

L3

L2

L1

L0

L5

Extended C

Example

C Text

C (MPS tree)

State Machine

Components

Robot Control

Page 102: Domain Specific Language Design

Multi-Stage: Reuse

L3

L2

L1

L0

L5

Extended C

Example

C Text

C (MPS tree)

State Machine

Components

Robot Control

SyntacticCorrectness, Headers

C Type System

ConsistencyModel Checking

Efficient Mappings

Page 103: Domain Specific Language Design

Multi-Stage: Reuse

L3

L2

L1

L0

L1b

L0b

Reusing Early Stages

Portability

Page 104: Domain Specific Language Design

Multi-Stage: Reuse

L3

L2

L1

L0

L1b

L0b Extended C

Example

JavaC#

Page 105: Domain Specific Language Design

Multi-Stage: Preprocess

Adding an optional, modular

emergencystop feature

Page 106: Domain Specific Language Design

Platform

Page 107: Domain Specific Language Design

Platform

PensionPlans

Example

Temporal DataVersioning

Database AccessTransactionsDistribution(JEE)

Page 108: Domain Specific Language Design

Platform

Refrigerators

Example

Data Collection

DeviceDrivers

HAL

Page 109: Domain Specific Language Design

A program at D0 thatacts on the structureof an input program at D>0

Interpretation

Page 110: Domain Specific Language Design

A program at D0 thatacts on the structureof an input program at D>0

imperative step throughfunctional eval recursivelydeclarative ? solver ?

Interpretation

Page 111: Domain Specific Language Design

PensionPlans

Example

Page 112: Domain Specific Language Design

Refrigerators

Example

Page 113: Domain Specific Language Design

Behavior

Refrigerators

Example

Page 114: Domain Specific Language Design

A program at D0 thatacts on the structureof an input program at D>0

Interpretation

Page 115: Domain Specific Language Design

An interpreter :-)

Interpretation

Page 116: Domain Specific Language Design

Transformation Interpretation

+ Code Inspection

+ Debugging

+ Performance & Optimization

+ Platform Con- formance

+ Turnaround Time

+ Runtime Change

Page 117: Domain Specific Language Design

Def: Semantics… via mapping to lower level

LD

LD-1

TransformationInterpretation

Page 118: Domain Specific Language Design

Multiple Mappings… at the same time

LD

Lx Ly Lz

Similar Semantics?

Page 119: Domain Specific Language Design

Multiple Mappings… at the same time

LD

Lx Ly Lz

Similar Semantics?

T

T T Tall green!

Page 120: Domain Specific Language Design

PensionPlans

Example

Page 121: Domain Specific Language Design

Refrigerators

Example

Page 122: Domain Specific Language Design

Multiple Mappings… alternatively, selectably

LD

Lx Ly Lz

Extend LD to include explicit data that determines transformation

Page 123: Domain Specific Language Design

Multiple Mappings… alternatively, selectably

LD

Lx Ly Lz

Extend LD to include explicit data that determines transformation

Extended C

Example

Restricted Port leads to reduced overhead C

Page 124: Domain Specific Language Design

LD

Lx Ly Lz

External Data: - Switches- Annotation Model

Multiple Mappings… alternatively, selectably

Page 125: Domain Specific Language Design

LD

Lx Ly Lz

External Data: - Switches- Annotation Model

Multiple Mappings… alternatively, selectably

PensionPlans

Example

Switch Control Java vs. C

Page 126: Domain Specific Language Design

LD

Lx Ly Lz

Heuristics: Analyze model to try to decide

Multiple Mappings… alternatively, selectably

Page 127: Domain Specific Language Design

LD

Lx Ly Lz

TESTING!

T T T

T

Multiple Mappings… alternatively, selectably

Page 128: Domain Specific Language Design

Reduced Expressiveness

bad? maybe.

good? maybe!

Model CheckingSAT Solving

Exhaustive Search, Proof!

Page 129: Domain Specific Language Design

Unique State Names

Unreachable States

Dead End States

Guard Decidability

Exhaustive Search, Proof!

Reachability

Page 130: Domain Specific Language Design

Extended C

Example

Page 131: Domain Specific Language Design

Extended C

Example

Page 132: Domain Specific Language Design

Separation of

Concernsexpressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 133: Domain Specific Language Design

Several Concerns… in one domain

Page 134: Domain Specific Language Design

Several Concerns… in one domain

integrated intoone fragment

separated intoseveral fragments

Page 135: Domain Specific Language Design

Viewpoints

independent

dependent

Page 136: Domain Specific Language Design

Viewpoints

Refrigerators

Example

Hardware

Behavior

Tests

Page 137: Domain Specific Language Design

Viewpoints: Why?

Sufficiency

Different Stakeholders

Different Steps in Process – VCS unit!

Page 138: Domain Specific Language Design

Viewpoints

Refrigerators

Example

Hardware

Behaviour

Tests

Product Management

Thermo-dynamics-Experts

Page 139: Domain Specific Language Design

Viewpoints

sufficient?

contains allthe data for running a meaningfultransformation

independent

Page 140: Domain Specific Language Design

Viewpoints

sufficientHardware structuredocumentation

Refrigerators

Example

sufficientimplementationcode

Page 141: Domain Specific Language Design

Viewpoints: Why?

1:n Relationships

Page 142: Domain Specific Language Design

Viewpoints

Refrigerators

Example

Hardware

Behaviour

Tests

1:n

n:1

Page 143: Domain Specific Language Design

Viewpoints

Well-defined Dependencies

No Cycles!

Avoid Synchronization!(unless you use a projectional editor)

Page 144: Domain Specific Language Design

Viewpoints: Why?

LD

LD-1

LAnnotation

Page 145: Domain Specific Language Design

Progressive Refinement

Page 146: Domain Specific Language Design

Views on Programs

Pension Plans

Example

Page 147: Domain Specific Language Design

Completeness

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 148: Domain Specific Language Design

Can you generate 100% of the code from the DSL program?

More generally: all of D-1

Page 149: Domain Specific Language Design

Semantics:

Introduce G (“generator”):complete

incomplete

Page 150: Domain Specific Language Design

Incomplete: What to do?

FD

FD-1OB(FD) !=

Page 151: Domain Specific Language Design

Incomplete: What to do?

FD

FD-1

+ FD-1,

man

OB(FD) ==

Manually written code!

Page 152: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Page 153: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Refrigerators

Example

Embed C statementsin components, state machinesor decision tables

Page 154: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Use composition mechanisms of LD-1 (inheritance, patterns, aspects, …)

Page 155: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Use composition mechanisms of LD-1 (inheritance, patterns, aspects, …)

Components

ExampleGenerate base classeswith abstract methods;implement in subclass

Page 156: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Use composition mechanisms of LD-1 (inheritance, patterns, aspects, …)

Use protected regions (if you really have to…)

Page 157: Domain Specific Language Design

Manually written code?

Call “black box” code (foreign functions)

Embed LD-1 code in LD program

Use composition mechanisms of LD-1 (inheritance, patterns, aspects, …)

Use protected regions (if you really have to…) DON’T!

Page 158: Domain Specific Language Design

Incomplete: When?Good for technical DSLs: Devs write LD-1 code

Bad for business DSLs. Maybe use a LD-1 std lib that LD code can call into?

Components

Example

Refrigerators

Example

PensionPlans

Example

Extended C

Example

WebDSL

Example

Page 159: Domain Specific Language Design

Prevent Breaking Promises!

class B extens BBase {

public void doSomething() { Registry.get(„A“).someMethod(); }

}

Page 160: Domain Specific Language Design

Prevent Breaking Promises!

Dependency InjectionStatic analysis tools

Better:

Components

Example

Page 161: Domain Specific Language Design

Roundtripping

LD

LD-1

L’D-

1

L’D

………

Page 162: Domain Specific Language Design

Roundtripping – Don’t!

LD

LD-1

L’D-

1

L’D

………

Semantic Recovery!

Page 163: Domain Specific Language Design

FundamentalParadigms

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 164: Domain Specific Language Design

Structure

Modularization, VisibilityNamespaces,public/privateimporting

Page 165: Domain Specific Language Design

Structure

Modularization, Visibility

divide & conquerreusestakeholder integration

Namespaces,public/privateimporting

Page 166: Domain Specific Language Design

Structure

Partitioning (Files)

VCS UnitUnit of sharingUnit of IP

!= logical modulesmay influence language design

Page 167: Domain Specific Language Design

Structure

Modularization, Visibility

Extended C

Example

Page 168: Domain Specific Language Design

Components

Example

Structure

Modularization, Visibility

Page 169: Domain Specific Language Design

Structure

Partitioning (Files)

change impactlink storagemodel organizationtool integration

Page 170: Domain Specific Language Design

Structure

Spec vs. Implementationplug in different Implsdifferent stakeholders

Page 171: Domain Specific Language Design

Structure

Spec vs. Impl.

Extended C

Example

Page 172: Domain Specific Language Design

Structure

SpecializationLiskov substitution Pleaving holes (“abstract”)

Page 173: Domain Specific Language Design

Structure

SpecializationLiskov substitution Pleaving holes (“abstract”)

variants (in space)evolution (over time)

Page 174: Domain Specific Language Design

Structure

Specialization

Pension Plans can inheritfrom other plans.

Rules can be abstract;

Plans with abstract rules are abstact

PensionPlans

Example

Page 175: Domain Specific Language Design

Structure

Superposition, Aspects

modularize cross-cuts

mergingoverlayAOP

Page 176: Domain Specific Language Design

Structure

Superposition, Aspects

Components

Example

Page 177: Domain Specific Language Design

Behavior

Not all DSLs specify behavior

Some just declare behavior

This section is not for those!

Page 178: Domain Specific Language Design

Behavior

Imperativesequence of statementschanges program state

write understand

debug

analyze performance

simple simple - simple (step)

hard good

Page 179: Domain Specific Language Design

Behavior

Imperativesequence of statementschanges program state

Refrigerators

Example

Page 180: Domain Specific Language Design

Behavior

Functionalfunctions call other functions.no state. No aliasing.

write understand

debug

analyze performance

simple - simple simple (tree)

good good -

Page 181: Domain Specific Language Design

Behavior

Functionalfunctions call other functions.no state. No aliasing.

PensionPlans

Example

Page 182: Domain Specific Language Design

Behavior

Functional

PensionPlans

Example

Page 183: Domain Specific Language Design

Behavior

Functionalpure expressions are a subset of functional(operators hard-wired)

guardspreconditionsderived attributes

Page 184: Domain Specific Language Design

Behavior

Declarativeonly facts and goals. no control flow.eval engine, solver (several)

write understand

debug

analyze performance

simple simple - hard depends often bad

Page 185: Domain Specific Language Design

Behavior

Declarativeconcurrencyconstraint programmingsolvinglogic programming

Page 186: Domain Specific Language Design

Behavior

Declarativeonly facts and goals. no control flow.eval engine, solver (several)

WebDSL

Example

Page 187: Domain Specific Language Design

Behavior

Declarative

Extended C

Example

Page 188: Domain Specific Language Design

Behavior

Reactivereactions to events, more events are produced. Communication viaevents and channels/queues

write understand debug

analyze performance

simple simple/hard hard simple can be good

Page 189: Domain Specific Language Design

Behavior Reactive

Refrigerators

Example

Page 190: Domain Specific Language Design

Behavior

Data Flow

chained blocks consume continuous data that flows from block to block

write understand debug

analyze performance

simple - simple/hard hard simple can be good

Page 191: Domain Specific Language Design

Behavior

Data Flow

continuous, calc on changequantized, calc on new datatime triggered, calc every x

Page 192: Domain Specific Language Design

Behavior

Data Flow

Embedded ProgrammingEnterprise ETL & CEP

Page 193: Domain Specific Language Design

Behavior

State Based

states, transitions, guards, reactions

write understand debug

analyze performance

simple - simple/hard s/h simple +

can be good

event driven, timed

Page 194: Domain Specific Language Design

Behavior

State Based

Refrigerators

Example

Page 195: Domain Specific Language Design

Behavior

Combinationsdata flow uses functional, imperative or declarative lang inside block

Page 196: Domain Specific Language Design

Behavior

Combinationsstate machines use expressions in guards and often an imperative lang in actions

Page 197: Domain Specific Language Design

Behavior

Refrigerators

Example

Combinations

Page 198: Domain Specific Language Design

Behavior

Page 199: Domain Specific Language Design

Behavior

Combinations

purely structural languages often use expressions to specify constraints

Extended C

Example

Page 200: Domain Specific Language Design

LanguageModularity

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 201: Domain Specific Language Design

BehaviorLanguage Modularity, Composition and Reuse (LMR&C)

increase efficiency of DSL development

Page 202: Domain Specific Language Design

BehaviorLanguage Modularity, Composition and Reuse (LMR&C)

increase efficiency of DSL development

ReferencingReuseExtensionReuse

4 ways of composition:

Page 203: Domain Specific Language Design

BehaviorLanguage Modularity, Composition and Reuse (LMR&C)

increase efficiency of DSL development

distinguished regardingdependencies and fragmentstructure

4 ways of composition:

Page 204: Domain Specific Language Design

BehaviorDependencies:

do we have to know about the reuse when designing the languages?

Page 205: Domain Specific Language Design

BehaviorDependencies:

do we have to know about the reuse when designing the languages?

homogeneous vs. heterogeneous(„mixing languages“)

Fragment Structure:

Page 206: Domain Specific Language Design

BehaviorDependencies &Fragment Structure:

Page 207: Domain Specific Language Design

BehaviorDependencies &Fragment Structure:

Page 208: Domain Specific Language Design

ReferencingReferencing

Page 209: Domain Specific Language Design

Referencing

Dependent

No containment

Referencing

Page 210: Domain Specific Language Design

Used in Viewpoints

Referencing

Page 211: Domain Specific Language Design

Fragment

Fragment

Fragment

Referencing

references

refe

rence

s

references

Page 212: Domain Specific Language Design

Refrigerators

Example

Referencing

Page 213: Domain Specific Language Design

Containment

Dependent

Extension

Page 214: Domain Specific Language Design

more specialized domainsmore specialized languages

ExtensionExtension

Page 215: Domain Specific Language Design

Dn

Dn+1

==

Extension

Page 216: Domain Specific Language Design

Dn

Dn+1

==

Extension

Page 217: Domain Specific Language Design

Dn

==

Good for bottom-up (inductive) domains, and for use by technical DSLs (people)

Extension

Page 218: Domain Specific Language Design

BehaviorDrawbacks

tightly bound to basepotentially hard to analyze the combined program

Extension

Page 219: Domain Specific Language Design

Extended C

Example

Extension

Page 220: Domain Specific Language Design

ExtensionExtension

Extended C

Example

Page 221: Domain Specific Language Design

Reuse

No containment

Independent

Reuse

Page 222: Domain Specific Language Design

Reuse

BehaviorOften the referenced language is built expecting it will be reused.

Hooks may be added.

Reuse

Page 223: Domain Specific Language Design

Containment

Independent

Embedding

Page 224: Domain Specific Language Design

Pension Plans

Example

Embedding

Page 225: Domain Specific Language Design

BehaviorEmbedding often uses Extension to extend the embedded language to adapt it to its new context.

Embedding

Page 226: Domain Specific Language Design

BehaviorExtension and Embedding requires modular concrete syntax

Challenges - Syntax

Many tools/formalisms cannot do that

Page 227: Domain Specific Language Design

BehaviorExtension: the type system of the base language must be designed to be extensible/ overridable

Challenges – Type Systems

Page 228: Domain Specific Language Design

BehaviorReuse and Embedding: Rules that affect the interplay can reside in the adapter language.

Challenges – Type Systems

Page 229: Domain Specific Language Design

Behavior

Referencing (I)

Challenges – Trafo & Gen

Two separate, dependent single-source transformations

Can be Reused

Written specifically for the combination

Page 230: Domain Specific Language Design

Referencing (II)

Challenges – Trafo & Gen

A single multi-sourcedtransformation

Page 231: Domain Specific Language Design

Referencing (III)

Challenges – Trafo & Gen

A preprocessing trafo that changes the referenced frag in a way specified by the

referencing frag

Page 232: Domain Specific Language Design

Extension

Challenges – Trafo & Gen

Transformation by assimiliation, i.e.generating code in the host lang

from code expr in the extension lang.

Page 233: Domain Specific Language Design

Extended C

Example

Extension

Challenges – Trafo & Gen

Page 234: Domain Specific Language Design

Reuse (I)

Challenges – Trafo & Gen

Reuse of existingtransformations for both fragments plus

generation of adapter code

Page 235: Domain Specific Language Design

Reuse (II)

Challenges – Trafo & Gen

composing transformations

Page 236: Domain Specific Language Design

Reuse (III)

Challenges – Trafo & Gen

generating separate artifacts plus a weaving specification

Page 237: Domain Specific Language Design

Embedding (I)

Challenges – Trafo & Gen

Assimilation (as with Extension)

a purely embeddable language may not come with a generator.

Page 238: Domain Specific Language Design

Embedding (II)

Challenges – Trafo & Gen

Adapter language can coordinate the transformations for the host and for the

emebedded languages.

Page 239: Domain Specific Language Design

ConcreteSyntax

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 240: Domain Specific Language Design

UI for the language!Important for acceptance by users!

TextualSymbolicTabularGraphical

Page 241: Domain Specific Language Design

Reuse existing syntax of domain, if any!

Tools let you freely combine all kinds.

Page 242: Domain Specific Language Design

Default: Text

Editors simple to buildProductiveEasy to integrate w/ toolsEasy to evolve programs

Page 243: Domain Specific Language Design

Default: Text

Editors simple to buildProductiveEasy to integrate w/ toolsEasy to evolve programs

… then add other forms, if really necessary

Page 244: Domain Specific Language Design

Graphical in case…

Relationships

Page 245: Domain Specific Language Design

Graphical in case…

Flow and Depenency

Page 246: Domain Specific Language Design

Graphical in case…

Causality and Timing

Page 247: Domain Specific Language Design

Symbolic

Either Mathematical, or often highly

inspired by domain

Page 248: Domain Specific Language Design

Tables

Page 249: Domain Specific Language Design

Combinations

Page 250: Domain Specific Language Design

Combinations

Page 251: Domain Specific Language Design

Combinations

Page 252: Domain Specific Language Design

Combinations

Page 253: Domain Specific Language Design

Process

expressivitycoveragesemanticsseparation of concerns

completenessparadigmsmodularityconcrete syntax

process

Page 254: Domain Specific Language Design

Domain Analysis

Interview Experts

Structure their

Knowledge

Build the Language

Create Examples

Get Feedback

Page 255: Domain Specific Language Design

Iterate to goal

Page 256: Domain Specific Language Design

Documentation

Create example-based tutorials!

Page 257: Domain Specific Language Design

Domain Folks Programming?

Precision vs.Algorithmics!

Page 258: Domain Specific Language Design

Domain Folks Programming?

DU Codin

g

DU/DevPaired

Dev CodingDU Reviewing

Page 259: Domain Specific Language Design

DSL as a Product

Release PlanBug TrackerTesting!SupportDocumentation

Page 260: Domain Specific Language Design

Reviews

Reviews become easier --- less code, more domain-specific

Page 261: Domain Specific Language Design

The End.This material is part of my

upcoming (early 2013) book

www.voelter.de/dslbook

DSL Engineering with Language Workbenches

Stay in touch; it will be cheap or maybe even free :-)

@markusvoelter+Markus Voelter