extending java and developing dsls -...
TRANSCRIPT
1
Extending JavaAnd Developing DSLsWith Open Source Language Workbench JetBrains MPS Konstantin Solomatov
JetBrainsLead Developer for JetBrains MPS Project
Agenda Extending languages. Why bother? Problems and solutions
Composability Language support
MPS’ approach 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
Composability Language support
MPS’ Approach 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
ComposabilityDesired Goal
Java Libraries
Hibernate Spring Joda Time
Java Extensions
DB Language DI Language Dates Language
9
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
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
Language SupportRequirements Generic infrastructure
Abstract grammar Type system Compiler Etc.
IDE infrastructure Editor Error highlighting Refactoring Version control Etc.
12
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
Existing SolutionsPros & Cons
Composability LanguageInfrastructure
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
Composability Language support
MPS’ Approach 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 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
Idea Behind ItProjectional Editor
20
Each node of a syntax tree has its projection in the MPS Editor
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
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 ItLanguage 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
Collections language Dates language Closures language Regexp language Etc.
Language definition languages Implemented with themselves i.e. bootstrapped
Misc languages (XML, etc.)
25
Hands-On DemoGoalJava
ReadWriteLock l = …l.readLock().lock();try { //code} finally { l.readLock().unlock();}
Java + Extension
ReadWriteLock l = …read (l) { //code}
26
Hands-On DemoWorkflow We will define
Structure Editor Typesystem Generator
27
MPS DEMO
Adding lock statement to Java
28
Agenda Extending Languages. Why bother? Problems and Solutions
Composability Language support
MPS’ Approach 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 LanguagesExample
31
Existing Applications YouTrack – bug tracking system
Completely developed with MPS Used internally for more than a year 1.0 Released in September, 2009
Languages for Web Development DNQ Webr Spring language
32
Licensing/Pricing Fully Open Sourced Apache 2.0 License
MPS is absolutely FREE
33
Q & A
34
More info
http://www.jetbrains.com/mps - MPS pagehttp://blogs.jetbrains.com/mps - MPS blog
35
WE ARE HIRING
More info at the booth
36
37
Konstantin [email protected]
Lead Developer for JetBrains MPS Projecthttp://www.jetbrains.com/mps
Thank You