extending java and developing dsls -...

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

Upload: hacong

Post on 09-Mar-2018

236 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

MPS DEMO

Closure & UI Language samples.

6

Page 7: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

ComposabilityDesired Goal

Java Libraries

Hibernate Spring Joda Time

Java Extensions

DB Language DI Language Dates Language

9

Page 10: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Existing SolutionsPros & Cons

Composability LanguageInfrastructure

LISP Yes No

Internal DSLs in Ruby / Groovy Yes No

XText Framework No Yes

14

Page 15: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Common Problem Existing solutions provide:

Either composable language extensions Or a decent infrastructure Not both

15

Page 16: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

MPS DEMO

Projectional editor in use.

23

Page 24: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Hands-On DemoGoalJava

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Hands-On DemoWorkflow We will define

Structure Editor Typesystem Generator

27

Page 28: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

MPS DEMO

Adding lock statement to Java

28

Page 29: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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 - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Domain-Specific LanguagesExample

31

Page 32: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

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

Page 33: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Licensing/Pricing Fully Open Sourced Apache 2.0 License

MPS is absolutely FREE

33

Page 34: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

Q & A

34

Page 35: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

More info

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

35

Page 36: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

WE ARE HIRING

More info at the booth

36

Page 37: Extending Java And Developing DSLs - materials.it-event.rumaterials.it-event.ru/969/td_stp_jetbrains_solomatov.pdf · Extending Java And Developing DSLs With Open Source Language

37

Konstantin [email protected]

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

Thank You