JP6401235B2 - コントラクトのためのオペレーティングシステムサポート - Google Patents

コントラクトのためのオペレーティングシステムサポート Download PDF

Info

Publication number
JP6401235B2
JP6401235B2 JP2016501182A JP2016501182A JP6401235B2 JP 6401235 B2 JP6401235 B2 JP 6401235B2 JP 2016501182 A JP2016501182 A JP 2016501182A JP 2016501182 A JP2016501182 A JP 2016501182A JP 6401235 B2 JP6401235 B2 JP 6401235B2
Authority
JP
Japan
Prior art keywords
component
contract
components
predicate
runtime
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016501182A
Other languages
English (en)
Other versions
JP2016511484A5 (ja
JP2016511484A (ja
Inventor
ジェイ. ダフィー,ジョン
ジェイ. ダフィー,ジョン
ポーター パーソンズ,ジェアード
ポーター パーソンズ,ジェアード
ステビンズ ゴードン,コリン
ステビンズ ゴードン,コリン
ダニエル ブロムフィールド,アレクサンダー
ダニエル ブロムフィールド,アレクサンダー
タイフェール,マーティン
アレン バルトロメオ,デヴィッド
アレン バルトロメオ,デヴィッド
バーネット,マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2016511484A publication Critical patent/JP2016511484A/ja
Publication of JP2016511484A5 publication Critical patent/JP2016511484A5/ja
Application granted granted Critical
Publication of JP6401235B2 publication Critical patent/JP6401235B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

[0001] コンピュータおよびコンピューティングシステムは、現代生活のほぼすべての側面に影響を及ぼしている。コンピュータは、仕事、レクリエーション、保健医療、輸送、娯楽、家庭経営などに広く関わっている。コンピュータ機能は、典型的には、コンピューティングシステムがソフトウェアコードを実行した結果である。
[0002] 現代のソフトウェアコードの大部分は、発見、報告、およびエラー状態からの復帰を目的としたものである。現実の状況においては、エラー状態は比較的まれであり、シミュレーションするのが難しい場合が多いにもかかわらず、プログラマはエラー状態の処理に相当量のリソースを充てている。
[0003] ソフトウェアシステム内では、エラー回復コードに、システム内の全コード数に比して過度に多いバグが存在する。このことは、エラー状態は、シミュレーションするのが難しい場合が多いため試験を経ないままになることもよくあり、やがて顧客が実地運用する際に根本的な問題となって現れるという事実と直接的に相関する。不適切なエラー回復ロジックは複合的なエラーをもたらし、最終的にはクラッシュおよびデータ破損を招く可能性がある。
[0004] 従来のソフトウェアシステムは、様々なタイプのエラー状態を混在させつつ、これらのエラー状態を処理するための単一のメカニズムを提供している。この画一性は、開発者がシステムに対して一貫した単一の方法でエラー状態を判断できるようにするため、表面上は魅力的である。その反面、この画一性はエラーにおける定性的差異を不明瞭にしてしまう。
[0005] 本明細書において特許請求される主題は、上述のような環境においてのみいかなる欠点をも解決する実施形態または動作する実施形態に限定されるものではない。むしろ、上記の背景は、本明細書に記載するいくつかの実施形態が実施され得る典型的な1つの技術分野を例示するためにのみ提供される。
[0006] 本明細書に記載する少なくとも1つの実施形態では、フロントエンドコンパイラがソースコードを中間コードにコンパイルするシステムについて説明する。中間コードは後でバイナリコードに変換することができる。ソースコードはコントラクトチェックを含む。実行スコープのランタイムにおいてこのチェックに遭遇した場合、その実行スコープの以降の実行は、コントラクトに関連付けられた述部が真であるか否かを条件とする。述部が真ではない場合、実行スコープは実行されなくなる。例えば、実行スコープが1つのプログラムであったと仮定すると、このプログラムは内部のエラー回復ロジックを実行することなく中断する。任意選択により外部のエラー回復ロジックを実行してもよい。
[0007] フロントエンドコンパイラはコントラクトチェックを保持するように動作し、その結果、このチェックはプログラムの意味解析によって引き続き理解され得るような意味構造を維持する。それゆえ、チェックは、中間コードに作用する静的解析ツールによって理解され得る。
[0008] 例えば、静的解析コードは、中間コードに基づいてバイナリを生成するバックエンドコンパイラであってもよい。あるタイプの解析として、コントラクトチェックに関連付けられた述部がすべての条件下で真となるか否かを判定し、ランタイムでのチェックの実行を差し控えるものが考えられる。別のタイプの解析として、チェックに関連付けられた実行が特定の条件下(実行コンポーネントが別のコンポーネントによって呼び出されるなど)で真となるか否かを判定し、その条件が満たされるときにランタイムでのチェックを差し控えるものが考えられる。さらに別のタイプの解析として、チェックに関連付けられた述部が常に偽となるか否かを判定し、プログラムにバグが含まれていることをプログラマに対して警告するものが考えられる。中間コードに作用することができる他のタイプの静的アナライザには、リファクタリングツール、検証ツール、自動化ドキュメンテーションジェネレータなどが含まれる。
[0009] 「発明の概要」は、特許請求された主題の主な特徴または本質的特徴を特定することを意図するものではなく、また、特許請求された主題の範囲を決定する際の助けとして用いられることを意図するものでもない。
[0010] 上述した利点および特徴、ならびに他の利点および特徴を取得できる方法を記載するため、添付図面を参照することにより、様々な実施形態についてさらに詳細に説明する。これらの図面は例示的な実施形態を示すに過ぎず、したがって、本発明の範囲を限定するものと解釈すべきではないことを理解し、以下の添付図面を用いて、実施形態についてさらに具体的かつ詳細に記載し、説明する。
[0011]本明細書に記載するいくつかの実施形態が採用され得るコンピューティングシステムを抽象的に示す図である。 [0012]ソースコードで表現されたコントラクトおよびアサーション(すなわちコントラクトチェック)が意味的に保持されるような方法、かつ、ソースコードで表現された挙動が残されるような方法で、ソースコードが中間言語コードにコンパイルされる環境の概略図である。 [0013]事前条件の形式でのコントラクトを有するコンポーネントに実行フローが到達している環境を示し、事前条件が満たされない場合に発生し得るフェイルファストを示す図である。 [0014]事後条件の形式でのコントラクトを有するコンポーネントに実行フローが到達している環境を示し、事後条件が満たされない場合に発生し得るフェイルファストを示す図である。 [0015]各コンポーネントが事前条件の形式でのコントラクトを含む、ソースコード内または中間言語コード内で表現された可能なコンポーネント呼び出しのチェーンを示す図である。 [0016]実行フローがいくつかのコントラクトチェックを削除するように最適化され、かつ、コントラクトに対するチェックを条件付きで要求するコンポーネントのために複数のエントリポイントを含むように最適化されている、バイナリコードで表現された可能なコンポーネント呼び出しのチェーンを示す図である。 [0017]送信側プロセスから見た、プロセス間通信を実現するメソッド500Aのフローチャート図である。 [0018]受信側プロセスから見た、プロセス間通信を実現するメソッド500Aのフローチャート図である。 [0019]プロセス間通信が発生し得る環境の図である。
[0020] 本明細書に記載する実施形態では、フロントエンドコンパイラがソースコードを中間コードにコンパイルするシステムについて説明する。中間コードは後でバイナリコードに変換することができる。ソースコードはコントラクトを含む。実行スコープのランタイムにおいてこのコントラクトに遭遇した場合、その実行スコープの以降の実行は、コントラクトに関連付けられた述部が真であるか否かを条件とする。述部が真ではない場合、実行スコープは実行されなくなる。例えば、実行スコープが1つのプログラムであったと仮定すると、このプログラムは内部のエラー回復ロジックを実行することなく中断する。任意選択により外部のエラー回復ロジックを実行してもよい。
[0021] フロントエンドコンパイラはコントラクトを保持するように動作し、その結果、コントラクトはコントラクトの意味解析によって引き続き理解され得るような意味構造を維持する。それゆえ、コントラクトは、中間コードに作用する静的解析ツールによって理解され得る。このような静的解析ツールは、バックエンドコンパイラ、リファクタリングツール、検証ツール、自動化ドキュメンテーションジェネレータなどを含んでもよい。
[0022] 図1を用いて、コンピューティングシステムの導入的検討を行う。次に図2〜図6を用いて、例示的システムおよびその例示的動作について上記の順に説明する。
[0023] コンピューティングシステムは、現代においてますます多様な形態をとりつつある。コンピューティングシステムには、例えば、ハンドヘルドデバイス、電気製品、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散コンピューティングシステム、さらに、従来ではコンピューティングシステムと見なされなかった装置までもが含まれる。本記載および特許請求の範囲における「コンピューティングシステム」という用語は広義に定義され、少なくとも1つの実体ある物理プロセッサと、プロセッサにより実行可能なコンピュータ実行可能命令を保持できる実体ある物理メモリとを含む、任意のデバイスもしくはシステム(またはこれらの組み合わせ)を含んでいる。このメモリはいかなる形態をとってもよく、コンピューティングシステムの性質および形態に依存しても構わない。コンピューティングシステムはネットワーク環境に分散化されてもよいし、複数のコンピューティングシステムをその構成要素として含んでもよい。
[0024] 図1に示すように、コンピューティングシステム100は、最も基本的な構成において、少なくとも1つの処理装置102とコンピュータ可読媒体104とを含む。コンピュータ可読媒体104は、概念的に、揮発性、不揮発性、または両者の何らかの組み合わせである物理システムメモリを含むものと考えられる。コンピュータ可読媒体104はまた、概念的に不揮発性大容量記憶装置を含む。コンピューティングシステムが分散化されている場合、処理、記憶および/または格納の各機能も分散化され得る。
[0025] 本明細書で使用する「実行可能モジュール」または「実行可能コンポーネント」という用語は、このコンピューティングシステム上で実行可能なソフトウェアオブジェクト、ルーティング、またはメソッドを指すことがある。本明細書に記載する様々なコンポーネント、モジュール、エンジン、およびサービスは、このコンピューティングシステム上で実行されるオブジェクトまたはプロセスとして(例えば、個別のスレッドとして)実装され得る。このような実行可能モジュールは、タイプセーフが強制され、かつ、プロセスがその固有のメモリオブジェクトに割り当てられるような、管理された環境下で実行される場合、マネージドコードであり得る。このような実行可能モジュールは、CまたはC++などのネイティブコードで記述されている実行可能モジュールである場合、アンマネージドコードでもあり得る。
[0026] 以下の記載では、実施形態を、1つまたは複数のコンピューティングシステムにより実行される動作に関して説明する。このような動作がソフトウェアに実装される場合、この動作を実行する関連コンピューティングシステムの1つまたは複数のプロセッサは、コンピュータ実行可能命令を実行したことに応答してコンピューティングシステムの演算を命令する。例えば、このようなコンピュータ実行可能命令は、1つのコンピュータプログラム製品を成す1つまたは複数のコンピュータ可読媒体上に具現化することができる。このような演算の一例として、データの操作が挙げられる。コンピュータ実行可能命令(および操作されたデータ)は、コンピューティングシステム100のメモリ104に格納することができる。コンピューティングシステム100はまた、コンピューティングシステム100が、例えばネットワーク110を介して、他のプロセッサと通信できるようにするための通信チャネル108を含んでもよい。
[0027] 本明細書に記載する実施形態は、以下にさらに詳細に検討するように、例えば、1つまたは複数のプロセッサおよびシステムメモリなどのコンピュータハードウェアを含む専用コンピュータまたは汎用コンピュータを備えるか、または利用できる。本明細書に記載する実施形態はまた、コンピュータ実行可能命令および/またはデータ構造を搬送または格納するための、物理的なコンピュータ可読媒体および他のコンピュータ可読媒体を含む。このようなコンピュータ可読媒体は、汎用コンピュータシステムまたは専用コンピュータシステムによりアクセスすることができる、いかなる利用可能な媒体であってもよい。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、物理的記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、本発明の実施形態は、限定ではなく例示として、少なくとも2つの明らかに異なるタイプのコンピュータ可読媒体、すなわちコンピュータ記憶媒体および伝送媒体を備えることができる。
[0028] コンピュータ記憶媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、またはコンピュータ実行可能命令もしくはデータ構造の形式での所望のプログラムコード手段を格納するために使用することができ、かつ、汎用コンピュータまたは専用コンピュータによりアクセスすることができる、他の任意の実体ある記憶媒体を含む。
[0029] 「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子デバイスの間で電子データの移送を可能にする1つまたは複数のデータリンクとして定義される。情報が、ネットワークまたは別の通信接続(有線、無線、または有線もしくは無線の組み合わせのいずれか)を介してコンピュータに転送または提供されるとき、コンピュータは、その接続を伝送媒体と適切に見なす。伝送媒体は、コンピュータ実行可能命令またはデータ構造の形式での所望のプログラムコード手段を搬送または移送するために使用することができ、かつ、汎用コンピュータまたは専用コンピュータによりアクセスすることができる、ネットワークおよび/またはデータリンクを含むことができる。上記のものの組み合わせもまた、コンピュータ可読媒体の範囲内に含めるべきである。
[0030] さらに、コンピュータ実行可能命令またはデータ構造の形式でのプログラムコード手段は、種々のコンピュータシステムコンポーネントに到達するとすぐに、伝送媒体からコンピュータ記憶媒体へ自動的に転送され得る(逆もまた同様)。例えば、ネットワークまたはデータリンクを介して受け取ったコンピュータ実行可能命令またはデータ構造を、ネットワークインターフェースコントローラ(「NIC」など)内のRAMにバッファリングすることが可能であり、そして最終的にはコンピュータシステムRAMへ、および/またはコンピュータシステムにおける低揮発性コンピュータ記憶媒体へ転送することが可能である。したがって、コンピュータ記憶媒体は、伝送媒体も(または、さらには伝送媒体を主として)利用するコンピュータシステムコンポーネントに含めることができると理解すべきである。
[0031] コンピュータ実行可能命令は、例えば、プロセッサで実行される際に汎用コンピュータ、専用コンピュータ、または専用処理装置に特定の機能または機能群を実行させる命令およびデータを備える。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式の命令、またはさらにはソースコードであってもよい。本主題は、構造的特徴および/または方法論的な動作に特有の言語で記載されているが、添付の特許請求の範囲に定義される主題は上述の特徴または動作に必ずしも限定されないと理解すべきである。むしろ、記載された特徴および動作は、特許請求の範囲を実施する例示的形態として開示するものである。
[0032] 当業者であれば理解するであろうが、本発明は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家電製品またはプログラム可能な家電製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ページャ、ルータ、スイッチなどを含む、多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境において実施できる。本発明はまた、ネットワークを介してリンクされる(有線データリンク、無線データリンク、または有線データリンクおよび無線データリンクの組み合わせのいずれかにより)、ローカルコンピュータシステムおよびリモートコンピュータシステムの両方がタスクを実行する分散システム環境において実施されてもよい。分散システム環境では、プログラムモジュールを、ローカルの記憶装置およびリモートの記憶装置の両方に配置してもよい。
[0033] 図2は、コンパイラ210を備えるシステム200を示す。コンパイラ210は、例えば、コンピューティングシステム100を使用して動作する。例として、コンピューティングシステム100は、1つのコンピュータプログラム製品を構成する1つまたは複数のコンピュータ可読記憶媒体に格納されたコンピュータ実行可能命令にアクセスできる。コンピューティングシステム100は、プロセッサ102を使用してこれらのコンピュータ実行可能命令を実行することで、コンピューティングシステムにコンパイラ210をインスタンス化かつ/または動作させることができる。
[0034] これに応答して、コンパイラ210はソースコード201にアクセスし、中間言語コード211を生成する。中間言語コード211は、「バイナリコード」または「バイナリ」としばしば称されるマシン実行可能コードに変換しない限り、コンピューティングシステムが直接実行することはできない。しかしながら、中間言語コード211は、静的解析ツール220による静的解析が可能である。
[0035] ソースコード201は、図示したように、2つのコントラクト202Aおよび202Bを含む。ここで、3点リーダ202Cは、ソースコード内に任意の数のコントラクトが存在し得ることを示す。コントラクト202A、202B、および202Cを、これ以降、集合的に「コントラクト202」とも称する。各コントラクトは、バイナリが実際に実行されるランタイム環境において遭遇した述部が真であるか否かに応じて、実行スコープのさらなる実行を条件付ける。「実行スコープ」とは、コンパイラ210によってコンパイルされるプログラムならびにコンパイルの一環としてプログラムに渡される任意のコードとして定義される。
[0036] 例えば、コントラクトをコンポーネントの事前条件に関連付け、その場合、コンポーネントが呼び出されるときに、事前条件を評価することによりコンテキストがチェックされるようにしてもよい。事前条件が真でない場合、コンポーネントは実行されない。例えば、図3Aは、実行フロー301Aがコンポーネント310Aに到達している環境300Aを示す。コントラクト311Aは関連付けられた述部312Aを有する。述部312Aは、事前条件が満たされたか否かを判定するために検証される。述部312Aが真である場合、コンポーネント310Aのロジック313Aが実行され、実行フロー301Aは正常に継続する。しかし、述部312Aが真ではない場合、コンポーネント310Aのロジック313Aは実行されず、代わりに実行フロー301Aはフェイルファストイベントに遭遇する。
[0037] フェイルファストイベントは、実行コンテキスト(すなわち、コンパイルされたプログラム)が実行の継続を許可されていないことを意味する。エラー回復ロジックが実行される場合、このエラー回復ロジックは内部から実行コンテキストに提供されるのではない。むしろ、エラー回復ロジックは、仮に実行されたとしても、実行スコープの範囲外で実行される外部エラー回復ロジックである。
[0038] コントラクトをコンポーネントの事後条件に関連付け、その場合、コンポーネントが呼び出されるときに、コンポーネントのロジックが実行されて初めて事後条件がチェックされるようにしてもよい。例えば、図3Bは、実行フロー301Bがコンポーネント310Bに到達している環境300Bを示す。次に、コンポーネントのロジック313Bが実行される。ロジック313Bが完了した後、実行フロー301Bは、述部312Bが関連付けられたコントラクト311Bに遭遇する。この時点で、述部312Bは、事後条件が満たされたか否かを判定するために検証される。述部312Bが真である場合、実行フロー301Bはコンポーネント310Bから出て、正常に継続する。しかし、述部312Bが真ではない場合、実行フロー301Bはフェイルファストイベントに遭遇する。
[0039] 図2に戻ると、ソースコード201はまた、図示したように、3つの挙動203A、203B、および203Cを含んでいる。ここで、3点リーダ203Dは、ソースコード201内に任意の数のコントラクトが存在し得ることを示す。挙動203A、203B、203C、および203Dを、これ以降、集合的に「挙動203」とも称する。挙動は、プログラムのロジックに関連付けられた実際のアクションである。例えば、図3Aおよび図3Bを参照すると、挙動203は、実際にはコンポーネント210Aおよびコンポーネント210Bそれぞれのロジック213Aおよびロジック213Bの一部である。
[0040] コンパイラ210は、挙動203がすべて保持されるように中間言語コード211を生成する。換言すれば、中間言語コード211が後でバイナリコードに変換されるとき、このバイナリコードはこれらの挙動を引き起こすバイナリ命令を含んでいる。中間言語コード211はまた、意味的に構造化された方法でコントラクト202を含み、その結果、命令された挙動203を変更することなく、コントラクトを中間言語コード211から削除することができる。
[0041] いくつかの実施形態において、コンパイラ210は少なくともいくつかの条件を検出するように構成されており、その条件下では述部が外部から見える副作用を含んでいる。その場合、コンパイラ210は、コンパイルプロセスでエラーを送出することで、ソースコード201の作者が、外部から見える副作用を、当該の述部を含むコントラクトまたはアサーションから除去する修正を施せるようにして、外部から見える副作用を存在させない。このようにして、コンパイル後も残っているコントラクト202を、外部から見える副作用がないものとして扱えるようになる。
[0042] 事前条件であるコントラクト202は、実行可能コンポーネントの呼び出し元がコンポーネント呼び出しの前にコントラクトの意味理解を得るように、意味的に構造化されている。例えば、図3Aの場合を取り上げると、コントラクト311Aは、コンポーネント310Aの呼び出し元に意味論的にアクセス可能になる。したがって、呼び出し元は、コンポーネント310Aのアプリケーションプログラムインターフェース(API)に対する意味理解を得るのと同様に、コントラクト312Aに対する意味理解も得る。したがって、ランタイムにおいて、第2コンポーネントを呼び出す第1コンポーネントは、第2コンポーネントを呼び出す前に、まず第2コンポーネントのコントラクトが満たされるか否かを確認するチェックを行うことができる。第1コンポーネントは、コントラクトが満たされると判定した場合、呼び出しを実行できる。しかし、第1コンポーネントは、コントラクトが満たされないと判定した場合、第2コンポーネントを呼び出すとフェイルファストイベントを引き起こしてしまうため、呼び出しを控える。次いで、第1コンポーネントが代替実行パスを試行するように構成されることで、無駄なフェイルファストイベントを回避できる。
[0043] システム200はまた静的解析ツール220を含む。静的解析ツール220は、中間言語コード211内に含まれるコントラクトチェック202の実行を含む、中間言語コード211を評価するように構成されている。静的解析ツール220の様々な例を取り上げるが、このような例は相互排他的なものではない。中間言語コード211を、そこに包含されるコントラクト202を含めて静的に解析する静的解析ツール220は、複数存在し得る。
[0044] 静的アナライザ220は、例えば、コンピューティングシステム100を使用して動作する。例として、コンピューティングシステム100は、1つのコンピュータプログラム製品を構成する1つまたは複数のコンピュータ可読記憶媒体に格納されたコンピュータ実行可能命令にアクセスできる。コンピューティングシステム100は、プロセッサ102を使用してこれらのコンピュータ実行可能命令を実行することで、コンピューティングシステムに静的アナライザ220をインスタンス化かつ/または動作させることができる。
[0045] 一例として、静的アナライザは、中間言語コード211に基づきバイナリを生成するバックエンドコンパイラであってもよい。対照的に、コンパイラ210はフロントエンドコンパイラと見なすことができる。フロントエンドコンパイラはソースコードを中間言語コードに変換する。結果としての中間言語コードをバックエンドコンパイラがマシンコードに変換する。バックエンドコンパイラ220は、中間言語コード211内のコントラクト202の意味構造にアクセスして、この意味知識に基づいて任意の数の最適化を行うことができる。次に、図4Aおよび図4Bを用いて、このような最適化のいくつかを説明する。
[0046] 図4Aは、ソースコードまたは中間言語コードで表現された、考えられるコンポーネント呼び出しのチェーン400Aを示す。チェーン400Aは、事前条件として関連付けられたコントラクト411〜415をそれぞれ備える5つのコンポーネント401A〜405Aを含む。コンポーネント401Aはコンポーネント402Aを呼び出すことができるが、この呼び出しはコントラクト412が満たされているという条件で実行される。コンポーネント402Aはコンポーネント403Aを呼び出すことができるが、この呼び出しはコントラクト413が満たされているという条件で実行される。コンポーネント403Aはコンポーネント404Aを呼び出すことができるが、この呼び出しはコントラクト414が満たされているという条件で実行される。コンポーネント405Aも同様にコンポーネント404Aを呼び出すことができるが、この呼び出しはコントラクト414が満たされているという条件で実行される。チェーン400Aは、ソースコードで表現された、したがって中間言語コード211で表現されたコントラクト202および挙動203の意味構造によって表された、可能な実行フローを示す。
[0047] バックエンドコンパイラは、中間言語を静的に解析してチェーン400Aの概念を定式化することができる。バックエンドコンパイラは、関連付けられたコンポーネントのコントラクトの述部が常に真であるか否かを判定しようと試みるために、静的解析を実行するように構成されている。この判定は、ランタイムに発生し得たことに関するバックエンドコンパイラの知識に基づいて行われる。バックエンドコンパイラは、述部が常に真であると判定した場合、コントラクトチェックを完全に削除することでバイナリを最適化することができる。
[0048] 例えば、図4Aを参照して、コンポーネント402Aが呼び出された時点で、コントラクト412に関連付けられた述部が常に真であるとバックエンドコンパイラが判定したとする。その場合、このコンパイラは、インタラクションが発生した場合、ランタイムにおけるコントラクトのチェックを不要にするバイナリを生成する。図4Bは、中間言語チェーン400Aと機能的挙動が同じであるバイナリコンポーネントチェーン400Bを示す。具体的には、中間言語コンポーネント401A〜405Aのロジックがそれぞれ対応するバイナリコンポーネント401B〜405Bによって実装される。ここで留意すべきは、バイナリコンポーネント402Bがコントラクト412をチェックしないことで、バイナリコンポーネント402Bの実行を効率化している点である。
[0049] 同様に、バックエンドコンパイラは、コンポーネント403Aが呼び出された時点で、コントラクト413に関連付けられた述部が常に真であると判定する。そのため、コントラクト413のチェックが行われることなく、対応するバイナリコンポーネント403Bが生成される。ここでもまたバイナリコンポーネント403の実行が効率化される。
[0050] バックエンドコンパイラは、コンポーネント404Aがコンポーネント403Aによって呼び出された場合、コントラクト414が満たされると判定する(すなわち、コントラクトに関連付けられた述部が満たされることを、バックエンドコンパイラが判定できる)。しかし、バックエンドコンパイラは、コンポーネント404Aがコンポーネント405Aによって呼び出された場合、コントラクト414が満たされるか否かを判定できない(すなわち、コントラクトに関連付けられた述部が真となることを、バックエンドコンパイラが検証できない)。この場合、2つのエントリポイントを持つバイナリコンポーネント404Bが作成される。片方のエントリポイント422はコントラクト414のチェックを迂回させることができ、この例ではバイナリコンポーネント403Bの適切なエントリポイントとなる。他方のエントリポイント421は、コントラクト414をチェックさせ、この例ではバイナリコンポーネント405Bの適切なエントリポイントとなる。
[0051] 静的アナライザ220はまた、フロントエンドコンパイラ210と連携して、述部に外部から見える副作用が含まれないように保証することができる。言うまでもなく、述部のランタイム評価は処理サイクルを消費するが、この評価は、通常ならあるはずの影響をコンポーネントのロジックにも、コンパイル中のプログラムの意味的に表現された挙動203にも及ぼすことがない。述部には、プログラム外の外部から識別可能な結果をもたらさない、いくつかの副次的な計算が含まれている可能性がある。しかしながら、これは、上記の記載および特許請求の範囲においては「副作用」と見なされない。外部から見える副作用が存在していないことを保証することで、プログラムは、コントラクトチェックの存在の有無にかかわらず、外部から識別可能な同じ挙動で実行されるようになる。コントラクトチェックは、プログラムの作成および試験のために含まれていることがしばしばであっても、プログラムの出荷前にたいてい削除されるので、これは有用である。したがって、試験用のプログラムの挙動は、プログラム出荷後の挙動と同じになる。
[0052] 静的アナライザ220は、リファクタリングツール、検証ツール、自動化ドキュメンテーションジェネレータであってもよく、および/または中間言語コード211内で意味的に表現されたコントラクト202を使用して、中間言語コード211に対し他の任意のタイプの静的解析を実行してもよい。例えば、静的アナライザ220は、コントラクトに関連付けられた述部が常に偽となると判定して、プログラムにバグが含まれていることをプログラマに対して警告してもよい。
[0053] このように、本明細書に記載する原則は、コントラクトを含む中間言語コードに対し強力かつインテリジェントな静的解析を可能にし、また、あるコンポーネントが別のコンポーネントを呼び出す際にバイナリに対する顕著な最適化を可能にする。これらの原則は、1つのプロセスが別のプロセスからコンポーネントを呼び出す場合にまで、その適用範囲を広げることができる。
[0054] 図5Aおよび図5Bはそれぞれ、プロセス間通信を実現するメソッド500Aおよびメソッド500Bのフローチャートを示す。メソッド500Aは、実行される場合、図5Bのメソッド500Bに先行して実行される。メソッド500B(および実行される場合のメソッド500A)は、プロセス間呼び出しのチャネル内に概念的に常駐する抽象化レイヤによって遂行され得る。図6は、プロセス間通信が発生し得る環境600を示す。したがって、図6の環境600を頻繁に参照しながら、図5Aおよび図5Bについて説明する。
[0055] 図5Aのメソッド500Aは、第1プロセス内の第1コンポーネントが第2プロセス内の第2コンポーネントとのプロセス間通信を要求したことの検出(動作501)に応答して実行される。例えば、図6の環境600において、プロセス611内のコンポーネント601がプロセス612内のコンポーネント602に通信を送出すると仮定する。すると、プロセス611内のチャネルコンポーネント621によってメソッド500Aが実行される一方で、プロセス612内のチャネルコンポーネント622によってメソッド500Bが実行される。メソッド500Aおよびメソッド500Bの作用は、コンポーネント601およびコンポーネント602から隠される。コンポーネント601およびコンポーネント602からは、通信がプロセス間チャネル610によって実現されているようにしか見えない。
[0056] プロセス間通信が第1コンポーネント601から送出される旨の通知(図5Aの動作501)に応答して、チャネルコンポーネント621は、継続実行についてのコントラクトが満たされているか否かを検証する(図5Aの分岐記号502)。コントラクトには、安全なプロセス間通信を可能にするように意図された述部が含まれている。コントラクトが満たされていない場合(分岐記号502における「いいえ」)、チャネルコンポーネント621は通信を抑制する(動作503)。逆に、コントラクトが満たされている場合(分岐記号502における「はい」)、チャネルコンポーネント621は、ターゲットプロセス内のチャネルコンポーネント622に対しプロセス間メッセージを送出する(動作504)。
[0057] 図5Bは、メソッド500Aが既に実行されたかどうかにかかわらず、ターゲットチャネルコンポーネントが到着メッセージを処理する、メソッド500Bのフローチャートを示す。チャネルコンポーネント622は、まずプロセス間メッセージを受け取る(動作511)。すると、チャネルコンポーネント621は、継続実行についてのコントラクトが満たされているか否かを検証する(図5Bの分岐記号512)。この場合もまた、コントラクトには、安全なプロセス間通信を可能にするように意図された述部が含まれている。
[0058] コントラクトが満たされていない場合(分岐記号512における「いいえ」)、チャネルコンポーネント622は通信を抑制し(動作513)、さらに、今後においてプロセス612と通信するプロセス611のいかなる権限も終了させることができる。コントラクトが満たされていないとターゲットチャネルコンポーネント622が判定したからには、呼び出し元プロセス611がメソッド500Aを実行しなかった可能性が高い。ゆえに、このプロセスは安全な通信に対応していないと思われるため、プロセス611とプロセス612との間のいかなる通信の終了も正当化され得る。このように、フェイルファストを引き起こす可能性があるいかなる欠陥も、その欠陥を含むプロセス内に封じ込めることができる。逆に、コントラクトが満たされている場合(分岐記号512における「はい」)、プロセス間通信はターゲットコンポーネント602に渡される(動作514)。
[0059] このように、中間言語コードにおけるコントラクトの意味構造の保持。さらに、このような意味構造の使用を通じたバイナリへのコンパイルの最適化について説明した。
[0060] 本発明は、その精神または本質的特徴から逸脱することなく、他の特定の形態で実現することができる。上述の実施形態は、すべての態様において限定的ではなく例示的なものと解釈すべきである。したがって、本発明の範囲は、上記の記載ではなく、むしろ添付の特許請求の範囲によって示される。特許請求の範囲と均等の意味および範囲内での変更は、すべて特許請求の範囲の範囲内に包含される。

Claims (20)

  1. 1または複数のハードウェアプロセッサと、前記1または複数のハードウェアプロセッサによって実行され得るコンピュータ実行可能命令を有する1または複数のハードウェア記憶装置とを備えたシステムであって、前記コンピュータ実行可能命令は中間言語プログラムコードの静的解析の一環として少なくとも以下の、
    前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
    前記複数のコンポーネントの特定のコンポーネントに対応する特定のコントラクトの特定の述部が、前記特定のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
    前記複数のコンポーネントのための実行可能コードを1または複数の実行可能バイナリ内に生成することであって、前記特定のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの1または複数の他のコンポーネントの第1のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトのチェックを迂回させることができる第1のエントリポイントを有し、前記複数のコンポーネントの1または複数の他のコンポーネントの第2のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトをチェックさせる第2のエントリポイントを有する実行可能コードの部分を生成することを含む、ことと、
    を実行するようシステムを構成する、システム。
  2. 前記特定のコンポーネントは前記システムに挙動を実行するよう命令し、前記特定のコントラクトは、前記挙動を変更することなく前記特定のコントラクトのチェックを削除できるように、意味的に構造化されている、請求項1に記載のシステム。
  3. 各コントラクトが、前記対応するコンポーネントのインターフェースを使用して、前記対応するコンポーネントの呼び出し元に意味的にアクセス可能である、請求項1に記載のシステム。
  4. コントラクトが対応するコンポーネントの事前条件である、請求項1に記載のシステム。
  5. コントラクトが対応するコンポーネントの事後条件である、請求項1に記載のシステム。
  6. ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記システムは、前記特定のコンポーネントの前記実行スコープの外で外部回復コードを実行するよう構成される、請求項1に記載のシステム。
  7. ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記システムは、前記特定の述部が真ではないことに応答して回復コードが実行されないように、前記特定のコンポーネントの呼び出しを控えるよう構成される、請求項1に記載のシステム。
  8. 前記システムはまた、述部が外部から見える副作用を含むような少なくともいくつかの条件を検出するように構成される、請求項1に記載のシステム。
  9. 前記システムはまた、前記1または複数の実行可能バイナリを記憶装置上に格納するように構成される、請求項1に記載のシステム。
  10. 前記システムはまた、
    前記複数のコンポーネントの別のコンポーネントに対応する別のコントラクトの別の述部が、前記別のコンポーネントのランタイムにおいて常に真であると判定し、
    前記複数のコンポーネントのための前記実行可能コードを1または複数の実行可能バイナリ内に生成するときに、前記別の述部が前記別のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記別のコンポーネントのための実行可能コードの第3の部分であって、前記別のコントラクトおよび前記別の述部に対応する実行可能コードがない、実行可能コードの第3の部分を生成するように構成される、請求項1に記載のシステム。
  11. 1または複数のハードウェアプロセッサを含むコンピュータシステムで実装される、中間言語プログラムコードの静的解析を実行するための方法であって、
    前記1または複数のハードウェアプロセッサが、前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
    前記1または複数のハードウェアプロセッサが、前記複数のコンポーネントの特定のコンポーネントに対応する特定のコントラクトの特定の述部が、前記特定のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
    前記1または複数のハードウェアプロセッサが、前記複数のコンポーネントのための実行可能コードを1または複数の実行可能バイナリ内に生成することであって、前記特定のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの1または複数の他のコンポーネントの第1のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトのチェックを迂回
    させることができる第1のエントリポイントを有し、前記複数のコンポーネントの1または複数の他のコンポーネントの第2のセットによって前記特定のコンポーネントが呼び出される場合に、ランタイムにおいて前記特定のコントラクトをチェックさせる第2のエントリポイントを有する実行可能コードの部分を生成することを含む、ことと、
    を含む方法。
  12. 前記静的解析は、リファクタリングツール、検証ツール、自動化ドキュメンテーションジェネレータの少なくとも1つによって実行される、請求項11に記載の方法。
  13. コントラクトが対応するコンポーネントの事前条件である、請求項11に記載の方法。
  14. コントラクトが対応するコンポーネントの事後条件である、請求項11に記載の方法。
  15. ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記特定のコンポーネントの前記実行スコープの外で外部回復コードが実行される、請求項11に記載の方法。
  16. ランタイムにおいて遭遇した前記特定の述部が真ではない場合、前記特定の述部が真ではないことに応答して回復コードが実行されないように、前記特定のコンポーネントの呼び出しを控える、請求項11に記載の方法。
  17. 前記1または複数のハードウェアプロセッサが、前記1または複数の実行可能バイナリを1または複数のハードウェア記憶装置上に格納することをさらに含む、請求項11に記載の方法。
  18. 前記複数のコンポーネントの別のコンポーネントに対応する別のコントラクトの別の述部が、前記別のコンポーネントのランタイムにおいて常に真であると判定することと、
    前記複数のコンポーネントのための前記実行可能コードを1または複数の実行可能バイナリ内に生成するときに、前記別の述部が前記別のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記別のコンポーネントのための実行可能コードの第3の部分であって、前記別のコントラクトおよび前記別の述部に対応する実行可能コードがない、実行可能コードの第3の部分を生成することと、をさらに含む、請求項11に記載の方法。
  19. コンピュータシステムの1または複数のハードウェアプロセッサによって実行され得るコンピュータ実行可能命令が記憶されたコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、中間言語プログラムコードの静的解析の一環として少なくとも以下の、
    前記中間言語プログラムコードにおいて複数のコンポーネントを識別することであって、各コンポーネントは異なる実行スコープを備え、対応するコントラクトを含み、各コントラクトは、前記対応する実行スコープのランタイムにおいて当該コントラクトに遭遇した場合、前記コントラクトの述部が真であるかを、前記対応する実行スコープの以降の実行の条件とする、ことと、
    前記複数のコンポーネントの第1のコンポーネントに対応する第1のコントラクトの第1の述部が、前記複数のコンポーネントの前記第1のコンポーネントのランタイムにおいて常に真であると判定することと、
    前記複数のコンポーネントの第2のコンポーネントに対応する第2のコントラクトの第2の述部が、前記複数のコンポーネントの前記第2のコンポーネントのランタイムにおいて常に真とは限らないと判定することと、
    前記複数のコンポーネントのための実行可能コードを1または複数の実行可能バイナリ内に生成することであって、
    前記複数のコンポーネントの前記第1のコンポーネントのための前記実行可能コードを生成するときに、前記第1の述部が前記複数のコンポーネントの第1のコンポーネントのランタイムにおいて常に真であると判定されたことに基づいて、前記第1のコントラクトおよび前記第1の述部に対応する実行可能コードがない、実行可能コードの第1の部分を生成すること、および
    前記複数のコンポーネントの前記第2のコンポーネントのための前記実行可能コードを生成するときに、前記複数のコンポーネントの1または複数の他のコンポーネントの第1のセットによって前記第2のコンポーネントが呼び出される場合に、ランタイムにおいて前記第2のコントラクトのチェックを迂回させることができる第1のエントリポイントを有し、前記複数のコンポーネントの1または複数の他のコンポーネントの第2のセットによって前記第2のコンポーネントが呼び出される場合に、ランタイムにおいて前記第2のコントラクトをチェックさせる第2のエントリポイントを有する実行可能コードの第2部分を生成することを含む、ことと、
    を実行するよう前記コンピュータシステムを構成する、コンピュータ可読記憶媒体
  20. ランタイムにおいて遭遇した前記第2の述部が真ではない場合、前記コンピュータシステムは、前記第2の述部が真ではないことに応答して回復コードが実行されないように、前記複数のコンポーネントの第2のコンポーネントの呼び出しを控えるよう構成される、請求項19に記載のコンピュータ可読記憶媒体
JP2016501182A 2013-03-14 2014-03-11 コントラクトのためのオペレーティングシステムサポート Active JP6401235B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/829,561 2013-03-14
US13/829,561 US9286039B2 (en) 2013-03-14 2013-03-14 Operating system support for contracts
PCT/US2014/023258 WO2014159373A2 (en) 2013-03-14 2014-03-11 Operating system support for contracts

Publications (3)

Publication Number Publication Date
JP2016511484A JP2016511484A (ja) 2016-04-14
JP2016511484A5 JP2016511484A5 (ja) 2017-03-09
JP6401235B2 true JP6401235B2 (ja) 2018-10-10

Family

ID=50884465

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016501182A Active JP6401235B2 (ja) 2013-03-14 2014-03-11 コントラクトのためのオペレーティングシステムサポート

Country Status (6)

Country Link
US (1) US9286039B2 (ja)
EP (1) EP2972828B1 (ja)
JP (1) JP6401235B2 (ja)
KR (1) KR102118236B1 (ja)
CN (1) CN105164642B (ja)
WO (1) WO2014159373A2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9841955B2 (en) * 2016-01-26 2017-12-12 Enterpriseweb Llc Unified operating system for distributed computing
US11755382B2 (en) * 2017-11-03 2023-09-12 Coherent Logix, Incorporated Programming flow for multi-processor system
CN107908405A (zh) * 2017-11-17 2018-04-13 苏州蜗牛数字科技股份有限公司 代码静态审核装置及方法
CN110287089B (zh) * 2019-05-07 2023-02-17 华东师范大学 一种基于中间格式及smt技术的微内核ipc验证方法
CN111768187A (zh) * 2020-08-31 2020-10-13 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质
CN111770206B (zh) * 2020-08-31 2020-12-29 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质
US12111957B2 (en) 2021-06-08 2024-10-08 Microsoft Technology Licensing, Llc Software provenance validation
KR102695546B1 (ko) * 2021-12-21 2024-08-13 단국대학교 산학협력단 스마트 컨트랙트와 서면 계약서 간의 동등성을 증명하는 방법 및 장치

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6601192B1 (en) 1999-08-31 2003-07-29 Accenture Llp Assertion component in environment services patterns
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
US7143373B2 (en) 2004-10-14 2006-11-28 Synopsys, Inc. Method and apparatus for evaluating and debugging assertions
JP2006139413A (ja) * 2004-11-10 2006-06-01 Hitachi Ltd プログラム、プログラムコードの合理化方法、プログラムコードの生成方法、プログラムコード、及び情報処理装置
US7987456B2 (en) * 2006-01-24 2011-07-26 Microsoft Corporation Qualitatively annotated code
US7934207B2 (en) 2006-12-19 2011-04-26 Microsoft Corporation Data schemata in programming language contracts
US8250524B2 (en) 2007-12-21 2012-08-21 Microsoft Corporation Contract programming for code error reduction
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8930913B2 (en) * 2010-09-28 2015-01-06 Microsoft Corporation Intermediate representation construction for static analysis

Also Published As

Publication number Publication date
KR20150130298A (ko) 2015-11-23
CN105164642B (zh) 2019-02-19
KR102118236B1 (ko) 2020-06-02
EP2972828A2 (en) 2016-01-20
WO2014159373A3 (en) 2014-11-20
JP2016511484A (ja) 2016-04-14
CN105164642A (zh) 2015-12-16
WO2014159373A2 (en) 2014-10-02
US9286039B2 (en) 2016-03-15
EP2972828B1 (en) 2019-09-04
US20140282448A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
JP6401235B2 (ja) コントラクトのためのオペレーティングシステムサポート
US10599551B2 (en) Automatically detecting distributed concurrency errors in cloud systems
CN102279790B (zh) 分布式调试方法和系统
Deligiannis et al. Asynchronous programming, analysis and testing with state machines
US10545852B2 (en) Diagnostics of state transitions
US9104781B2 (en) Obtaining metadata set by imperative statement
Xu et al. Python predictive analysis for bug detection
Rimsa et al. Practical dynamic reconstruction of control flow graphs
US10185647B2 (en) Debugging remote vertex code on test machine
US9841960B2 (en) Dynamic provision of debuggable program code
US8856763B2 (en) Compiler optimization based on collectivity analysis
Fortier et al. Dyninka: a FaaS framework for distributed dataflow applications
US9710360B2 (en) Optimizing error parsing in an integrated development environment
WO2022035476A1 (en) Representing asynchronous state machine in intermediate code
Gómez Balancing performance and reliability in software components
Ren Achieving Scalable and Reliable Non-Intrusive Failure Reproduction in Distributed Systems by Enhancing the Event Chaining Approach
Cui et al. SmallRace: Static Race Detection for Dynamic Languages-A Case on Smalltalk
CN116680688A (zh) 设备控制指令的检测方法、装置、电子设备及存储介质
Arora JShrink: Debloating Modern Java Applications
De Borger et al. A generic solution for agile run-time inspection middleware
Zhang et al. The Exception Handling Pattern in the Architectural Layers Using Aspect-Oriented Programming
Roper et al. Application‐specific thread schedulers for internet server applications
Nakata et al. Fault model of foreign function interface across different domains
De Palma¹ et al. Artifacts EAPLS EAPLS Available Evaluated Artifacts V1. 1 Functional V1. 1 An OpenWhisk Extension for Topology-Aware Allocation Priority Policies
Olsson Application Migration using Java in a Distributed Automotive System

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A529

Effective date: 20150909

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170203

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180427

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180814

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180906

R150 Certificate of patent or registration of utility model

Ref document number: 6401235

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250