MPS 2020.3 ヘルプ

MPS ユーザーズガイド

言語デザイナーのための MPS ユーザーガイド

MPS へようこそこのユーザーガイドは MPS の完全なリファレンスドキュメントであり、MPS が提供する多くの概念と使用パターンを案内し、システムの特定の側面に関する詳細を知る必要があるときはいつでも手に入れることができます。

トピック

  1. 基礎知識 - 基本概念の概要
  2. MPS の使用 - MPS と通信するためのインターフェースをよく理解してください
  3. 言語定義 - 言語を定義するには、いくつかの側面を指定する必要があります。各側面は、言語の一部、つまり許可された AST 構造、画面上の外観、型システム規則などを体系化したものです。

    アスペクト

    説明

    コアドキュメント

    構造

    ユーザーモデルで使用できるノードの種類(概念と呼ばれる)を定義します。プログラム(モデル)の各ノードは、その概念を参照します。概念は、どのプロパティ、および参照ノードが持つことができるかを指定します。Concepts は、他の Concepts を拡張し、ConceptInterfaces を実装できます。

    構造
    SModel 言語 - モデルへのプログラムによるアクセス
    オープン API- モデルにアクセスするための API リファレンス
    引用符 -AST スニペットの構築
    パターン - パターンマッチングノードの言語
    コードからモデルとモジュールの依存関係を使う

    ビデオ - JetBrains MPS の概要、最初の実行: プロジェクト (英語)

    ビデオ - JetBrains MPS の概要: 構造 (英語)

    制約

    構造で定義されたルールを超えて、ノード間の関係とプロパティに許可される値を制限します。

    通常、制約は次のことを定義します。
    - 参照のターゲットスコープ(参照が指すことができる許可されたノードのコレクション)
    - ノードが別のノードの子 / 親 / 祖先になる可能性がある状況
    - プロパティに許可される値
    - プロパティアクセサーメソッド (Getter および Setter)

    制約

    スコープ

    ビデオ - JetBrains MPS の紹介、パート 3: 制約 (英語)

    振る舞い

    OOP ホールドメソッドのクラスと同様に、Concepts は、ノードでポリモーフィックな方法で呼び出すことができるメソッドと静的メソッドを定義できます。ノードはそのプロパティと関係とともに動作を実行します。

    振る舞い

    ビデオ - JetBrains MPS の紹介、パート 4: 振る舞い (英語)

    エディター

    MPS は、コードを編集可能なフォーム(つまりテキスト)からコンピューターが操作できるツリーのような構造に変換するパーサーを定義する代わりに、ユーザーが AST を直接編集できるプロジェクションエディターの概念を提供します。エディターアスペクトを使用すると、言語設計者は概念の概念を編集するための UI を作成できます。

    エディター
    ダイアグラム作成エディター
    変換メニュー言語
    コンテキストアシスタント
    コンテキストアクションツール

    エディタークックブック エディター言語生成 API

    ビデオ - JetBrains MPS の紹介、パート 5: エディター (英語)

    アクション

    アクションアスペクトは、コピー / 貼り付けやノードの初期化など、高度なエディターの動作を指定する手段を提供します。

    エディターのアクション

    インテンション

    すべての最新の IDE は、便利なキーショートカット(MPS の Alt+Enter )で利用できるインスタントコード操作アクションで開発者を支援します。言語の作成者は、インテンションの側面で自分の言語にこのような小さなコード変換を定義できます。

    インテンション

    ビデオ - JetBrains MPS の紹介、パート 7: インテンション (英語)

    生成プログラム

    1 つ以上の言語で記述されたモデルは、最終的には、Java などの一部のターゲット汎用言語およびプラットフォームの実行可能コードに変換されます。その過程で、モデルは徐々に変換され、最終的なレベルに達するまで概念が繰り返し抽象度の低い概念から置き換えられます。概念を変換するための規則とそれらの正しい順序付けは、生成プログラムの側面で定義されています。

    生成プログラム

    ジェネレーター計画

    ジェネレータークックブック
    インタープリタークックブックの作成
    ビデオ - JetBrains MPS の紹介、パート 8: 生成プログラム (英語)

    TextGen

    生成プログラムが最終的な AST 表現に到達した後のコード生成中に、TextGen フェーズが開始し、モデル内のすべてのノードをそれらのテキスト表現に変換し、結果のテキストソースファイルをディスクに保存します。

    TextGen

    ビデオ - JetBrains MPS の紹介、パート 9: TextGen(英語)

    データフロー

    言語構造を介した値の流れと制御の流れを理解する機能は、言語が到達不能コードnull ポインタエラーの可能性などの問題を報告できます。言語設計者は、データフローアスペクトを活用して、各概念のフローを定義できます。MPS は、このフローを使用して、プログラム全体のデータフローを計算します。

    データフロー

    データフロークックブック
    ビデオ - JetBrains MPS の紹介、パート 10: データフロー (英語)

    型システム

    コードの型チェックが必要な言語は、型システムのルールを提供する必要があります。MPS 型システムエンジンは、ルールをオンザフライで評価し、ノードの型を計算してレポートします
    計算されたタイプが期待と異なる場合は常にエラー。
    モデルに関する非型システムアサーションを検証するために、いわゆるチェックルールを追加で定義できます。

    型システム

    型システムクックブック
    型システムを使う
    型システムをデバッグする
    ビデオ - JetBrains MPS の紹介、パート 11: 型システム (英語)

    リファクタリング

    最新の IDE では、開発者はリファクタリングを通じてコードの構造をシームレスかつ完璧に変更できます。MPS は、言語デザイナーがそのようなリファクタリングを準備し、彼らの言語の一部にすることを可能にします。

    リファクタリング

    マイグレーション

    ある言語の新しいバージョンが一般に公開されると、その言語の前のバージョンを使用するプロジェクトは、新しい言語構成を使用するように移行する必要があります。言語の作者によって準備された移行スクリプトは、ユーザーコードを操作して自動的にそれを言語の最新版に更新します。

    マイグレーション

    分岐を伴う移行

    テスト

    言語定義のさまざまな側面を自動的にテストできます。言語作成者は、エディター、アクション、型システム、データフロー、または言語の制約が仕様に従って動作することを検証するテストを作成できます。

    テスト

    スクリプト TODO スクリプト

    付属品

    アクセサーリーモデルは、言語の側面(推奨)として、またはソリューションでの通常のモデルとして、2 つの場所に保存できます。どちらの場合も、モデルを使用できるように、モデルを言語ランタイム言語設定に追加する必要があります。典型的なユースケースは、言語が使用される任意の場所で利用できるコンセプトインスタンスのデフォルトライブラリです。

    付属品

  4. IDE の統合 - MPS をカスタマイズする方法、言語固有の視覚的拡張を追加する方法、異なる永続化フォーマットを使用する方法など
  5. IDE ツール - MPS が言語を操作するために提供するツール
  6. プラットフォーム言語 - すぐに使える言語をすぐに使える
  7. MPS プロジェクトの構築 - コマンドラインからの言語構築、Ant 統合、継続的インテグレーション、プラグインの作成と使用、コードの難読化
  8. クックブック - クイック使い方ガイド
  9. 外部チュートリアルとガイド

関連ページ:

MPS へのファストトラック

ようこそ ! このチュートリアルは、MPS にまったく慣れておらず、MPS の風景を見ながらのガイドツアーを好む開発者のために特別に設計されます。次に進むべき場所を示す明確なマークに従って、殴打された道を一度に 1 歩歩きます。情報は、より単純な概念からより複雑な概念へと進み、旅の終わりに MPS を理解し、あなたのプロジェクトでそれを効果的に使用できるようになるように構成されています。こんにちは、私の名前はヴァクラフです。あなたのためにこのチュートリアルを作成しました。このチュートリアルは、M...

MPS スクリーンキャスト

このページでは、JetBrains TV の MPS チャンネルで公開されている MPS 関連のスクリーンキャストを一覧表示して分類しています。カスタマーストーリー:誰がどのように MPS を使用します。MPS の MPS の使用方法を紹介しています。なぜ JetBrains MPS- MPS についての概要ビデオ。誰が気にするべきか、なぜか。音声メニュー IDE- MPS ができることのより徹底的な例。音声メニュー定義言語は、MPS の可能性を説明するためのサンプルドメインとして使用されてい...

基本的な考え方

この章では、MPS の基本的な概念(ノード、概念、および言語)について説明します。これらは MPS がどのように機能するかを正しく理解するための鍵です。それらはすべて他のものと組み合わされたときに意味をなさないため、それらについてすべて一緒に話さなければなりません。このセクションでは、各要素の本質について説明します。詳細については、ノード、概念(構造言語)、言語(プロジェクト構造)に関するセクションを確認してください。抽象構文ツリー (AST)MPS は、テキスト形式を避けることによって他の多く...

よくある質問 (FAQ)

DSL、LOP、プログラミング:ここでは、MPS に関して最もよくある質問に対する答えを見つけることができます。DSL とは何ですか? 「本物の」プログラミング言語とどう違うのですか。DSL は特定の種類の問題に最適化された言語です。通常、Java、C、Ruby などの汎用言語よりも複雑さは少なくなります。DSL はチューリング完全ではないかもしれず、関心のあるフィールドについての事実だけを述べています。通常 DSL は、DSL が設計されているフィールドの専門家である人々と密接に連携して開発...

IDE の設定

設定 / 環境設定ダイアログを介して、MPS の多くの側面を構成できます。特定の構成アイテムにすばやく移動するには、左上の便利なテキスト検索ボックスを使用できます。フォーカスはデフォルトでテキストフィールドに設定されているため、入力を開始できます。検索が個々の画面に深く入り込んでいることに注意してください。プラグイン MPS はモジュール式で、いくつかのプラグインがバンドルされています。MPS プラグインマネージャーを開くと、インストールで使用可能なプラグインのリストが表示されます。サポートされて...

言語プラグインのインストール方法

MPS は他の言語でも簡単に拡張できます。言語は通常の zip ファイルとしてパッケージされています。MPSプラグインディレクトリに解凍し、再起動時に MPS がロードされます。言語プラグインをインストールする最も便利な方法は、設定 / 環境設定ダイアログ で利用可能なプラグインマネージャーを使