SModel 言語
SModel 言語の目的は、MPS モデルを照会および変更することです。これにより、モデルのノード、属性、プロパティ、リンク、その他の多くの重要な品質を調査できます。言語は、言語のいくつかの異なる側面(アクション、リファクタリング、ジェネレーター)をエンコードして、最も目立つものに名前を付けるために必要です。通常、jetbrains.mps.lang.smodel 言語を BaseLanguage と組み合わせて使用します。
null 値の扱い
SModel 言語は、null 値を非常に安全な方法で処理します。Java や C# などのオブジェクト指向言語では、コード全体に expr == null および expr!= null ステートメントの形式で null 値をチェックすることがよくあります。これらは、null ポインタの例外を防ぐために必要です。ただし、同時にコードが煩雑になり、コードが読みにくくなることがよくあります。この問題を軽減するために、MPS は null 値を自由な方法で処理します。例: プロパティの null ノードを要求すると、プロパティのタイプのデフォルト値が返されます。null ノードに子リストを要求すると、空のリストなどが表示されます。null ノードで動作メソッドを呼び出すと、呼び出されたメソッドの戻り値の型が ClassifierType または StringType である場合、null 値が返されます。PrimitiveType の場合、そのタイプのデフォルト値が返されます。これにより、言語デザイナーとしての生活が楽になります。
操作パラメーター
SModel 言語の操作の多くは、パラメーターを受け入れます。操作の最後に <を入力してパラメーターリストを開くと、パラメーターを指定できます。例: myNode.ancestors <concept = IfStatement、concept = ForStatement>。
これらの操作のパラメーターとしての「+」記号は、「自分自身を含める」ことを意味します。つまり、操作が呼び出されるノードが条件に一致する場合、「+」により、返される結果にそのノードも含まれるようになります。たとえば、myNode.ancestors<concept = IfStatement, +> は、IfStatement の場合、myNode を返すことがあります。
同時アクセスの管理
jetbrains.mps.lang.access 言語は、モデルアクセス API、特にその同時アクセス部分の使用を容易にします。この言語は、モデルアクセス API の構文糖衣と考えることができます。また、API に直接アクセスする対応する低レベルコードの例が提供されています。MPS モデルにアクセスするには、スレッドによって適切なロックを取得する必要があります。そうしないと、読み取りまたは書き込み操作が許可されません。これらのステートメントを使用できるようにするには、jetbrains.mps.lang.access 言語をインポートする必要があります。この言語には、次のコマンドが含まれています。
でアクションを書く
でアクションを読む
とのコマンド
EDT でコマンドを実行します
EDT で実行する
元にすると透明なコマンド
ある種のロックは EDT によってのみ取得できます。プラットフォームは、ApplicationManager クラスを通じて EDT のコンテキストで実行されるタスクをスケジュールするための API を提供します。
でアクションを書く | 同期モデルの書き込み: モデルへの変更は、適切な書き込みロックを保持するマネージドアクション内からのみ実行できます。メソッドはそのようなロックを取得し、提供されたアクションを実行します。EDT(イベントディスパッチスレッド)から呼び出さないでください。呼び出さないと、UI がフリーズする可能性があります。ロックはアップグレードできません。読み取りロックを所有している場合、このコマンドを使用して書き込みロックを要求することはできません。 |
でアクションを読む | 同期モデルの読み取り: モデルのプロパティのクエリは、適切な読み取りロックを保持するマネージドアクション内からのみ実行できます。メソッドはそのようなロックを取得し、提供されたアクションを実行します。 |
とのコマンド | 同期モデルコマンド: これは、プラットフォームの取り消しメカニズムに関して実行される書き込みアクションを表します。このメソッドは EDT スレッドからのみ呼び出す必要があります。EDT のコマンドの実行とは異なり、このメソッドは同期的に実行されます。 |
EDT でコマンドを実行します | コマンドを EDT から非同期で実行するようにスケジュールします。 これは、プラットフォームの元に戻すメカニズムに関して実行される書き込みアクションを表し、EDT スレッドから非同期で実行されます。このメソッドは、任意のスレッドから呼び出すことができます。 |
EDT で実行する | EDT から読み取られた非同期モデルをスケジュールします。 モデルのプロパティのクエリは、適切な読み取りロックを保持するマネージドアクション内からのみ実行できます。このメソッドはそのようなロックを取得し、EDTUI スレッドで提供されたアクションを非同期的に実行します。アクション内では、UI 要素に触れたり、IntelliJ プラットフォームの他の EDT バインドアクションを実行したりしても安全です。 |
元にすると透明なコマンド | Undo-transparent コマンド: 実行されたコードにはモデル書き込みアクセス権があり、コマンドとして扱われます。唯一の違いは、透過的なアクションからの変更が以前の元に戻すことができるコマンドの変更とマージされるため、このアクションを個別に元に戻すことができないことです。 |
関連ページ:
オープン API
言語レポジトリ、プロジェクトモジュール、言語、モデルは、Open API を介してプログラム的に便利にアクセスできます。Open API を使用すると、モデルへのアクセスを制御したり、永続化などのいくつかの側面について独自の実装を提供したりすることもできます。これら 2 つの使用箇所の種類について個別に説明します。注: このドキュメントは、Open API の考え方の一般的な概要と、API への便利な開始リンクを提供することを目的としています。使用方法に関する技術的な詳細については、。Open...
XML 言語
jetbrains.mps.core.xml 言語は、MPS で XML ドキュメントを厳密にモデル化するように設計されています。この言語は、プレーン XML と 1:1 で一致することを目的としており、テキスト XML ファイルに生成されます。構造:XmlFile ルート要素は、XML ファイルを表すために使用する必要があります。これには、1 つ以上のプロローグエントリとルート xml 要素を保持する単一の XmlDocument ノードが含まれています。選択およびカスタマイズが必要なプロローグ要...