The ¡State ¡of ¡the ¡Art ¡ in ¡External ¡DSLs ¡ WGT ¡2011 ¡ Markus ¡Voelter ¡ Independent/itemis ¡ voelter@acm.org ¡
¡A ¡li%le ¡History ¡ ¡DSLs ¡ ¡Example: ¡Fountains ¡ ¡Programming ¡vs. ¡Modeling ¡ ¡ProjecAonal ¡EdiAng ¡ ¡Example: ¡Embedded ¡Development ¡
¡ A ¡liGle ¡History ¡
programming ¡ started ¡ close ¡to ¡the ¡hardware ¡ abstracLons ¡ ∼ ¡ ¡ ¡ ¡compuLng ¡ ¡ ¡ ¡chips ¡
abstracLons ¡ ∼ ¡ ¡ ¡ ¡compuLng ¡ ¡ ¡ ¡bits ¡
abstracLons ¡ ∼ ¡ ¡ ¡ ¡compuLng ¡ ¡ ¡ ¡C ¡
abstracLons ¡ ∼ ¡ ¡ ¡ ¡compuLng? ¡ ¡ ¡ ¡Java ¡
abstracLons ¡ ∼ ¡ ¡ ¡ ¡compuLng? ¡ ¡ ¡ ¡SQL ¡
general ¡purpose ¡
domain ¡specific ¡
tailor ¡made ¡ effecLve++ ¡ specialized, ¡limited ¡ used ¡by ¡experts ¡ together ¡with ¡other ¡ ¡ ¡ ¡ ¡specialized ¡tools ¡
¡ Domain ¡Specific ¡Languages ¡
DSL ¡ A ¡DSL ¡is ¡a ¡ focussed , ¡ processable ¡ language ¡for ¡describing ¡a ¡specific ¡ concern ¡when ¡building ¡a ¡system ¡in ¡a ¡ specific ¡ domain . ¡The ¡ abstracLons ¡and ¡ notaLons ¡used ¡are ¡natural/suitable ¡ for ¡ the ¡ stakeholders ¡who ¡specify ¡that ¡ parAcular ¡concern. ¡
map ¡
DSL ¡Program ¡ (aka ¡Model) ¡ map ¡ automated! ¡ GPL ¡Program ¡
map ¡ GeneraLon ¡ TransformaLon ¡ CompilaLon ¡ InterpretaLon ¡
AcLviLes ¡ Analysing ¡Domains ¡ ¡ ¡ ¡Defining ¡Languages ¡ AdapLng/SelecLng ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Editors ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Transforming ¡Models ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Generators ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Frameworks ¡
AcLviLes ¡ Analysing ¡Domains ¡ ¡ ¡ ¡Defining ¡Languages ¡ AdapLng/SelecLng ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Editors ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Transforming ¡Models ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Generators ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Building ¡Frameworks ¡ … ¡and ¡using ¡all ¡of ¡that ¡to ¡build ¡apps ¡ ¡
¡ Example ¡1: ¡ Fountain ¡Control ¡
¡CONTEXT ¡
Hardware ¡Structure ¡ ¡SOLUTION ¡
Behaviour ¡ ¡SOLUTION ¡
Plus: ¡ In-‑IDE ¡Simulator ¡ Unit ¡Test ¡Support ¡ ¡SOLUTION ¡
Eclipse ¡Modeling ¡ Eclipse ¡Xtext ¡ TOOLS ¡
¡ Programming ¡ vs. ¡ Modeling ¡
Different ¡Worlds ¡ Programming ¡Tools ¡ != ¡ Modeling ¡Tools ¡ ¡
Different ¡Worlds ¡ Modeling ¡Tool ¡ != ¡ Modeling ¡Tool ¡
Different ¡Worlds ¡ Mix ¡Models ¡and ¡Programs ¡
Different ¡Worlds ¡ Mix ¡Models ¡and ¡Programs ¡ AST ¡NavigaLon ¡& ¡Query ¡
Different ¡Worlds ¡ Mix ¡Models ¡and ¡Programs ¡ AST ¡NavigaLon ¡& ¡Query ¡ Code ¡Constraints ¡
Why ¡ the ¡difference? ¡
History? ¡
Modeling ¡ Programming ¡ … ¡(Mostly) ¡Textual ¡ ¡ ¡ ¡ ¡ ¡NotaLons ¡ ¡ … ¡Concrete ¡Syntax ¡ ¡ ¡ ¡ ¡ ¡Storage ¡ ¡ … ¡(Fancy) ¡ASCII ¡Editors ¡ ¡ … ¡Read-‑Only ¡ ¡ ¡ ¡ ¡ ¡VisualizaLons ¡ ¡
Modeling ¡ Programming ¡ … ¡(Mostly) ¡Graphical ¡ … ¡(Mostly) ¡Textual ¡ ¡ ¡ ¡ ¡ ¡NotaLons ¡ ¡ ¡ ¡ ¡NotaLons ¡ ¡ ¡ … ¡Abstract ¡Syntax ¡ ¡ … ¡Concrete ¡Syntax ¡ ¡ ¡ ¡ ¡ ¡Storage ¡ ¡ ¡ ¡ ¡Storage ¡ ¡ ¡ … ¡ProjecLng ¡Editors ¡ … ¡(Fancy) ¡ASCII ¡Editors ¡ ¡ ¡ … ¡Different ¡editable ¡ … ¡Read-‑Only ¡ ¡ ¡ ¡ ¡ ¡views ¡for ¡model ¡ ¡ ¡ ¡ ¡VisualizaLons ¡ ¡ ¡
Why ¡ the ¡difference? ¡
It ¡is ¡Lme ¡for ¡… ¡
… ¡a ¡Different ¡PerspecLve ¡
Programming ¡ the ¡way ¡we ¡do ¡ Modeling? ¡ Modeling ¡ the ¡way ¡we ¡do ¡ Programming? ¡
== ¡ Modeling ¡ Programming ¡ == ¡ Programming ¡ Modeling ¡
We ¡don‘t ¡want ¡to ¡ model, ¡ we ¡want ¡to ¡ program! ¡
We ¡don‘t ¡want ¡to ¡ model, ¡ we ¡want ¡to ¡ program! ¡ … ¡at ¡different ¡levels ¡of ¡abstacLon ¡ … ¡from ¡different ¡viewpoints ¡ … ¡integrated! ¡
We ¡don‘t ¡want ¡to ¡ model, ¡ we ¡want ¡to ¡ program! ¡ … ¡with ¡different ¡degrees ¡of ¡ ¡ domain-‑specificity ¡ … ¡with ¡suitable ¡notaLons ¡ … ¡with ¡suitable ¡expressiveness ¡
We ¡don‘t ¡want ¡to ¡ model, ¡ we ¡want ¡to ¡ program! ¡ And ¡always: ¡ precise ¡and ¡tool ¡processable ¡
Programming ¡ ¡ Languages ¡ are ¡not ¡ MODULAR ¡ enough. ¡
Programming ¡ ¡ Languages ¡ are ¡not ¡ COMPOSABLE ¡ enough. ¡
Programming ¡ ¡ Languages ¡ are ¡not ¡ CONFIGURABLE ¡ enough. ¡
Programming ¡ ¡ Languages ¡ are ¡not ¡ ADAPTABLE ¡ enough. ¡
Programming ¡ ¡ Language ¡Syntax ¡ is ¡not ¡ FLEXIBLE ¡ enough. ¡
Big ¡Language? ¡ a ¡ o ¡ b ¡ n ¡ c ¡ m ¡ d ¡ L ¡ k ¡ e ¡ j ¡ f ¡ i ¡ g ¡ h ¡ with ¡many ¡first ¡class ¡concepts! ¡
Small ¡Language? ¡ α ¡ β ¡ δ ¡ L ¡ ω ¡ λ ¡ with ¡a ¡few, ¡orthogonal ¡ and ¡poweful ¡concepts ¡
Modular ¡Language ¡ α ¡ a ¡ b ¡ c ¡ d ¡ e ¡ f ¡ my ¡L ¡ g ¡ h ¡ i ¡ j ¡ k ¡ l ¡ β ¡ with ¡many ¡opLonal, ¡ composable ¡ ¡concepts ¡
Modular ¡Language ¡ Like ¡frameworks ¡ ¡ and ¡libraries, ¡ ¡ but ¡with ¡syntax ¡ and ¡IDE ¡support ¡
¡ ProjecLonal ¡ EdiLng ¡
Parser-‑based ¡ text ¡ … ¡to ¡tree ¡ … ¡to ¡text ¡
ProjecLonal ¡ tree ¡ … ¡to ¡text-‑lookalike ¡(editor) ¡ … ¡to ¡other ¡trees ¡… ¡[*] ¡ … ¡to ¡text ¡ ¡
Programming ¡as ¡Modeling ¡ … ¡(Mostly) ¡Graphical ¡ ¡ ¡ ¡ ¡NotaLons ¡ ¡ … ¡Abstract ¡Syntax ¡ ¡ ¡ ¡ ¡ ¡Storage ¡ ¡ … ¡ProjecLng ¡Editors ¡ ¡ … ¡Different ¡editable ¡ ¡ ¡ ¡ ¡views ¡for ¡model ¡ ¡
Programming ¡as ¡Modeling ¡ … ¡(Mostly) ¡Graphical ¡Any ¡kind ¡of ¡ ¡ ¡ ¡ ¡NotaLons ¡ ¡ … ¡Abstract ¡Syntax ¡ ¡ ¡ ¡ ¡ ¡Storage ¡ ¡ … ¡ProjecLng ¡Editors ¡ ¡ … ¡Different ¡editable ¡ ¡ ¡ ¡ ¡views ¡for ¡model ¡ ¡
Language ¡ ComposiLon ¡ There‘s ¡no ¡parsing. ¡ Unique ¡Language ¡Element ¡IdenLty. ¡ Unlimted ¡language ¡composiLon. ¡
Flexible ¡ like ¡ASCII ¡ } ¡ NotaLons ¡ Textual ¡ treated ¡the ¡same ¡ Graphical ¡ can ¡be ¡mixed ¡ box ¡& ¡line ¡ Semi-‑Graphical ¡ mathemaLcal ¡
AutomaLc ¡ IDE ¡Extension ¡ tool ¡support ¡is ¡inherent ¡ for ¡languages ¡build ¡with ¡ projecLonal ¡tools ¡ language ¡definiLon ¡ implies ¡ IDE ¡definiLon ¡
MulLple ¡ NotaLons ¡ … ¡for ¡the ¡same ¡concepts ¡ e.g. ¡in ¡different ¡contexts ¡ or ¡for ¡different ¡tasks ¡
ParLal ¡ ProjecLons ¡ … ¡different ¡views ¡ … ¡for ¡different ¡roles/people ¡ … ¡only ¡a ¡parLcular ¡variant ¡
Live ¡ Programs ¡ think: ¡spreadsheet ¡ a ¡change ¡to ¡one ¡part ¡of ¡program ¡ can ¡lead ¡to ¡(dependent) ¡changes ¡ in ¡other ¡parts ¡
Tree ¡EdiLng ¡ … ¡is ¡different ¡from ¡ediLng ¡text ¡ … ¡try ¡to ¡make ¡it ¡feel ¡like ¡text ¡ … ¡takes ¡some ¡gelng ¡used ¡to ¡ but: ¡for ¡more ¡flexible ¡notaLons ¡ ¡ a ¡more ¡general ¡ediLng ¡paradigm ¡ ¡ is ¡needed ¡
Infrastructure ¡ IntegraLon ¡ … ¡storage ¡is ¡not ¡text ¡ … ¡diff/merge ¡must ¡be ¡in ¡tool ¡ … ¡exisLng ¡text ¡tools ¡don‘t ¡work ¡
Recommend
More recommend