Java + Extension

Download Report

Transcript Java + Extension

Extending Java
And Developing DSLs
With Open Source Language Workbench
JetBrains MPS
Konstantin Solomatov
JetBrains
Lead Developer for JetBrains MPS Project
1
Agenda


Extending languages. Why bother?
Problems and solutions



MPS’ approach



Composability
Language support
Idea behind it
Hands-on demo
MPS & domain-specific languages
2
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
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
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
MPS DEMO
Closure & UI Language samples.
6
Agenda


Extending Languages. Why bother?
Problems and Solutions



MPS’ Approach



Composability
Language support
Idea behind it
Hands-on Demo
MPS & Domain-Specific Languages
7
Composability
Definition:
Components are composable when they can be
used together even if created by different parties
8
Composability
Desired Goal
Java Libraries



Hibernate
Spring
Joda Time
Java Extensions



DB Language
DI Language
Dates Language
9
Composability
Libraries vs. Extensions

Libraries are composable:




Java + Hibernate
=> OK
Java + Spring
=> OK
Java + Hibernate, Spring => OK
Language extensions are not



Java + extension A
Java + extension B
Java + extensions A, B
=> OK
=> OK
=> possible ambiguity
10
Composability
Grammar 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
Language Support
Requirements
 Generic infrastructure





Abstract grammar
Type system
Compiler
Etc.
IDE infrastructure





Editor
Error highlighting
Refactoring
Version control
Etc.
12
Language Support
Problems

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
Existing Solutions
Pros & Cons
Composability
Language
Infrastructure
LISP
Yes
No
Internal DSLs in
Ruby / Groovy
Yes
No
XText Framework
No
Yes
14
Common Problem

Existing solutions provide:



Either composable language extensions
Or
a decent infrastructure
Not both
15
Agenda


Extending Languages. Why bother?
Problems and Solutions



MPS’ Approach



Composability
Language support
Idea behind it
Hands-on Demo
MPS & Domain-Specific Languages
16
Our Solution to the Problem

JetBrains MPS

Workbench for defining and extending languages

IDE for new languages and extensions
17
Idea Behind It
Text-based grammars lead to ambiguities
Another approach needed
MPS works with Abstract Syntax Tree directly
18
Idea Behind It
Editing Abstract Syntax Tree

Former attempts



Diagram-based editing
Limited domain of application
MPS solution


Keeps user in habitual environment
Supports text-like editing
19
Idea Behind It
Projectional Editor

Each node of a syntax tree has its projection in
the MPS Editor
20
Idea Behind It
Projectional Editor



Each node – in a dedicated cell
A node is shown in its text/symbol representation
Instantly synchronized editor and syntax tree
21
Idea Behind It
Projection vs. Text



Text-like projectional editor
Has its pros & cons
Reasonable learning curve: approx. 2 weeks
22
MPS DEMO
Projectional editor in use.
23
Idea Behind It
Language Support
 User-defined language infrastructure






Abstract grammar
Type system
Editor
Compiler
Etc.
Programming assistance




Completion
Find usages
Rename
Etc.
24
Idea Behind It
Existing Languages & Extensions

Java™ re-implemented with MPS + Extensions






Language definition languages


Collections language
Dates language
Closures language
Regexp language
Etc.
Implemented with themselves i.e. bootstrapped
Misc languages (XML, etc.)
25
Hands-On Demo
Goal
Java
ReadWriteLock l = …
l.readLock().lock();
try {
//code
} finally {
l.readLock().unlock();
}
Java + Extension
ReadWriteLock l = …
read (l) {
//code
}
26
Hands-On Demo
Workflow

We will define




Structure
Editor
Typesystem
Generator
27
MPS DEMO
Adding lock statement to Java
28
Agenda


Extending Languages. Why bother?
Problems and Solutions



MPS’ Approach



Composability
Language support
Idea behind it
Hands-on Demo
MPS & Domain-Specific Languages
29
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
Domain-Specific Languages
Example
31
Existing Applications

YouTrack – bug tracking system




Completely developed with MPS
Used internally
Beta program
Languages for Web Development



DNQ
Webr
Spring language
32
Licensing/Pricing


Almost fully open-sourced
Apache 2.0 License
MPS is absolutely
FREE
33
Q&A
34
More info
http://www.jetbrains.com/mps - MPS page
http://blogs.jetbrains.com/mps - MPS blog
35
Thank You
Konstantin Solomatov
[email protected]
Lead Developer for JetBrains MPS Project
http://www.jetbrains.com/mps
36