MPS ユーザーズガイド
言語デザイナーのための MPS ユーザーガイド
MPS へようこそこのユーザーガイドは MPS の完全なリファレンスドキュメントであり、MPS が提供する多くの概念と使用パターンを案内し、システムの特定の側面に関する詳細を知る必要があるときはいつでも手に入れることができます。
トピック
- 基礎知識 - 基本概念の概要
- コピーライト
JetBrains MPS への貢献 (英語) - MPS のソースコードを回避する方法に関する MPS のコントリビューターおよび開発者のためのガイドライン
言語リポジトリ (英語) - JetBrains と外部ベンダーの両方が、MPS で使用可能な言語について詳しく知る
- MPS の使用 - MPS と通信するためのインターフェースをよく理解してください
初めての実行 (英語) - MPS がどのように構成されているか、それがどのように機能するか、ユーザーがどのようにしてそれと対話するべきかについての、初心者にとって重要な情報。
- エディターの指示
- デフォルトのキーマッ環境設定
- IDE の設定
- 言語プラグインのインストール方法
- MPS Java との互換性
- 依存関係を正しくする
報告されたエラーを理解して問題を解決する - どこかで立ち往生したときにあなたの方法を見つけるのを手助けするための秘訣。
- バージョン管理上の注意
- デバッガーを使う
- コンソール
言語定義 - 言語を定義するには、いくつかの側面を指定する必要があります。各側面は、言語の一部、つまり許可された AST 構造、画面上の外観、型システム規則などを体系化したものです。
アスペクト
説明
コアドキュメント
構造
ユーザーモデルで使用できるノードの種類(概念と呼ばれる)を定義します。プログラム(モデル)内の各ノードはその概念を表します。概念は、どのプロパティ、子、および参照ノードが持つことができるかを指定します。概念は他の概念を拡張して ConceptInterfaces を実装することができます。
構造
SModel 言語 - モデルへのプログラムによるアクセス
オープン API - モデルにアクセスするための API リファレンス
引用符 - AST スニペットの作成
パターン - パターンマッチングノード用の言語
コードからモデルとモジュールの依存関係を使うビデオ - JetBrains MPS の概要、最初の実行: プロジェクト (英語)
構造
SModel 言語 - モデルへのプログラムによるアクセス
オープン API - モデルにアクセスするための API リファレンス
引用符 - AST スニペットの作成
パターン - パターンマッチングノード用の言語
コードからモデルとモジュールの依存関係を使う制約
構造で定義されている規則を超えて、ノード間の関係とプロパティの許容値を制限します。
制約は通常次のように定義します。
- 参照のターゲットスコープ(参照が指すことができる許可されたノードの集合)
- あるノードが別のノードの子 / 親 / 祖先になることができる状況
- プロパティの許容値
- プロパティアクセサーメソッド (Getter および Setter)振る舞い
OOP のクラスがメソッドを保持するのと同じように、概念はノード上で多相的に呼び出すことができるメソッドと静的メソッドを定義することができます。ノードは、このように彼らの特性や関係と一緒に行動を運ぶ。
エディター
編集可能な形式(つまりテキスト)からコンピューターが操作できるツリーのような構造にコードを変換するパーサを定義する代わりに、MPS は、ユーザが直接 AST を編集できるようにする投影エディターの概念を提供します。エディターアスペクトにより、言語設計者は自分のコンセプトコンセプトを編集するための UI を作成できます。
アクション
アクションアスペクトは、コピー / 貼り付けやノードの初期化など、高度なエディターの動作を指定する手段を提供します。
インテンション
すべての最新の IDE は、便利なキーショートカット(MPS の Alt+Enter )で利用できるインスタントコード操作アクションで開発者を支援します。言語の作成者は、インテンションの側面で自分の言語にこのような小さなコード変換を定義できます。
生成プログラム
1 つ以上の言語で記述されたモデルは、最終的には、Java などの一部のターゲット汎用言語およびプラットフォームの実行可能コードに変換されます。その過程で、モデルは徐々に変換され、最終的なレベルに達するまで概念が繰り返し抽象度の低い概念から置き換えられます。概念を変換するための規則とそれらの正しい順序付けは、生成プログラムの側面で定義されています。
ジェネレータークックブック
インタープリタークックブックの作成
ビデオ - JetBrains MPS の紹介、パート 8: 生成プログラム (英語)TextGen
生成プログラムが最終的な AST 表現に到達した後のコード生成中に、TextGen フェーズが開始し、モデル内のすべてのノードをそれらのテキスト表現に変換し、結果のテキストソースファイルをディスクに保存します。
データフロー
値の流れや言語構成要素を通じた制御の流れを理解することができれば、言語は到達不能コードや null ポインタエラーの可能性などの課題を報告できます。言語設計者はデータフローアスペクトを利用して各概念のフローを定義することができ、MPS はそれを使用してプログラム全体のデータフローを計算します。
型システム
コードを型チェックする必要がある言語は、型システム規則を提供する必要があります。MPS 型システムエンジンはその場でルールを評価し、ノードの型を計算してレポートします。
計算されたタイプが予想と異なる場合は、エラーが発生します。
モデルに関する非型システムアサーションを検証するために、いわゆるチェックルールをさらに定義することができます。型システムクックブック
型システムを使う
型システムをデバッグする
ビデオ - JetBrains MPS の紹介、パート 11: 型システム (英語)リファクタリング
最新の IDE では、開発者はリファクタリングを通じてコードの構造をシームレスかつ完璧に変更できます。MPS は、言語デザイナーがそのようなリファクタリングを準備し、彼らの言語の一部にすることを可能にします。
マイグレーション
ある言語の新しいバージョンが一般に公開されると、その言語の前のバージョンを使用するプロジェクトは、新しい言語構成を使用するように移行する必要があります。言語の作者によって準備された移行スクリプトは、ユーザーコードを操作して自動的にそれを言語の最新版に更新します。
テスト
言語定義のさまざまな側面を自動的にテストできます。言語作成者は、エディター、アクション、型システム、データフロー、または言語の制約が仕様に従って動作することを検証するテストを作成できます。
スクリプト TODO
スクリプト 付属品
アクセサーリーモデルは、言語の側面として(推奨)、またはソリューションにある通常のモデルとして、2 か所に保管できます。どちらの場合も、モデルを使用できるように言語ランタイム言語設定に追加する必要があります。典型的なユースケースは、その言語が使用されている任意の場所で利用可能になる Concept インスタンスのデフォルトライブラリです。
- IDE の統合 - MPS をカスタマイズする方法、言語固有の視覚的拡張を追加する方法、異なる永続化フォーマットを使用する方法など
- 汎用プレースホルダーと汎用コメント
- ノードをコメントアウトする
- カスタム言語の側面
UI プラグイン - UI を拡張する (メニュー、ツールウィンドウ、タブ、設定など)
使用箇所の検索 - ユーザーがノードを発見する方法をカスタマイズする
- エラーを抑制する
- デバッガー
- メイク
- エクステンションサポート
- MPS および Ant
- HTTP サポートプラグイン (英語)
- IDE ツール - MPS が言語を操作するために提供するツール
依存関係アナライザー - モデルの依存関係を分析する (モデルの依存関係を分析する)
モジュール依存関係ツール (モジュール依存関係を解析)
- 実行設定
- ハイライトの変更
- モジュールのクローニング
- プラットフォーム言語 - すぐに使える言語をすぐに使える
- MPS プロジェクトの構築 - コマンドラインからの言語構築、Ant 統合、継続的インテグレーション、プラグインの作成と使用、コードの難読化
- クックブック - クイック使い方ガイド
共通言語パターン - 繰り返し発生する言語デザインパターンをカバーする使い方ガイド
- エディタークックブック
- ジェネレータークックブック
- インタープリタークックブックの作成
説明コメント - 言語の任意のコード要素に関する説明コメントのサポートを追加するために属性、スコープ、エラー抑制をどのように活用するかを示すクックブック
要求追跡言語 - 要件追跡サンプルプロジェクトの見学ツアー。ノード属性、複数の投影法とスコープについて学びます。
- 型システム
- データフロークックブック
- 正規表現
- オープン API - コードからモデルにアクセスする
- カスタム持続クックブック
- カスタム言語アスペクトクックブック
- 外部チュートリアルとガイド
JAR を JetBrains MPS プロジェクトに追加する方法 (英語) - Federico Tomasseti によるチュートリアル
MindMaps(英語) - Antoine Gagnon(英語) によるチュートリアル
ジェネレーターチュートリアル (英語) - Eugen Schindler
メンテナンス可能なジェネレーター (英語) - Kolja Dummann
関連ページ:

MPS へのファストトラック - 習得するための 10 のステップ
ようこそ ! このチュートリアルは、MPS にまったく慣れておらず、MPS の風景を見ながらのガイドツアーを好む開発者のために特別に設計されます。次に進むべき場所を示す明確なマークに従って、殴打された道を一度に 1 歩歩きます。情報は、より単純な概念からより複雑な概念へと進み、旅の終わりに MPS

MPS スクリーンキャスト
このページでは、JetBrains TV の MPS チャンネルで公開された MPS 関連のスクリーンキャストをリストおよび分類しています。カスタマーストーリー :誰がどのように MPS を使用します。MPS の MPS の使用方法を紹介しています。なぜ JetBrains MPS- MPS につい...

基本的な考え方
この章では、MPS の基本的な概念(ノード、概念、および言語)について説明します。これらは MPS がどのように機能するかを正しく理解するための鍵です。それらはすべて他のものと組み合わされたときに意味をなさないため、それらについてすべて一緒に話さなければなりません。このセクションでは、各要素の本質に...

よくある質問 (FAQ)
DSL、LOP、プログラミング、DSL とは何ですか? 「本物の」プログラミング言語とどう違うのですか。DSL の利点は何ですか?なぜ気にする必要がありますか?、DSL と通常のコードはどのように連携していますか?、言語指向プログラミングとは、なぜ言語を拡張したいのですか?ライブラリは十分ではないで...

IDE の設定
設定 / 環境設定ダイアログ を介して、MPS の多くの側面を構成できます。特定の構成アイテムにすばやく移動するには、左上の便利なテキスト検索ボックスを使用できます。フォーカスはデフォルトでテキストフィールドに設定されているため、入力を開始できます。検索が個々の画面に深く入り込んでいることに注意して...

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