Over the last couple of years, I have used MPS successfully to build interesting (modeling and programming) languages in a wide variety of domains, targeting both business users and engineers. I’ve used MPS because it is currently the most powerful language workbench, lots of things are good about iz, in particular, its support for a multitude of notations and language modularity. But it is also obvious that MPS is not going to be viable for the medium to long term future; the most obvious reason for this statement is that it is not web/cloud-based. In this keynote, I will quickly recap why and how we have been successful with MPS, and point out how language workbenches could look like in the future; I will outline challenges, opportunities and research problems. I hope to spawn discussions for the remainder of the workshop.
19. Language Patterns
New Language
GPL Extension
Existing
Domain Notation
(Informal)
Formalization
Formalized
Language
Reuse GPL incl. Expressions and TS
Add/Embed DS-extensions
Compatible notational style
Reduce to GPL
Analyze Domain to find Abstractions
Define suitable, new notations
Rely on existing behavioral paradigm
Reuse standard expression language
Interpret/Generate to one or more
GPLs
Use existing notation from domain
Clean up and formalize
Generate/Interpret
Often import existing „models“
Language Extension Patterns
24. Example Use Cases
• Mapping of system models to model checkers for
interactive verification of temporal properties
• Flattening of component hierarchies for type checking
• Flattening of hierarchical feature models for path
expression evaluation
• Weaving in of safety concerns into C code.
• Desugaring of business DSLs to a core functional
language; that core language would then feature an
interpreter, a compiler and an integration with an SMT
solver
25. What is Shadow Models?
Functional transformation language with
support for fixpoints
Incremental execution upon change of input
model
Unidirectional, but with first-class support for
lifting results
Fully integrated into MPS IDE
Code: https://github.com/JetBrains/MPS-extensions/tree/master/code/shadowmodels
Docs: https://jetbrains.github.io/MPS-extensions/extensions/shadowmodels/
26. Mechanics
Input Model
Shadow Model
...
‚
User edits the input model
A delta is propagated into the
transformation engine
A change on the shadow model
is produced
This triggers analysis or update
of results in Shadow Model
Results/messages are lifted
back to input level
Results are annotated to the
input model
Mightbestacked
27. Kf2
Core
Interpreter Generator Verifier
Sugar
DSL1 DSL2 DSL3
ShadowModels
• Minimal, Expressive Core
• Functional
• Reactive
• Sugar on top
• Interpter, Generator
and Verifier below
• Realtime-Trafo with
Shadow Models
39. Beyond Balls and Trees
Not too much has happened since the legandary demo.
Overlay program execution data
Run tests and illustrate results in the background.
Instance-based programming (Jonathan Edwards)
That‘s it?
What else can we do?
Which LWB-support can be build?
42. Beyond Balls and Trees
Not too much has happened since the legandary demo.
Overlay program execution data
Run tests and illustrate results in the background.
Instance-based programming (Jonathan Edwards)
That‘s it?
What else can we do?
Which LWB-support can be build?
44. Debuggers
Different ones for different language paradigms
Functional => Tree
Imperative => Stepping
Declarative => ?
45. Debuggers
Different ones for different language paradigms
Functional => Tree
Imperative => Stepping
Declarative => ?
Often the (semantic reverse) of generation
it has to recover DSL semantics for watches, views, breakpoints
Related to simulators and „model animators“
No good tool support for building them!
Realtime vs. Post Mortem
48. Language Composition
Defining „abstract“ languages with holes
Example: State machines with pluggable expression language
What is the type of those that can be plugged in?
Language Types or Interfaces / Megamodels
Example: How do you descibe a „valid“ expression language?
Does this include execution sematics?
57. Applications Modeling Toolvs.
Novice Users need Guidance!
What am I working on?
What should I do next?
How complete is my model?
Roles
Tasks, Workflow
Model States
58. Applications Modeling Toolvs.
Novice Users need Guidance!
What am I working on?
What should I do next?
How complete is my model?
What is the quality of my model?
Roles
Tasks, Workflow
Model States
Metrics
59. Applications Modeling Toolvs.
Novice Users need Guidance!
What am I working on?
What should I do next?
How complete is my model?
What is the quality of my model?
Roles
Tasks, Workflow
Model States
Metrics
Defined jointly with the language.
61. Permissions
Which user groups can see and edit which part of the model?
Can we define views for showing parts or aspects of models.
Proxies for „hidden details“?
64. Version Control Systems are a problem
https://git-man-page-generator.lokaltog.net/
But file-based version control is often not suitable.
65. Google Docs Style Collaboration
Realtime collaboration à la Google Docs
Language/structure-aware
Some level of transaction or isolation
Some version of branching.
69. Become more App-Like
UI must be less like an IDE.
Things must look slicker!
It must be easier to integrate
with web apps that are
developed without the LWB:
Microservice-style modeling „services“
Integration on common backend and also with non-model apps.
70. Bring in M0
Language DSLs
Language
Model
User Data
M0
M1
M2
M3
Part of the LWB
Defined using the LWB
Should feel like IDE
Should be on the web
Not feel like IDE
Completely outside in generated App/DB
71. Bring in M0
Language DSLs
Language
Model
M3
Part of the LWB
User Data
Bring into joint repository.
Simplified Migration of models.
MetaEdit+ does this.
72. Bring in M0
Language DSLs
Language
Model
User Data
M3
Part of the LWB
Bring into joint repository.
Simplified Migration of models.
MetaEdit+ does this.
User-data also needs (incremental)
analysis, transformation and migration.
Should also scale indefinitely.
Why „externalize“ through generation etc?
78. Maybe more important!
!
How do we call
what we do?
How do we
de-risk tools?
What are the
right paradigms?
Computational
Thinking
End-User
programming
Case Studies