Pragmatic DSL Design with Xtext, Xbase and Xtend 2Presentation Transcript
Pragmatic DSL Design withSven Efftinge (itemis) / Sebastian Zarnekow (itemis) / Jan Köhnlein (itemis)
The plan for today :
The plan for today :1. Xtext 2.0 What is Xtext and what’s new in 2.0? Hands-On : Develop a DSL.
The plan for today :1. Xtext 2.0 What is Xtext and what’s new in 2.0? Hands-On : Develop a DSL.2. Xbase What’s that and why should I care? Hands-On : Play with it and integrate it in a DSL.
The plan for today :1. Xtext 2.0 What is Xtext and what’s new in 2.0? Hands-On : Develop a DSL.2. Xbase What’s that and why should I care? Hands-On : Play with it and integrate it in a DSL.3. Xtend Yet another language? Are you serious? Hands-On :Write a codegenerator with Xtend.
What is ?
Eclipse Project
IDE Framework
Language Framework
(Domain-Specific)Language Framework
UsersUsers
Eclipse IDE Framework (JFace Text, etc.)
Java Development Tools (JDT)Eclipse IDE Framework (JFace Text, etc.)
Java Development Tools (JDT)Eclipse IDE Framework (JFace Text, etc.)
Java Development Tools (JDT)Eclipse IDE Framework (JFace Text, etc.) Eclipse Modeling Framework (EMF)
Java Development Tools (JDT) Antlr Parser GeneratorEclipse IDE Framework (JFace Text, etc.) Eclipse Modeling Framework (EMF)
is Highly Adaptable
Advanced Language-Specific Editing Features by Default
Advanced Language-Specific Editing Features by Default Syntax Coloring
Advanced Language-Specific Editing Features by Default Syntax Coloring Wizards
Advanced Language-Specific Editing Features by DefaultContent Assist Syntax Coloring Wizards
Advanced Language-Specific Editing Features by DefaultContent Assist Syntax Coloring Code Folding Wizards
Advanced Language-Specific Editing Features by DefaultContent Assist Find References Syntax Coloring Code Folding Wizards
Advanced Language-Specific Editing Features by Default Global IndexingContent Assist Find References Syntax Coloring Code Folding Wizards
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Find References Syntax Coloring Code Folding Wizards
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Find References Syntax Coloring Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Find References Syntax Coloring Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Find References Syntax ColoringIncremental Builders Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Outline View Find References Syntax ColoringIncremental Builders Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Global IndexingContent Assist Outline View Find ReferencesIncremental Builders Validation Syntax Coloring Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Template Proposals Global IndexingContent Assist Outline View Find ReferencesIncremental Builders Validation Syntax Coloring Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Go To Declaration Template Proposals Global IndexingContent Assist Outline View Quick Fixes Find ReferencesIncremental Builders Validation Syntax Coloring Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Refactoring Go To Declaration Template Proposals Global IndexingContent Assist Outline View Quick Fixes Find ReferencesIncremental Builders Validation Syntax Coloring Auto Editing Code Folding Wizards Bracket Matching
Advanced Language-Specific Editing Features by Default Refactoring Go To Declaration Template Proposals Global IndexingContent Assist Outline View Quick Fixes Find ReferencesIncremental Builders Validation Syntax Coloring Rich Hovers Auto Editing Code Folding Wizards Bracket Matching
... but there is a problem with external DSLs
What aboutExpressions?
Expressions are complicated !
Protected Regions
Protected Regions• generated and manually written code mixed up
Protected Regions• generated and manually written code mixed up• manual deletion of artifacts
Protected Regions• generated and manually written code mixed up• manual deletion of artifacts• platform dependent information
Protected Regions• generated and manually written code mixed up• manual deletion of artifacts• platform dependent information• information is spreaded!
Generation Gap Pattern
Generation Gap Pattern technically required type hierarchies
Generation Gap Pattern technically required type hierarchies additional complexity
Generation Gap Pattern technically required type hierarchies additional complexity platform dependent information
Generation Gap Pattern technically required type hierarchies additional complexity platform dependent information information spreaded!
Black boxtarget language literals
Black boxtarget language literals• bound to target platform
Black boxtarget language literals• bound to target platform • no option for MDA friends
Black boxtarget language literals• bound to target platform • no option for MDA friends• no tooling!
Black boxtarget language literals• bound to target platform • no option for MDA friends• no tooling!• long turnarounds!