What’s New in MPS 3.2
MPS now keeps track of language versions. Language designer can also provide the scripts to migrate user code to the up-to-date language version. The version will be automatically incremented upon the new migration script creation.
Whenever a significant language change has been introduced, the language designer can define a new migration script to update existing user models from the previous version of the language. The migration script is linked to the version of the language it migrates from.
Automatic migration execution
Whenever MPS detects that a model uses an older version of a language than the one installed in MPS, all the necessary migration scripts will be presented and executed as part of the migration assistant wizard.
A new API allows developers to define and register project-level migrations. These are plain Java classes and MPS will run them against each project only once. For more information on project-level migrations check out the Migrations documentation page.
Unique concept identifiers
New model persistence
MPS 3.2 persistence was updated in order to support unique language concept identities, not associated with user-defined concept names.
Non-breaking language concepts rename
As the user-defined concept name no longer takes part in models persisting mechanics, it can easily be changed without the need to update models.
It also lets you reuse same concept names when introducing new concepts to implement incompatible changes.
The long-lasting problem of cross-model references reduction is now solved within MPS 3.2.
You can now get output by label and input from another model, and configure a factory for the the returned stub node.
"Generation Target" dependency type
Generation Target is a new dependency type, reflecting the fact that the referenced language is used as a target for this language's generator. This dependency should be used in cases when Extends dependency is not required.
New "Design" generator dependency type
The Design dependency between two generators is useful when there's nothing that links these generators, except one: priority rules that determine in which order they must be executed.
Generator now automatically respects the natural order in which templates are stacked, unless an explicit generator priority rule states otherwise.
Running mapping configurations as separate generation steps
Instead of squeezing as many mapping configurations as possible into a single generation step, MPS 3.2 now devotes its own step to each mapping configuration. This leads to a considerably faster generator performance when using in-place transformations.
Source code copy protection
Enabling copy protection in DSLs
DSL designer can now mark language concepts, instances of which need to be excluded from the models in the distribution package. This allows DSL users to hide the implementation details of their code, while keeping the API available. Removing sources from generated code
Hiding language implementation details
The feature above is already used within the MPS language definition DSL itself, allowing DSL designers to effectively hide the language implementation details in the final language library. This operation is optional, and can be controlled from within the build script.
Version control support changes
Automatic resolution of the false merge conflict reports
Sometimes the MPS command-line merging utility reports false merge conflicts due to the lack of project-specific information. MPS 3.2 has a new tool to automatically resolve all such conflicts.
"Merge hints" for automatic merge conflicts resolution
Properties and links in language definitions can now be attributed with the @mergeHint attribute, specifying either ours or theirs resolution strategy. This will allow MPS to automatically resolve merge conflicts for such elements.
Testing framework performance improvement
In-process execution mode
All Unit Tests in MPS are now executed in-process, leading to a huge performance improvement. You can still sandbox Unit Tests with unpredictable side-effects by configuring them to run in a spawned MPS process.
"Reuse caches" for spawned tests
Spawned Unit Tests run faster with the "reuse caches" option. It is on by-default.
JDK8 supported as a runtime
The most recent version of Java runtime - Java 8 is now supported as a platform to run MPS.
Startup time improvement
Additional MPS startup time optimisations were implemented.
- Support for diagram editor
- In-place transformations
- New generation trace
- Text-like expressions editing
- Automatic reference re-resolving
- Using MPS DSLs from Java within IntelliJ IDEA
- Multiple editors
- Improved BaseLanguage editing experience
- Console plugin
- Darcula mode
- IntelliJ IDEA integration
- New Build Language
- Customizable scopes
- New XML language
- Dependencies analyzer
Want to receive MPS news and updates?