【手続補正書】
【提出日】平成29年2月3日(2017.2.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１または複数のハードウェアプロセッサと、前記１または複数のハードウェアプロセッサによって実行され得るコンピュータ実行可能命令を有する１または複数のハードウェア記憶装置とを備えたシステムであって、前記コンピュータ実行可能命令は中間言語プログラムコードの静的解析の一環として少なくとも以下の、
前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
前記複数のコンポーネントの特定のコンポーネントに対応する特定のコントラクトの特定の述部が、前記特定のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
前記複数のコンポーネントのための実行可能コードを１または複数の実行可能バイナリ内に生成することであって、前記特定のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの１または複数の他のコンポーネントの第１のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトのチェックを迂回させることができる第１のエントリポイントを有し、前記複数のコンポーネントの１または複数の他のコンポーネントの第２のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトをチェックさせる第２のエントリポイントを有する実行可能コードの部分を生成することを含む、ことと、
を実行するようシステムを構成する、システム。
【請求項２】
前記特定のコンポーネントは前記システムに挙動を実行するよう命令し、前記特定のコントラクトは、前記挙動を変更することなく前記特定のコントラクトのチェックを削除できるように、意味的に構造化されている、請求項１に記載のシステム。
【請求項３】
各コントラクトが、前記対応するコンポーネントのインターフェースを使用して、前記対応するコンポーネントの呼び出し元に意味的にアクセス可能である、請求項１に記載のシステム。
【請求項４】
コントラクトが対応するコンポーネントの事前条件である、請求項１に記載のシステム。
【請求項５】
コントラクトが対応するコンポーネントの事後条件である、請求項１に記載のシステム。
【請求項６】
ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記システムは、前記特定のコンポーネントの前記実行スコープの外で外部回復コードを実行するよう構成される、請求項１に記載のシステム。
【請求項７】
ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記システムは、前記特定の述部が真ではないことに応答して回復コードが実行されないように、前記特定のコンポーネントに対してファイストフェイルを実施するよう構成される、請求項１に記載のシステム。
【請求項８】
前記システムはまた、述部が外部から見える副作用を含むような少なくともいくつかの条件を検出するように構成される、請求項１に記載のシステム。
【請求項９】
前記システムはまた、前記１または複数の実行可能バイナリを記憶装置上に格納するように構成される、請求項１に記載のシステム。
【請求項１０】
前記システムはまた、
前記複数のコンポーネントの別のコンポーネントに対応する別のコントラクトの別の述部が、前記別のコンポーネントのランタイムにおいて常に真であると判定し、
前記複数のコンポーネントのための前記実行可能コードを１または複数の実行可能バイナリ内に生成するときに、前記別の述部が前記別のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記別のコンポーネントのための実行可能コードの第３の部分であって、前記別のコントラクトおよび前記別の述部に対応する実行可能コードがない、実行可能コードの第３の部分を生成するように構成される、請求項１に記載のシステム。
【請求項１１】
１または複数のハードウェアプロセッサを含むコンピュータシステムで実装される、中間言語プログラムコードの静的解析を実行するための方法であって、
前記１または複数のハードウェアプロセッサが、前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
前記１または複数のハードウェアプロセッサが、前記複数のコンポーネントの特定のコンポーネントに対応する特定のコントラクトの特定の述部が、前記特定のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
前記１または複数のハードウェアプロセッサが、前記複数のコンポーネントのための実行可能コードを１または複数の実行可能バイナリ内に生成することであって、前記特定のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの１または複数の他のコンポーネントの第１のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトのチェックを迂回させることができる第１のエントリポイントを有し、前記複数のコンポーネントの１または複数の他のコンポーネントの第２のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトをチェックさせる第２のエントリポイントを有する実行可能コードの部分を生成することを含む、ことと、
を含む方法。
【請求項１２】
前記静的解析は、リファクタリングツール、検証ツール、自動化ドキュメンテーションジェネレータの少なくとも１つによって実行される、請求項１１に記載の方法。
【請求項１３】
コントラクトが対応するコンポーネントの事前条件である、請求項１１に記載の方法。
【請求項１４】
コントラクトが対応するコンポーネントの事後条件である、請求項１１に記載の方法。
【請求項１５】
ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記特定のコンポーネントの前記実行スコープの外で外部回復コードが実行される、請求項１１に記載の方法。
【請求項１６】
ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記特定の述部が真ではないことに応答して回復コードが実行されないように、前記特定のコンポーネントに対してファイストフェイルが実施される、請求項１１に記載の方法。
【請求項１７】
前記１または複数のハードウェアプロセッサが、前記１または複数の実行可能バイナリを１または複数のハードウェア記憶装置上に格納することをさらに含む、請求項１１に記載の方法。
【請求項１８】
前記複数のコンポーネントの別のコンポーネントに対応する別のコントラクトの別の述部が、前記別のコンポーネントのランタイムにおいて常に真であると判定することと、
前記複数のコンポーネントのための前記実行可能コードを１または複数の実行可能バイナリ内に生成するときに、前記別の述部が前記別のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記別のコンポーネントのための実行可能コードの第３の部分であって、前記別のコントラクトおよび前記別の述部に対応する実行可能コードがない、実行可能コードの第３の部分を生成することと、をさらに含む、請求項１１に記載の方法。
【請求項１９】
コンピュータシステムの１または複数のハードウェアプロセッサによって実行され得るコンピュータ実行可能命令を有する１または複数のハードウェア記憶装置を備えたコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、中間言語プログラムコードの静的解析の一環として少なくとも以下の、
前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
前記複数のコンポーネントの第１のコンポーネントに対応する第１のコントラクトの第１の述部が、前記複数のコンポーネントの前記第１のコンポーネントのランタイムにおいて常に真であると判定することと、
前記複数のコンポーネントの第２のコンポーネントに対応する第２のコントラクトの第２の述部が、前記複数のコンポーネントの前記第２のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
前記複数のコンポーネントのための実行可能コードを１または複数の実行可能バイナリ内に生成することであって、
前記複数のコンポーネントの前記第１のコンポーネントのための前記実行可能コードを生成するときに、前記第１の述部が前記複数のコンポーネントの第１のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記第１のコントラクトおよび前記第１の述部に対応する実行可能コードがない、実行可能コードの第１の部分を生成すること、および
前記複数のコンポーネントの前記第２のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの１または複数の他のコンポーネントの第１のセットによって前記第２のコンポーネントが呼び出される場合に、ランタイムにおいて前記第２のコントラクトのチェックを迂回させることができる第１のエントリポイントを有し、前記複数のコンポーネントの１または複数の他のコンポーネントの第２のセットによって前記第２のコンポーネントが呼び出される場合に、ランタイムにおいて前記第２のコントラクトをチェックさせる第２のエントリポイントを有する実行可能コードの第２部分を生成することを含む、ことと、
を実行するよう前記コンピュータシステムを構成する、コンピュータプログラム製品。
【請求項２０】
ランタイムにおいて遭遇した前記第２の述部が真ではない場合、前記コンピュータシステムは、前記第２の述部が真ではないことに応答して回復コードが実行されないように、前記複数のコンポーネントの第２のコンポーネントに対してファイストフェイルを実施するよう構成される、請求項１９に記載のコンピュータプログラム製品。