Typestate analysis とは

プロトコル分析とも呼ばれるTypestate分析は、プログラミング言語で使用されるプログラム分析の一形式です。これは、オブジェクト指向言語に最も一般的に適用されます。 Typestateは、特定の型のインスタンスに対して実行できる有効な一連の操作を定義します。 Typestatesは、名前が示唆するように、そのタイプの変数に状態情報を関連付けます。この状態情報は、コンパイル時に、その型のインスタンスに対して呼び出される操作が有効であるかどうかを判断するために使用されます。通常実行時にのみ実行されるオブジェクトに対して実行される操作は、オブジェクトの新しい状態と互換性があるように変更された型状態情報に対して実行される。
Typestateは、メソッドBを呼び出す前にメソッドAを呼び出さなければならず、その間にメソッドCを呼び出さないように、ビヘイビア型の細分化を表現することができます。 Typestateは、オープン状態でファイルを残すなどの無効なシーケンスとは異なり、意味的に有効なシーケンス(「オープンしてから閉じる」など)を強制することによって、オープン/クローズのセマンティクスを使用するリソースを表現するのに適しています。そのようなリソースには、ファイルシステム要素、トランザクション、接続、およびプロトコルが含まれます。例えば、開発者は、ファイルやソケットを読み書きする前に開かなければならないと指定したい場合や、ファイルやソケットを閉じた場合に読み書きできないように指定したい場合があります。 "typestate"という名前は、この種の分析が有限状態機械としてのオブジェクトの各タイプをモデル化することが多いという事実に由来します。このステートマシンでは、各ステートには許可されたメソッド/メッセージの明確なセットがあり、メソッド呼び出しによってステート遷移が発生することがあります。ペトリネットは、洗練されたタイプで使用するための可能な行動モデルとして提案されている。
Typestate分析は、IBMのWatson Labで開発されたNetwork Implementation Language(NIL)の1983年にRob Stromによって導入されました。これは1986年の記事でStromとYeminiによって形式化されました。これは、変数の初期化の度合いを追跡するためにtypestateを使用し、不適切に初期化されたデータに操作が適用されないことを保証し、さらにHermesプログラミング言語でさらに一般化されます。
近年、オブジェクト指向言語にtypestateの概念を適用する方法が開発されています。