![Page 1: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/1.jpg)
1
Extending JavaAnd Developing DSLsWith Open Source Language Workbench JetBrains MPS Konstantin Solomatov
JetBrainsLead Developer for JetBrains MPS Project
![Page 2: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/2.jpg)
Agenda
Extending languages. Why bother? Problems and solutions
Composability Language support
MPS’ approach Idea behind it Hands-on demo
MPS & domain-specific languages
2
![Page 3: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/3.jpg)
Why Bother?
Specific domains = specific entities Drawbacks of general-purpose languages:
Limited set of generic constructs Domains are described too verbosely Low code maintainability
Domain-specific extensions Higher abstraction level Higher maintainability
3
![Page 4: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/4.jpg)
Implicit Language Extensions
Domain-specific constructs in Java: synchronized block in Java enhanced for in Java typesafe enums in Java
Desired constructs: closures yield better support for regexps whatever else you are missing
4
![Page 5: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/5.jpg)
Language Extensions
Existing extensions Cover domain-specific needs Are built into existing languages
Further extensions Hard to integrate Too long to wait until JCP accepts them Risks of incompatibility
5
![Page 6: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/6.jpg)
MPS DEMO
Closure & UI Language samples.
6
![Page 7: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/7.jpg)
Agenda
Extending Languages. Why bother? Problems and Solutions
Composability Language support
MPS’ Approach Idea behind it Hands-on Demo
MPS & Domain-Specific Languages
7
![Page 8: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/8.jpg)
Composability
Definition:
Components are composable when they can be used together even if created by different parties
8
![Page 9: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/9.jpg)
ComposabilityDesired Goal
Java Libraries
Hibernate Spring Joda Time
Java Extensions
DB Language DI Language Dates Language
9
![Page 10: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/10.jpg)
ComposabilityLibraries vs. Extensions Libraries are composable:
Java + Hibernate => OK Java + Spring => OK Java + Hibernate, Spring => OK
Language extensions are not Java + extension A => OK Java + extension B => OK Java + extensions A, B => possible ambiguity
10
![Page 11: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/11.jpg)
ComposabilityGrammar Ambiguity Sample With String Interpolation Extension “A”:
int resultsCount = <some_code>;string s = “Found ${resultCount}
results”; Extension “B”:
int resultCount = <some_code>;string t = “Found {resultCount} results”;
“A” + “B” => ambiguity for the compiler:
string a = “Account balance is ${balance}”;
11
![Page 12: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/12.jpg)
Language SupportRequirements Generic infrastructure
Abstract grammar Type system Compiler Etc.
IDE infrastructure Editor Error highlighting Refactoring Version control Etc.
12
![Page 13: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/13.jpg)
Language SupportProblems Time- and resource-consuming task
Complicated algorithms for processing code Highly qualified developers required
Resulting infrastructure composability Type systems to be compatible with different
extensions Refactorings should support potential extensions Etc.
13
![Page 14: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/14.jpg)
Existing SolutionsPros & Cons
ComposabilityLanguage
Infrastructure
LISP Yes No
Internal DSLs in Ruby / Groovy Yes No
XText Framework No Yes
14
![Page 15: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/15.jpg)
Common Problem
Existing solutions provide: Either composable language extensions Or a decent infrastructure Not both
15
![Page 16: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/16.jpg)
Agenda
Extending Languages. Why bother? Problems and Solutions
Composability Language support
MPS’ Approach Idea behind it Hands-on Demo
MPS & Domain-Specific Languages
16
![Page 17: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/17.jpg)
Our Solution to the Problem
JetBrains MPS
Workbench for defining and extending languages
IDE for new languages and extensions
17
![Page 18: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/18.jpg)
Idea Behind It
Text-based grammars lead to ambiguities
Another approach needed
MPS works with Abstract Syntax Tree directly
18
![Page 19: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/19.jpg)
Idea Behind ItEditing Abstract Syntax Tree Former attempts
Diagram-based editing Limited domain of application
MPS solution Keeps user in habitual environment Supports text-like editing
19
![Page 20: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/20.jpg)
Idea Behind ItProjectional Editor
20
Each node of a syntax tree has its projection in the MPS Editor
![Page 21: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/21.jpg)
Idea Behind ItProjectional Editor
21
Each node – in a dedicated cell A node is shown in its text/symbol representation Instantly synchronized editor and syntax tree
![Page 22: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/22.jpg)
Idea Behind It Projection vs. Text Text-like projectional editor Has its pros & cons Reasonable learning curve: approx. 2 weeks
22
![Page 23: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/23.jpg)
MPS DEMO
Projectional editor in use.
23
![Page 24: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/24.jpg)
Idea Behind ItLanguage Support User-defined language infrastructure
Abstract grammar Type system Editor Compiler Etc.
Programming assistance Completion Find usages Rename Etc.
24
![Page 25: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/25.jpg)
Idea Behind It Existing Languages & Extensions Java™ re-implemented with MPS + Extensions
Collections language Dates language Closures language Regexp language Etc.
Language definition languages Implemented with themselves i.e. bootstrapped
Misc languages (XML, etc.)
25
![Page 26: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/26.jpg)
Hands-On DemoGoal
Java
ReadWriteLock l = …l.readLock().lock();try { //code} finally {
l.readLock().unlock();
}
Java + Extension
ReadWriteLock l = …read (l) { //code}
26
![Page 27: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/27.jpg)
Hands-On DemoWorkflow We will define
Structure Editor Typesystem Generator
27
![Page 28: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/28.jpg)
MPS DEMO
Adding lock statement to Java
28
![Page 29: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/29.jpg)
Agenda
Extending Languages. Why bother? Problems and Solutions
Composability Language support
MPS’ Approach Idea behind it Hands-on Demo
MPS & Domain-Specific Languages
29
![Page 30: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/30.jpg)
Domain-Specific Languages MPS suits nicely for creating DSLs
Common language parts can be reused(e.g., expression language)
You can embed general-purpose languages (e.g., Java) inside DSLs
30
![Page 31: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/31.jpg)
Domain-Specific LanguagesExample
31
![Page 32: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/32.jpg)
Existing Applications
YouTrack – bug tracking system Completely developed with MPS Used internally Beta program
Languages for Web Development DNQ Webr Spring language
32
![Page 33: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/33.jpg)
Licensing/Pricing
Almost fully open-sourced Apache 2.0 License
MPS is absolutely FREE
33
![Page 34: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/34.jpg)
Q & A
34
![Page 35: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/35.jpg)
More info
http://www.jetbrains.com/mps - MPS pagehttp://blogs.jetbrains.com/mps - MPS blog
35
![Page 36: Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815839550346895dc59737/html5/thumbnails/36.jpg)
36
Konstantin [email protected]
Lead Developer for JetBrains MPS Projecthttp://www.jetbrains.com/mps
Thank You