MPS 2020.3 ヘルプ

MPS Java との互換性

The Java コンパイラー configuration tab in the preferences window only holds a single setting - Project bytecode version.

Screen shot 2015 01 30 at 17 20 40

この設定は、MPS によってコンパイルされたすべての Java クラスのバイトコードバージョンを定義します。これらのクラスには、言語の側面から生成されたクラス、ランタイムソリューションのクラス、サンドボックスソリューションのクラスなどがあります。

デフォルトでは、バイトコードのバージョンは JDK Default に設定されています。つまり、コンパイルされたクラスのバージョンは、MPS が実行されている Java のバージョンと同じになります。例: MPS を JDK 1.8 で実行し、JDK Default が選択されている場合、バイトコードのバージョンは 1.8 になります。

Each module can specify the Java level in its module properties on the Java tab. This way only the features of the chosen language level will be enabled in BaseLanguage code of that module.

Java compatibility

ビルドスクリプト

Also, dont 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

JDK 1.8 でコンパイルされた java クラスを使用する

MPS モジュールプールには、実行中の Java のクラスを保持する JDK ソリューションがあります。そのため、JDK 1.8 で MPS を起動すると、JDK ソリューションで最新の Java プラットフォームクラスが利用可能になります。

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

デフォルトのインターフェースメソッド

Java 8 ではデフォルトのメソッドも導入されました。これらはインターフェースに直接実装されたメソッドです。ここでデフォルトのメソッドについて読むことができます: http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html(英語)

これらのメソッドは、通常のインスタンスメソッドとまったく同じように呼び出すことができます。ただし、クラスが実装しているインターフェースから直接デフォルトのメソッドを呼び出す必要がある場合があります。例: クラスが複数のインターフェースを実装していて、それぞれが同じシグネチャーを持つデフォルトのメソッドを含んでいるときに多重継承の場合。

public interface A {   public default void foo() {     System.out.println("A");    } } public interface B {   public default void foo() {     System.out.println("B");    } }

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

The jetbrains.mps.baseLanguage.jdk8 language allows users to create the 'default' methods in BaseLanguage interfaces.

Comx1

The 'default' keyword is implemented by the DefaultModifier concept which extends the Modifier concept in the BaseLanguage.

変換 / 代替メニュー + いくつかの居心地の良いインテンションも提供されています。

Comx2
Comx3

Java プラットフォーム API の使用

Java 8 ではラムダ式が導入されました。これについては、ここで詳しく説明します。http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html(英語)

MPS はラムダ式に生成される言語をまだ持っていません。代わりに、新しい Java API と互換性のある独自のクロージャ言語があります。

新しい 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.