MPS 3.2.3 is out

Another bug-fix release in the 3.2 series has been made public - MPS 3.2.3 is now ready for download.

Among the usual doze of fixed issues we’ve also included a single new piece of functionality that was demanded – the ability to invoke arbitrary Java code from the MPS build scripts. The new mps-runner plugin from jetbrains.mps.build.mps.runner enables a new build script entry - run code from solution. By pointing it to a solution that holds your Java code the build script will be able to run it as part of the build process.

Runner

 

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , | Leave a comment

Starting MPS 3.3 EAP

Today marks the beginning of the MPS 3.3 Early Access Program. We can’t wait to give you a taste of what we’ve been baking here and would love to hear your feedback, while the code is still hot.

Logo

From now on we will be regularly sharing the new 3.3 functionality with you, as it gets developed. If you like to experiment with the newest features, now is the best time to get your hands dirty - you can download MPS 3.3 EAP 1,  consult the gradually updated documentation and feel the excitement of living on the edge.

The EAP 1 release contains three prominent features:

  1. custom language aspects – MPS 3.3 will allow language designers to hook in their own language aspects, such as an editor or a type-system. EAP 1 comes with the initial set of changes that enable custom aspects, such as runtime class instantiation in the language descriptor, customisable aspect icons, adjustment of the “new root” menu, and a few others. Integration with smodel as well as an enhanced DSL for describing custom aspects will come next.
  2. overriding the default type – the type-system now has the flexibility to substitute an arbitrary node to represent the type instead of the node originally used as a type. The new Substitute Type Rule applied to original type nodes, returns alternative type representation; the same rule applied to an attribute of the original type node enables aspect-oriented way of altering the default type representation. The Typesystem documentation covers this topic in full detail.
  3. no Used Languages in modules – the need for importing languages twice – both to model, where the language is used, and to the model’s module, is gone. Modules now derive used languages from the models that the module owns. It is no longer possible to add/remove languages in the ‘Used Languages’ tab in module properties.

As with all EAP builds, expect rough edges, unfinished features and bugs. This is part of the joy. Please report all issues to us so as we can fix them and prepare a solid 3.3 release.

More details on these and other planned features are coming soon, so please stay tuned to this blog.

Develop with pleasure!
-JetBrains MPS Team

 

Posted in Announcement | Tagged , , , | Leave a comment

Releasing MPS 3.2.2

A fresh MPS update is ready for you to download. MPS 3.2.2 comes with a decent collections of fixes and one new variant of MPS distribution. The Mac OS X users can now choose from two options:

  1. the traditional distribution that is compatible with JDK 1.6 and requires this JDK to have been installed on the target system
  2. the new distribution with bundled JDK 1.8

The bundled JDK is a patched version of Open JDK 1.8.0_40 and will be picked by MPS automatically once you start it. To find out under which JDK your MPS is running, open the “About” dialog and check out the splash screen.

splash

The patch in the JDK fixes several UI-related issues that prevented MPS (as well as other IDEs from JetBrains) from running smoothly on JDK 8 under Mac OS.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , | Leave a comment

MPS 3.2.1 is ready

Only shortly after MPS 3.2 has been released, we can’t resist the temptation to share a fresh MPS 3.2.1 update with you. It contains more than four weeks-worth of improvements that could not make it into 3.2.

The MPS plugin is now compatible with both IDEA 14.0 and 14.1. Additionally, we’ve restricted the implicit visibility of the BaseLanguage concepts in language definition languages, since it was causing more harm than good. This may result in a few new “missing dependency on BaseLanguage” errors reported from your existing languages, if you relied on this implicit dependency. You’ll need to add these manually and then all will work just fine again.

You’ll surely appreciate the corrections to several usability issues in the migration assistant, in BaseLanguage as well as in the IDEA plugin. Following your feedback we also have included numerous fixes to refactorings, migrations, debugger and to the editor layout management.

Check out all the 51 YouTrack issues in the release notes and then 3 – 2 – 1 – go get MPS 3.2.1 and enjoy.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , , | Leave a comment

Releasing MPS 3.2

We’re now proudly releasing JetBrains MPS 3.2 – a new version of your favourite DSL language workbench. We’ve built this version to give you a tool that fundamentally improves the way how you evolve your languages – language versioning, migration scripts, simplified VCS conflict resolution, fast in-process tests and a more robust generator – you’ll instantly benefit from these enhancements.
Numerous bug fixes and usability improvements in the editor as well as in the core languages will then make your time spent with MPS more effective and enjoyable.

Here’s a list of the major additions in MPS 3.2:

  • Language versioning enables MPS to keep track of the versions of the languages used in your projects and seamlessly upgrade your code if a newer language version is available
  • New model persistence relies on unique concept identifiers, which gives languages greater flexibility when handling concept names, for example when renaming or deprecating concepts
  • Cross-model generation brings a proper solution to resolving references pointing to declarations in different models during generation
  • Several generation planning improvements make the generation process better organised, more predictable and faster
  • Implementation stripping allows language designers as well as library authors to hide the actual implementation of their packages from their users
  • Resolving changes in the Version-control system for non-conflicting models has been automated
  • With Merge hints language designers may specify custom resolution strategies for properties and links to use when resolving VCS conflicts automatically
  • Test performance has been improved dramatically by enabling in-process runs as well as reusing the test caches

The What’s new page details all new enhancements that MPS 3.2 comes with.

Get your copy of MPS 3.2 today and take the brand new MPS release out for a ride.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , , | Leave a comment

New and updated documentation materials

Now with the 3.2 release of MPS approaching, we’ve updated the introductory materials that aim at introducing newbies to MPS. Typical readers of this blog have probably got over the beginner stage, but many of you may still benefit from some of the materials or use the pointers listed here to help your friends and colleagues to start with MPS smoothly.

Here are the most prominent updates:

  • The Fast Track to MPS tutorial has been updated in many sections so it could be considered the best place to start learning MPS
  • You may have seen the new What JetBrains MPS can do for you? video. If not, check it out!
  • A new series of 11 introductory videos covering all aspects of language definition in MPS has been created
  • A video describing the key principles of the MPS projectional editor has been published
  • The screen-cast Creating your first language in MPS has been updated
  • The mbeddr guys created an updated Why mbeddr uses MPS screencast
  • The User Guide as the ultimate reference documentation has been restructured and updated
  • Two new sample projects come bundled with MPS 3.2:
    • The Migrations sample project to illustrate the workings of language versioning and migration scripts in MPS 3.2
    • The Language Patterns sample project covering basic language design patterns to help beginners properly structure their early languages

We hope you will like what we’ve done.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement, Feature | Tagged , , , , , | Leave a comment

MPS 3.2 release candidate 3 is out

Not too long after rc2 we’ve just pushed out an rc3 release of MPS 3.2 and made it available for you to download.

Expect no changes in the functionality, only a few important bug-fixes and performance optimizations, covered by the release notes, have been added.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , , | Leave a comment

Getting closer – MPS 3.2 RC2 released

We’re almost ready for the final release now. A second release candidate has been prepared, tested and put up on the shelf for you to download.

The functionality of rc2 is identical to rc1 and is fully covered by the What’s new document. Release notes list all the bug-fixes that we have addressed since rc1.

Please take the release candidate 2 for a spin and let us know how you liked it and whether it correctly migrated and opened your projects. If all is green, we’re ready to ship very soon.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , , | Leave a comment

MPS 3.2 on a final approach – the release candidate 1 is out

After almost two months of collecting your feedback on the EAP3 release, fixing bugs, polishing new features and implementing the migration capabilities we’re now ready to offer you the first release candidate of MPS 3.2.

Please get it from the download site and give it a good test. Especially, we encourage you to test migrating your MPS 3.1 projects to MPS 3.2. There might still be some hidden problems in there and we need to know about them. Please tell us, if your project fails to be migrated smoothly to the new version. Also, please stay on the safe side and backup your project before migrating it to 3.2.

The What’s new document summaries the advantages of 3.2 over 3.1. Full release notes list all the issues we have addressed since EAP3.

Develop with pleasure!
-JetBrains MPS Team

Posted in Announcement | Tagged , , , | Leave a comment

MPS making friends with JDK 8

One of the useful new features of MPS 3.2 will be its compatibility with JDK 8. Not only you will be able to run MPS on JDK 8, but MPS will also correctly handle new Java 8 syntax enhancements and let you make use of them. Read on to find out some tips.

Configuration

A new configuration tab in the preferences window, called Java Compiler, has appeared. It currently only holds a single setting – “Project bytecode version”.

 Screen Shot 2015-01-30 at 17.20.40

This setting defines the bytecode version of all Java classes compiled by MPS. These classes include classes generated from language’s aspects, classes of the runtime solutions, classes of the sandbox solutions, etc.

By default, the bytecode version is set to “JDK Default”. This means that the version of the compiled classes will be equal to the version of Java, which MPS is running under. E.g. if you run MPS under JDK 1.8 and “JDK Default” is selected, the bytecode version will be 1.8.

The other options for project bytecode version are 1.6, 1.7 and 1.8.

Note that if you compile languages to the 1.8 version, then if you try to run MPS with JDK, the version of which is earlier than 1.8, those languages won’t be loaded.

Build scripts

Also, don’t forget to set java compliance level in the build scripts of your project. It should be the same as the project bytecode version.

Screen Shot 2015-01-29 at 18.08.28

Using java classes compiled with JDK 1.8

In the MPS modules pool you can find the JDK solution, which holds the classes of the running Java. So when you start MPS under JDK 1.8, the latest Java Platform classes will be available in the JDK solution.

You can also use any external Java classes, compiled under JDK 1.8 by adding them as Java stubs.

Since version 1.8, Java interfaces can contain default and static methods. At present, MPS does not support creating them in your BaseLanguage code, but you can call static and default methods defined in external Java classes, e.g classes of the Java Platform.

Static interface method call

Screen Shot 2015-01-22 at 02.52.51

In the example, we sort a list with the Comparator.reverseOrder(). Comparator is an interface from java.util, and reverseOrder() is its static method, which was introduced in Java 1.8.

Default interface methods

Java 8 introduced also default methods. These are methods implemented directly in the interface. You can read about default methods here: http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

These methods can be called just like the usual instance methods. Sometimes, however, you need to call the default method directly from an interface that your class is implementing. E.g in case of multiple inheritance when a class implements several interfaces, each containing a default method with the same signature.

In that case foo() can be called explicitly on one of the interfaces via a SuperInterfaceMethodCall construction, which is newly located in the jetbrains.mps.baseLanguage.jdk8 language.

Screen Shot 2015-01-29 at 20.39.29

Using Java platform API

Java 8 introduced lambda expressions, of which you can learn more here: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

MPS 3.2 doesn’t yet have a language that would be generated into lambda-expressions. Instead, it has its own closure language, which is compatible with the new Java API!

Here’s the example of an interaction with the new JDK 8 Collections API:

Screen Shot 2015-01-29 at 18.03.43

The forEach() method is the new default method of java.lang.Iterable. It takes a Consumer interface as a parameter. Consumer is a functional interface as it only has one method. In Java 8 it would be possible to pass a lambda expression to forEach(). In MPS you can pass the MPS closure. A closure knows the type of the parameter taken by forEach() while generating and it will be generated exactly to the correct instance of the Consumer.

 

Develop with pleasure!
-JetBrains MPS Team

Posted in Feature | Tagged , , , | Leave a comment