What’s New in MPS 3.2

Language versioning

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.

Migration scripts

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.

Project-level migrations

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.


Cross-model generation

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.

Implicit priorities

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

Enabling copy protection in DSLs

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.


Follow product development and give us your feedback

Versions History

MPS 3.1
  • Support for diagram editor
  • In-place transformations
  • New generation trace
  • Text-like expressions editing
  • Automatic reference re-resolving
MPS 3.0
  • Using MPS DSLs from Java within IntelliJ IDEA
  • Multiple editors
  • Improved BaseLanguage editing experience
  • Console plugin
  • Darcula mode
MPS 2.5
  • IntelliJ IDEA integration
  • New Build Language
  • Customizable scopes
  • New XML language
  • Dependencies analyzer

Want to receive MPS news and updates?