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