MPS 2022.2 の新機能

MPS 2022.2 には、インスペクターのアノテーション、Kotlin サポートの改善、SModel API の強化などが含まれます。

インスペクターのアノテーション

Inspector のアノテーション

Inspector(インスペクター)ウィンドウからアノテーションにアクセスできるようになりました。アノテーションプロセスはルート全体に対して開始します。 このアクションは、Inspector(インスペクター)ウィンドウの左側の境界を右クリックして呼び出すこともできます。 アノテーションは Inspector(インスペクター)エディターとメインエディターの両方で開きます。

詳細情報

MPS Kotlin におけるサポートの改善

MPS Kotlin におけるサポートの改善

編集に関わる多数の課題が修正され、型指定のエクスペリエンスが改善されました。

  • スコープがリファクタリングされ、より多くのユースケース(カスタムレシーバー型など)がサポートされ、フィルタリングが改善されました(重複数の減少、非表示関数へのアクセス)。
  • 型システム別の分解演算子のサポート。
  • 数値リテラル: 浮動小数や長整数のより簡単な挿入、符号なし数値と符号付き数値間の移行。
  • 文字列リテラル: 文字列リテラルで Enter を押すと、すべての文字列を単一行から複数行に切り替えられます。一部の挿入の課題が修正されました。
  • Kotlin スタブは、レシーバーでのアノテーションと関数の型の読み込みをサポートしています(誤って (T) -> R として読み込まれていた T.() -> R など)。
  • ラムダリテラル:
    • 暗黙の it パラメーターのサポート。
    • 型にレシーバーのあるラムダ(Receiver.() -> Unit など)は、そのレシーバー型をラムダ本体内の暗黙の this として適切に使用します。

詳細情報

MPS Kotlin の SModel 言語

MPS Kotlin の SModel 言語

新しい jetbrains.mps.kotlin.smodel 言語により、MPS Kotlin で SModel がサポートされるようになりました。 コンパイルのサポートが強化されているほか、言語モジュールに(ヘルパークラスなどとして)Kotlin コードを使用できるようになっています。

通常の型(ノード、概念、リンク、参照)のほか、MPS Kotlin の柔軟性の向上が増すことで概念型のパラメーターを導入できるようになっています。 このようなパラメーターを関数、変数、およびクラスで宣言して使用し、内部型で再利用できるようになりました。これにより、型指定がより簡単になり、Kotlin のスマートキャストを利用できるようになりました。

Kotlin コンパイルのアップデート

Kotlin コンパイルのアップデート

永続性の強化により、Kotlin コンパイルのサポートが改善されました。 そのため、MPS が再起動されても Kotlin クラスが消去されなくなっています。

Kotlin コンパイラーでコンパイルされるモジュールをマークする新しいオプションがビルドスクリプトに追加されています。 このフラグは手動で挿入するようになっており、現時点ではこのフラグを true に設定する自動チェックはありません。 このフラグは、Kotlin ファイルを含むモジュールが JVM にコンパイルされるときに追加すべきものです。

BaseLanguage コメントに使用できるテキストスタイル

BaseLanguage コメントに使用できるテキストスタイル

BaseLanguage にコメントを追加する際に、テキストスタイルを使用して詳細にカスタマイズできるようになりました。 コメントでは、太字(Ctrl + B)、非イタリック体(Ctrl + I)、下線(Ctrl + U)、および太字・非イタリック体(Ctrl + B -> Ctrl + I)がサポートされています。

後置変換

後置変換

BaseLanguage で、式に文字列を追記してコードを変換できる後置変換を使用できるようになりました。 変換を適用するために式の先頭にキャレットを移動したり、式を選択したりする必要がなくなるため、開発者の時間が節約されます。

SModel による遅延モデル検出

従来の MPS はモデルがリポジトリに登録されたタイミングでモデルを検出していました。 通常のプロジェクトモジュールでモデルを検出するには、ファイルシステムを横断してファイルとその種類を検索する必要があり、少なくともモデルに関するヘッダー情報を読み取る必要があります。

今後はモデルがリクエストされない限り、モジュールがモデルの検出を行うことはありません。 モデルの検出や読み込みを発生させず、モジュールのみが認識しているモジュールにアクセスするための新しい SModule API(SModule.forEachRegisteredModel())が導入されています。 SModel API クライアントを使用する場合、特に SRepositoryContentAdapter サブクラスを使用する場合は、この改善の恩恵を受けるために新しい API を使用することをお勧めします。

SReference としても知られる関連付けリンクの改善

MPS に参照を作成するための一貫した API が導入され、内部表現が更新されました。 これらの変更はモデルの参照/永続化システムの改善を目的としており、後日リリースされる予定です。 しかしながら、現時点でもこの変更によってモデルのメモリ格納量を 5% 程度削減できるようになっています。

Java スタブ

MPS がバージョン管理された jar エントリーを考慮し、実際の Java ランタイムに一致するバージョンの Java クラスを公開するようになりました。

Java Util Logging(JUL)への Log4j の移行

MPS と IntelliJ プラットフォームは既知のセキュリティ問題のない Log4j ライブラリの簡易バージョンを使用していましたが、いずれも標準の java.util.logging パッケージをロギングに使用するように切り替わっています。 リクエストを Log4j API から Java Util Logging(JUL)の実装にリダイレクトするための互換性レイヤーが実装されています(SLF4J ベース)。

Debug Log Settings(デバッグログの設定)アクションでは、カテゴリの DEBUG と TRACE レベルを構成できます。 さらには bin/log.properties 構成ファイルも追加され、既知の JUL 構成フォーマットを使用できるようになりました。 旧リリースの log.xml とは異なり、この構成ファイルはデフォルトで読み取られませんが、ユーザーは idea.log.config.properties.file システムプロパティを使ってこの(またはその他の外部の)構成へのアクセスをリクエストすることができます。

コマンドライン Make

MPS は lang.build 宣言から生成する Ant ビルドスクリプトは別々のタスクを使用してソースの生成とコンパイルを行います(MPS 独自の <generate> と通常の Ant <javac>)。 これに、IDE から起動される Make プロセスに対応する新しい <mps.make> タスクが追加されました。 モデルからコンパイル済みコードに至るまでの完全な遷移に対応したタスクです。 このタスクはコード生成とコンパイルの両方が組み合わさったものです。MPS はいかなる場合もモジュールのクラスを読み込む目的でコンパイル済みのクラスを必要とするため(<javac> タスクは往々にして <generate> 時に完了済みのコンパイル作業を重複して行うため)、このタスクによって時間が節約されます。 また、Ant コマンドラインのビルドと IDE から起動された Make プロセスが互いに類似するようにもなるため、ビルドプロセスの信頼性が高まります。

詳細情報

ジェネレーターのテスト

ノードの順序を無視できる照合オプションにより、ジェネレーターのテストが改善されています。 また、モデルルートの順序を入れ替える新しいアクションも導入されており、基準テストモデルを必要な状態に遷移させるのに役立ちます。

詳細情報

TextGen のタイムアウト設定

MPS が Model-to-Text(M2T)変換処理の時間を制限し、TextGen の面での潜在的なエラーに対処できるようになりました。 以前はこの制限をハードコードで提供していましたが、 最近になって一部の大型のモデルが制限に達し、好ましくないタイムアウト例外が発生するようになっていました。 そこで、新しい IDE 設定を追加してタイムアウトを制御できるようにしました。 コマンドラインビルドのサポートは、今後のリリースで予定されています。

Make プロセスの Java BaseLanguage 依存関係管理の改善

従来の MPS は `dependencies` ファイルで生成された BaseLanguage クラス間の依存関係を記録していました。 Java コンパイラーはこの記録を頼りに依存しているコンパイル済みのクラスを再読み込みする必要があるかどうかを判断しています。 しかし、2021.2 でより高いレベルの依存関係を保持するように ‘dependencies’ が変更されて以降はルートごとのクラス名を収集して保存する必要がなくなりました。 これにより、BaseLanguage コードと Java コンパイルプロセスの両方で MPS の TextGen 時間が改善されました(前者では個別の依存関係を収集する必要がなくなり、後者では個別のファイル依存関係の解析、モジュールとクラスパスへのファイル依存関係の属性付け、および ‘dirty’ 状態の伝播の必要がなくなったため)。

モジュール依存関係を保持する新しいファイル

新しい deps.cp ファイルにモジュールごとの依存関係が保存され、MPS がモジュールコンパイルグラフを推測できるようになりました。 このファイルは変換の状態を保持しており、状態を ‘sealed’ にして調整します(変換に使用されなかった依存関係はリストに含まれません)。これは、実行時に収集される実際のモジュールの依存関係に基づく依存関係グラフとは大きく異なります。

UI の変更

MPS が言語モジュールの配下にネストしたランタイム/サンドボックスソリューションを作成しなくなりました。 デフォルトでは、これらのモジュールは言語モジュールと同じ階層になります。 ‘main’ 言語モジュールの名前を変更しても、これらのモジュールは ‘related’ として認識され、‘main’ モジュールとともに名前変更されます。

詳細情報

ラベルマッピングの複合キー

旧リリースで導入された複合ラベルキー機能を強化するため、MPS がチェックポイントモデルでの複合キーの維持をサポートするようになりました。

プラットフォームの機能

「Cloning repository」進捗バー

Cloning repository」進捗バー

Cloning repository(リポジトリをクローン中)進捗バーがウェルカム画面に表示されるようになりました。プロジェクトリストに表示されるため、より明確で使いやすくなっています。

新しい目次アクション

新しい目次アクション

ドキュメントヘッダーに基づいて Markdown ファイルに目次を簡単に生成できるようになりました。

GPG 署名

GPG 署名

コミットに GPG 署名を追加できるようになりました。 署名は Git ツールウィンドウの Commit Details(コミットの詳細)セクションに表示されます。

Markdown ファイルのコマンド実行

Markdown ファイルのコマンド実行

実行コマンドを含む命令が記述された Markdown ファイルを扱う場合は、ガターの実行アイコンを使用してこのようなコマンドをファイルから直接実行できます。

移行ガイド

各メジャーリリースでは、旧バージョンの MPS から円滑に移行できるような移行手順を準備しています。 必要な手順をよく確認してください。