Top Banner
1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS Project
36

1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Dec 29, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

1

Extending JavaAnd Developing DSLsWith Open Source Language Workbench JetBrains MPS Konstantin Solomatov

JetBrainsLead Developer for JetBrains MPS Project

Page 2: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

MPS DEMO

Closure & UI Language samples.

6

Page 7: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Composability

Definition:

Components are composable when they can be used together even if created by different parties

8

Page 9: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

ComposabilityDesired Goal

Java Libraries

Hibernate Spring Joda Time

Java Extensions

DB Language DI Language Dates Language

9

Page 10: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Language SupportRequirements Generic infrastructure

Abstract grammar Type system Compiler Etc.

IDE infrastructure Editor Error highlighting Refactoring Version control Etc.

12

Page 13: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Existing SolutionsPros & Cons

ComposabilityLanguage

Infrastructure

LISP Yes No

Internal DSLs in Ruby / Groovy Yes No

XText Framework No Yes

14

Page 15: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Common Problem

Existing solutions provide: Either composable language extensions Or a decent infrastructure Not both

15

Page 16: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Our Solution to the Problem

JetBrains MPS

Workbench for defining and extending languages

IDE for new languages and extensions

17

Page 18: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Idea Behind It

Text-based grammars lead to ambiguities

Another approach needed

MPS works with Abstract Syntax Tree directly

18

Page 19: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Idea Behind ItProjectional Editor

20

Each node of a syntax tree has its projection in the MPS Editor

Page 21: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Idea Behind It Projection vs. Text Text-like projectional editor Has its pros & cons Reasonable learning curve: approx. 2 weeks

22

Page 23: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

MPS DEMO

Projectional editor in use.

23

Page 24: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Hands-On DemoWorkflow We will define

Structure Editor Typesystem Generator

27

Page 28: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

MPS DEMO

Adding lock statement to Java

28

Page 29: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Domain-Specific LanguagesExample

31

Page 32: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

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: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Licensing/Pricing

Almost fully open-sourced Apache 2.0 License

MPS is absolutely FREE

33

Page 34: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

Q & A

34

Page 35: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

More info

http://www.jetbrains.com/mps - MPS pagehttp://blogs.jetbrains.com/mps - MPS blog

35

Page 36: 1 Extending Java And Developing DSLs With Open Source Language Workbench JetBrains MPS Konstantin Solomatov JetBrains Lead Developer for JetBrains MPS.

36

Konstantin [email protected]

Lead Developer for JetBrains MPS Projecthttp://www.jetbrains.com/mps

Thank You