MPS 2023.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 を理解し、あなたのプロジェクトでそれを効果的に使用できるようになるように構成されています。私達は MPS を学ぶことよりも世界に簡単な作業があることを認めます。言語設計は複雑な領域であり、投影編集は慣...

MPS スクリーンキャスト

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

基本的な考え方

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

よくある質問 (FAQ)

ドメイン固有言語、プロジェクショナルエディターおよび MPS:ここでは、MPS に関して最もよくある質問に対する答えを見つけることができます。ドメイン固有言語(DSL)とは何ですか? それらは「実際の」プログラミング言語とどう違うのですか? DSL は、特定の問題領域向けに最適化された言語です。通常、Java、C、Ruby などの汎用言語ほど複雑ではありません。DSL は通常、DSL が設計されているドメインまたはフィールドの専門家と緊密に連携して開発されます。多くの場合、DSL は、DSL が対...

JetBrains MPS プロジェクトへの貢献

バグレポートを提出する:バグの報告は、参加するための最も簡単な方法です。バグレポートは提出に時間がかからず、開発者にとって非常に役立ちます。問題を発見したら、JetBrains MPS issue tracker に報告してください。環境 (OS、JDK、MPS バージョン) に関する情報、問題を再現する手順、問題の説明を必ず提供してください。新しい問題を作成すると、トラッカーは同様の既存の問題を一覧表示します。重複する問題を避けるために確認してください。現在の問題に賛成票を投じてください。問...

IDE の設定

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