MPS 2018.1の新機能

SModel言語の機能強化

場合によっては、生のポインタ(SNodeReferenceやSModelReferenceなど)を処理しなければならないことがあります。 このような生のポインタを作成や操作は困難であり、処理には苦労するかもしれません。 ポインタを簡単に処理できるよう、SModel言語に新しい型と操作を導入しました。

ノードポインタ

新しい "node-ptr<>" 型を導入することで、ノードポインタを簡単に処理できるようにしました。 これらのポインタは "resolve" 操作で実際のノードに解決できます。 "node-ptr/ ... /" 式は既に使用すべきではないとされている古い "nodePointer/ ... /" 構文を置き換えるものです。 移行スクリプトは、式の変換を処理するために作成されています。

ポインタによる参照の設定

ターゲットを参照リンクに設定する際、ターゲットノードにアクセスする必要はありません。 そのターゲットへのポインタで十分です。 参照リンクのアクセス式に適用可能な "set ptr" 操作を使用すると、参照ターゲットを指定のポインタに設定できます。 ノードがノードポインタで指定されたものであることを確認するには、新しい "is" 操作をしてください。

SModel型の厳格な型付け規則

SModel型の型付け規則が厳格化されました。 SNodeReferenceインターフェースメソッドはもう、“node-ptr" 値では使用できません。 SNodeReferenceを明示的に取得するには、ダウンキャスト演算子を使用する必要があります。 また、ノードインスタンスでの "pointer" 操作で、通常のSNodeReferenceではなく "node-ptr" を返すようになりました。

参照マクロ内のnode-ptr式

参照マクロが変更され、node-ptr式を受け付けられるようになりました。 参照の型に応じて、参照マクロから返されたポインタの型が検証されます。

ノードIDによるポインタの指定

モデル名とノードIDを使用して、名前を持たないコンセプトインスタンスへのポインタを指定したり、参照を文字列としてハードコードしたりできます。

モデルポインタ

"model-reference" 型が "model-ptr<>" にリファクタリングされました。 このポインタは "resolve" 操作で実際のノードに解決できます。

新しい移行スクリプト

node/.../` 式、望ましくない引用、ダウンキャストなどの古いSModel言語構文の移行に役立つ移行スクリプトをいくつか導入しました。 これらを実行するには、Tools -> Scripts -> Enhancements... と移動し、"SModel Language Enhancements (node-ptr<> and model-ptr)" を選択します。 また、同じウィンドウ内では、ジェネレータマクロで古い構造を処理する「Use node pointers in reference macro queries」オプションを使用できます。

SModelクエリのスコープ選択を改善

SModelクエリが、操作対象スコープに対して直感的に動作するようになりました。 スコープが特定のクエリに対するパラメータとして宣言されている場合、以前のように編集可能なモデルだけではなく、読み取り専用モデルを含むスコープ全体でクエリが実行されます。

エディタ

サブツリーにReflective Editorを表示

サブツリー全体にReflective Editorを表示できるようになりました。 そのためには、ノードを選択して Cmd/Ctrl+Shift+[ を押すか、コンテキストメニューから「Show reflective editor for subtree」を選択してください。 通常のエディタに戻るには、Cmd/Ctrl+]、Cmd/Ctrl+Shift+] を押すか、「Show regular editor for the Subtree」オプションを右クリックしてください。 Cmd/Ctrl+[ を押すか、コンテキストメニューを開くことで、引き続き現在のノードのみにReflective Editorを表示することもできます。

プロパティおよび参照セルの変換メニュー

プロパティと参照セルをサポートするため、変換メニュー言語は常に強化されています。 プロパティと参照の変換メニュー部分を使用すると、以前使用されていた “inline menus” よりも便利にプロパティと参照セルのメニューをカスタマイズすることができます。

以下のような2つの重要なメリットがあります。

  • プロパティと参照セルのみならず、任意のセルに割り当てることができます。
  • completionのみならず、他の場所(context assistant、context menu、side-transformation)にも適用できます。