building dsls with language workbenches -...

59
ThoughtWorks ThoughtWorks NEAL FORD software architect / meme wrangler ThoughtWorks [email protected] 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com memeagora.blogspot.com building DSLs with language workbenches

Upload: lamminh

Post on 30-Jan-2018

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

ThoughtWorksThoughtWorks

NEAL FORD software architect / meme wrangler

ThoughtWorks

[email protected] 3003 Summit Boulevard, Atlanta, GA 30319

www.nealford.com

www.thoughtworks.com

memeagora.blogspot.com

building DSLs with language workbenches

Page 2: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

ThoughtWorks

Page 3: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

generation templates

language workbenches

building grammars or pseudo-grammars

using workbench DSLs

generation

overview

Page 4: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

Xtext (openArchitectureWare)

a tool that supports language oriented programming

Intentional Software (Charles Simonyi)

MPS (JetBrains)

language workbenches

Page 5: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

class Foo { private int id;. . .. . .

}

Editable Representation

Storage RepresentationExecutable

Representation

Parse

Compile

compilation since cs-101

Page 6: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 7: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

first java ide to edit the abstract syntax directly

enables refactoring

“post- ide’s”

Page 8: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

workbenchesclass Foo { private int id;. . .. . .

}

Executable

Representation

Workbench

Versioning Storage

Editable Representation

Storage Representation

TabTabTab

Document Window

Label Menu

Text Field

Text Field

Text Field

Text Field

Text Field

Text Field

Label Label•

Label Text Field

Projections

Page 9: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

grammars

Page 10: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

Ms. Grant’s secret panel

Page 11: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

the DSLevents doorClosed D1CL drawOpened D2OPend

commands unlockPanel PNUL lockPanel PNLKend

Page 12: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

the grammarlist : eventList commandList;eventList : 'events' eventDec* 'end';eventDec : identifier identifier;commandList : 'commands' commandDec* 'end';commandDec : identifier identifier;

events doorClosed D1CL drawOpened D2OPend

commands unlockPanel PNUL lockPanel PNLKend

Page 13: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

you provide a grammar in their format

framework/tool for development of external textual DSLs

based on openArchitectureWare

Xtext produces: ANTLR grammar, parser, abstract syntax tree meta-model, and Eclipse editor

Page 14: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

Xtext project

Page 15: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

Xtext artifacts

DSL source

generated source

meta-data for editor plug-ineditor plug-in

generators

Page 16: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 17: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

ANTLR grammar

Page 18: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

ANTLR grammar

. . .

Page 19: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

code generation

Page 20: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

templates

Page 21: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

template file

Page 22: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

template

Page 23: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

main()

Page 24: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

templates

Page 25: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

eclipse editor

Page 26: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

heavily Eclipse based (editors, project structure, etc.)

most mature of the text-based DSL tools

still extricating itself from openArchitectureware & MDA background

nice editor projection (acts like source file)

efficient generation of DSL, grammar, code generation, & templates

Xtext

Page 27: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 28: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

...but the other guys do the same thing

competition is brutal!

incentives to encourage repeat customers...

easy to define & change

flexible business rules

bakery life

Page 29: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

establishing profiles

Page 30: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

discounts

Page 31: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

discount

Page 32: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

discount implementation

Page 33: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

getDiscount()

Page 34: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

used internally to build new products

internal project by JetBrains

based on lessons learned with IntelliJ

actively used now for 3+ years

created by Sergey Dmitriev & Konstantin Solomatov

Page 35: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 36: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

new MPS project

Page 37: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

also editors, code generators

fundamental building block

like a class: data, behavior, encapsulation

properties, events, methods, and links

implemented in base language

concepts

Page 38: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

concept declaration

Page 39: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

concept editor

Page 40: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

concept editor

Page 41: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

smart help

Page 42: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

discount

Page 43: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

reduction rule mapping

Page 44: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

reduction template

Page 45: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

discount template

Page 46: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

using the editor

Page 47: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

code generation

Page 48: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 49: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

grammar?

encapsulated within

Page 50: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

refactoring

Page 51: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

find usages

Page 52: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

found usages

Page 53: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

MPS is written in

MPS

Page 54: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented
Page 55: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

composition

Page 56: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

composing DSLs

Page 57: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

comparisonsXtext MPS Intentional

grammar EBNF/antlr encapsulated ?

environment Eclipse MPS ?

code generation

via Eclipse via MPS or IntelliJ

internal

projections EMF & text text-like (for now)

rich

project ecosystem

Eclipse MPS ?

availability now!open source

soonopen source

?commercial

Page 58: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

ThoughtWorks

This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 License.

http://creativecommons.org/licenses/by-nc-sa/2.5/

questions?

please fill out the session evaluationsslides & samples available at nealford.com

NEAL FORD software architect / meme wrangler

ThoughtWorks

[email protected] 3003 Summit Boulevard, Atlanta, GA 30319

www.nealford.com

www.thoughtworks.com

memeagora.blogspot.com

Page 59: Building DSLs with Language Workbenches - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2008/slides/NealFord_BuildingDSL.pdf · Xtext (openArchitectureWare) a tool that supports language oriented

resources

ThoughtWorks

MPShttp://www.jetbrains.com/mps/

Intentional Softarehttp://www.intentsoft.com/

Xtexthttp://wiki.eclipse.org/Xtext

Martin Fowler’s DSL Work in Progresshttp://martinfowler.com/dslwip/