Download Java + Extension

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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