MPS 2020.1ヘルプ

型システムのデバッグ

型システムをデバッグするために、MPSは型システムトレースを提供します - それは型システムエンジンの中で起こる評価プロセスへのインサイトをあなたに与える統合された視覚的なツールです。

自分で試してみる

型システムを簡単に試すことができるように、専用のサンプル言語を用意しました。MPSにバンドルされているサンプルプロジェクトを開きます。これは、ユーザーホームフォルダー内のサンプルプロジェクトの中で使用可能になります。

tt11

サンプル言語

実験する言語は、いくつかのタイプ、4つの算術演算(+、-、*、/)、割り当て(:=)、2種類の変数宣言、および変数参照を備えた簡易式言語です。エディターは非常に基本的なもため、ほとんどカスタマイズされていません。そのため、式の編集はおそらくかなり荒いものになります。それでも、新しいコードを書くよりも既存のサンプルをインスペクションし、それらのタイプをデバッグすることを期待しているため、スムーズな編集の欠如は課題になりません。

TT1

言語はSimpleMathWrapperの概念のおかげでJavaに埋め込むことができますが、言語とBaseLanguageの間の対話は不可能です。

式言語は、2つのブランチにサブタイプ規則によって編成された6つのタイプをサポートします。

  1. 要素->数値->フロート->長い-> Int

  2. 要素->ブール

型を調べる

シンプルサンプルクラスを開くと、カーソルを式の任意の部分に移動するか、有効な式ブロックを選択できます。Control +Shift + Pを押すとすぐに、ポップアップダイアログに選択したノードの種類が表示されます。

TT2
TT3

メインサンプルクラスは、型推論が適切な型を変数に正しく伝達する方法を示す、より複雑な例を示します。

tt4

計算された型を自分で確認してください。

タイプエラー

The TypeError sample class shows a simple example of a type error. Just uncomment the code Ctrl+/ and check the reported error:

tt9

この変数宣言はその型がIntであることを明示的に宣言しているため、初期化子は型フロートであるため、型システムはエラーを報告します。一番下のステータスバーを確認するか、誤ったコードの上にマウスを移動するとします。

型システムトレース

When you hit N/A or navigate through the pop-up menu, you get the 型システムトレース panel displayed on the right hand-side.

TT6

トレースは、型システムエンジンが実行したすべてのステップ(たとえば型システム規則)をパネル2に示す。ステップは、実行された順序で上から下に並べられます。ボタン1 _選択済みを使用している場合、パネル2はエディターで選択されているノードのタイプに直接または間接的に影響するステップ(パネル1)を強調表示します。パネル3は、パネル2で選択されたステップの詳細を示します。ステップで型システムエンジンの状態にどのような変更が加えられたかを説明しています。エンジンのワーキングメモリの実際の状態はパネル4に表示されます。

ステップバイステップのデバッグ

The シンプル sample class is probably the easiest one to start experimenting with. The types get resolved in six steps, following the typesystem rules specified in the language. You may want to refer to these rules quickly by pressing F4 or using the N/A "Go to Root Node" command. F3 will navigate you to the node, which is being affected by the current rule.

tt7

  1. 変数宣言の型は、初期化子の型のスーパータイプでなければなりません。aValue変数にa型システム変数が割り当てられ、初期化式にb型システム変数が割り当てられ、a> = b(bサブタイプまたはaと等しい型)が作業メモリに追加されます。

  2. 算術式の型システム規則に従って、b番号のサブタイプでなければならず、10にはc変数が割り当てられ、1.3Fにはd変数が割り当てられ、when-concreteハンドラーが追加されてcが計算されます。

  3. 浮動小数点定数dの規則に従うと、フロートとして解かれます。

  4. 整数定数cの規則に従うと、Intとして解かれます。これにより、ステップ2で登録されたwhen-concreteハンドラーおよび別のwhen-concreteハンドラーがdを待つように登録されます。dはすでにフロートに解決されているため、ハンドラーはb(算術式全体)をトリガーし、フロートとして解決します。これは、b <=数値という以前の式(ステップ2)も解きます。

  5. これでaフロートとして解くことができます。これはa> = bというステップ1の方程式も解きます。

  6. ツールバーのボタンを押して型展開を有効にすると、最後のステップとして、すべてのノードの具体的な型への最終展開が得られます。

tt8

最終更新日: 2020年6月18日