JP2009528589A - 適応コンパイルコード - Google Patents

適応コンパイルコード Download PDF

Info

Publication number
JP2009528589A
JP2009528589A JP2008556331A JP2008556331A JP2009528589A JP 2009528589 A JP2009528589 A JP 2009528589A JP 2008556331 A JP2008556331 A JP 2008556331A JP 2008556331 A JP2008556331 A JP 2008556331A JP 2009528589 A JP2009528589 A JP 2009528589A
Authority
JP
Japan
Prior art keywords
code
readable medium
execution environment
compiled
module
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.)
Pending
Application number
JP2008556331A
Other languages
English (en)
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 JP2009528589A publication Critical patent/JP2009528589A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

マネージド実行環境において、アプリケーション、プログラム、関数または他のコードアセンブリが、欠落している型または型メンバに関連付けたモジュールに対する参照を呼び出すのが不可避になる点に到達するまで、エラーを延期することができる。

Description

アプリケーション、プログラム、関数、ならびに他のプログラム可能コードアセンブリおよび実行可能コードアセンブリは一般にサードパーティ(すなわち、「カスタマー」)利用向けに書かれる。従って、サードパーティの使用シナリオが可能でありサードパーティの期待を満たすように効率的なコードが書かれる。しかしながら、既存のプラットフォーム上で実行するよう設計されたアプリケーション、プログラム、関数または他のコードアセンブリを古い、または異なるバージョンのプラットフォーム上で実行することを試みるとき、上記の期待を満たすことは難しい場合がある。
アプリケーション、プログラム、関数または他のコードアセンブリを、それを生成した古い、または異なるバージョンのプラットフォーム上で実行することを試みるとき、欠落した型または型メンバは、その欠落した型または型メンバへの参照呼出しが必然となる点にアプリケーション、プログラム、関数または他のコードアセンブリの実行が達するまで延期される。
本発明では以下の図面を参照する。
適応コードをコンパイルし、その適応コンパイルコードを実行するツール、システム、および方法を本明細書で説明する。さらに、少なくとも1つの適応コンパイルモジュールを有する1つまたは複数のアプリケーション、プログラム、関数、または他のコードアセンブリをコンパイルすることおよび実行することのうち少なくとも1つに関する説明は、関連するエラーを延期するために利用可能なツール、システム、プロセス、命令、技術、およびルーチンに関することができる。すなわち、前述のツール、システム、プロセス、命令、技術、およびルーチンを利用してコンパイルコード内の参照に関連付けた1つまたは複数のエラーを、その参照呼び出しが少なくとも統計的に必然であるまで延期することができる。前述のツール、システム、プロセスをネットワーク環境内の1つまたは複数の装置、またはノードで実装することができる。
本明細書で説明する「モジュール」は、共通の物理および/または論理リソースを利用可能なメソッド、クラス、DLL(dynamic link libraries)、フレームワーク等の別個のエンティティを指すことができる。
本明細書で説明する「アセンブリ」は、コードの展開単位を指すことができる。
図1は、適応コードをコンパイルし、少なくとも1つの適応コンパイルモジュールを有する1つまたは複数のアプリケーション、プログラム、関数または他のコードアセンブリを実行するための技術の例を実装可能なネットワーク環境の例100を示す。しかしながら、上記の技術の例はネットワーク環境に限定されない。本明細書で説明するように上記の技術は、適応コンパイルコード120に関連付けたツール、方法(例えば、技術)、およびシステムを含むことができるがこれらに限らない。図1では、クライアント装置105、サーバ装置110、および「他の」装置115をネットワーク125経由で互いに通信するように接続することができ、さらに、クライアント装置105、サーバ装置110、および「他の」装置115のうち少なくとも1つは前述の技術を実装することができる。
クライアント装置105は様々な公知のコンピューティング装置のうち少なくとも1つを表すことができる。そのコンピューティング装置には、適応コンパイルコード120の生成および利用のうち少なくとも1つに対する技術の例を実装できるデスクトップPC(パーソナルコンピュータ)、ワークステーション、メインフレームコンピュータ、インターネット機器、セットトップボックス、またはゲームコンソールが含まれる。クライアント装置105はさらに、移動体(すなわち、携帯)電話、PDA(携帯情報端末)、ラップトップコンピュータ等を含む有線および/または無線リンクによりネットワーク125と関連付けできる少なくとも1つの装置を表すことができる。さらに、クライアント装置105は上述のクライアント装置を様々な個数および/または組合せで表すことができる。「他の」装置115をクライアント装置105の上記例のうち任意のもので具現化することもできる。
サーバ装置110は、適応コンパイルコード120のコンパイルおよび利用のうち少なくとも1つに対する少なくとも1つの実装に従って、任意の様々なデータおよび/または機能性をクライアント装置105または「他の」装置115に提供できる任意の装置を表すことができる。データを公的に利用可能とするか、または制限することができる。例えばデータを、ある特定のユーザにのみ制限するか、または適切な受信料またはライセンス料が支払われた場合にのみ制限することができる。サーバ装置110はネットワークサーバ、アプリケーションサーバ、ブレードサーバ、またはそれらの任意の組合せのうち少なくとも1つであることができる。一般に、サーバ装置110はコンテンツ源でありうる任意の装置を表すことができ、クライアント装置105は上記コンテンツをネットワーク125経由またはオフラインのいずれかにより受信できる任意の装置を表すことができる。しかしながら、本明細書で説明する実装の例によると、クライアント装置105およびサーバ装置110は交互にネットワーク環境100内の送信ノードまたは受信ノードであることができる。「他の」装置115を、サーバ装置110の上記例のうち任意のものにより具現化してもよい。
「他の」装置115は、本明細書で説明する1つまたは複数の技術の例に従って適応コンパイルコード120をコンパイルおよび/または利用できる任意のさらなる装置を表すことができる。すなわち「他の」装置115は、コードをコンパイルできるかまたはコンパイルコードを受信できる装置を表すことができる。そのコードに対して、コンパイルコード内の参照に関連付けた1つまたは複数のエラーを、その参照呼び出しが少なくとも統計的に必然であるまで延期することができる。従って、「他の」装置115は、自身の上にオペレーティングシステム、インタプリタ、コンバータ、コンパイラ、またはランタイム実行環境のうち少なくとも1つを有するコンピューティング装置または処理装置であることができる。これらの例は決して限定的であるとは意図されず、従ってそのように解釈すべきではない。
ネットワーク125は、有線および/または無線ネットワークを含むことができる様々な従来のネットワークトポロジおよびネットワークタイプのうち任意のものを表すことができる。ネットワーク125はさらに、パブリックおよび/または専用プロトコルを含む様々な従来のネットワークプロトコルのうち任意のものを利用することができる。ネットワーク125は例えば、802.11システムのようなインターネットならびに1つまたは複数のローカルエリアネットワーク(個別に「LAN」とも呼ばれる)、大規模な、広域ネットワーク(すなわち、「WAN」)のうちの少なくとも一部、またはBluetoothのようなパーソナルエリアネットワーク(すなわち、PAN)を含むことができる。
装置105、110、および115のうち少なくとも1つにおけるコンピュータアーキテクチャは一般に、ハードウェアおよびソフトウェアの観点でのコンピューティングプラットフォームを定義している。コンピューティング装置に対するソフトウェアは機能に基づいてグループに分類されている。そのグループは、ハードウェア抽象化層(または、「HAL」とも呼ばれる)、オペレーティングシステム(または「OS」とも呼ばれる)、およびアプリケーションを含むことができる。
ランタイム実行環境はOSおよびアプリケーション、プログラム、関数、または他のコードアセンブリの間に存在することができる。ランタイム実行環境は、アプリケーション、プログラム、関数、または他のコードアセンブリが任意の1つまたは複数の処理装置105、110および115上の特定のタスクを実行できる空間の役割を果たすことができる。より詳細には、ランタイム実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、および移動体処理/通信装置を含む増大する範囲の処理装置105、110、105上でのアプリケーション、プログラム、関数、または他のコードアセンブリの実行の信頼性を、上記装置上で実行されているアプリケーションに抽象化およびサービスの層を提供することにより、およびアプリケーション、プログラム、関数、または他のコードアセンブリにそのメモリ管理および構成を含む能力を提供することにより、拡張することができる。
ランタイム実行環境は、プログラミングプラットフォームおよび実行プラットフォームのうち少なくとも1つとしての役割を果たすことができる。プログラミングプラットフォームとして、ランタイム実行環境は、複数のコンピューティング言語のうち1つで書くことができる1つまたは複数のターゲットアプリケーション、プログラム、関数、または他のコードアセンブリを、中間言語(以降、「IL」)またはバイトコードにコンパイルすることができる。ILは一般にプラットフォーム独立であり、中央演算装置(以降「CPU」)がILを実行する。実際、ILは多数のCPU機械語よりも上位の言語である。
実行プラットフォーム、ランタイム実行環境はコンパイルしたILをネイティブ機械命令に解釈することができる。ランタイム実行環境はインタプリタまたはコンパイラ(例えば、「ジャストインタイム」、または「JIT」コンパイラ)のいずれかを利用して上記命令を実行することができる。それとは関係なく、ネイティブ機械命令を次いでCPUにより直接実行することができる。ILはCPU独立であるので、ILを任意のCPUプラットフォーム上で、そのCPUプラットフォーム上で実行されているOSが適切なランタイム実行環境をホストする限り、実行することができる。
または、アプリケーション、プログラム、関数、または他のコードアセンブリの少なくとも一部を事前コンパイルして、ランタイム実行環境内に1つまたは複数のネイティブイメージファイルとしてロードすることができ、従ってコンパイルに必要なCPU消費を回避することができる。事前コンパイルした部分は、ネイティブプラットフォームの実行形式ではなくIL形式で分散したソフトウェアモジュール(例えば、アセンブリ、メソッド、または型)であると効率的である。上記の事前コンパイルしたILのソースを、非マネージド実行環境あるいは、装置105、110、および115のうち同一または別個の上のランタイム実行環境の別個の実装のいずれかに配置することができる。ソースは、事前コンパイルしたILが対応するアプリケーション、プログラム、メソッド、関数、または他のコードアセンブリに対するインストール中またはインストール前に、事前コンパイルしたILを展開することができる。
それとは関係なく、適応コンパイルコード120をコンパイルおよび/または利用する技術を実装可能なランタイム環境の例には、Visual Basicランタイム環境、例えば、Java(登録商標)ルーチンの実行に使用されるJava(登録商標)仮想マシンランタイム環境、または例えばMicrosoft .NET(登録商標)アプリケーションをルーチンの実行および呼び出し前に機械語にコンパイルするCLR(Common Language Runtime)が含まれる。しかしながら、このランタイム環境の一覧は例に過ぎない。本明細書で説明する技術の例はこれらのマネージド実行環境のみには限定されない。より詳細には、実装の例はマネージド実行環境のみには限定されない。なぜならば、1つまたは複数の例をテスト環境および/またはアンマネージド実行環境内部で実装できるからである。
ILにコンパイルしたアプリケーション、プログラム、関数、または他のコードアセンブリを「マネージドコード」と称することができ、そのためランタイム実行環境を代替的に「マネージド実行環境」と称することができる。実行にランタイム実行環境を利用しないコードをネイティブコードアプリケーションと称することができる。
図2はラインタイム実行環境200の例を示す。ラインタイム実行環境200では、適応コード120(図1を参照)をコンパイルし、少なくとも1つの適応コンパイルモジュールを有する1つまたは複数のアプリケーション、プログラム、関数、または他のコードを実行する技術の例を実装することができる。
図2のモジュールの説明では、ランタイム実行環境200の異なるコンポーネントにより実施されているとして様々な動作を説明することができる。図2は図3および4の説明でも参照することができる。特定のコンポーネントに関して説明する動作を、その特定のコンポーネント自体により、ランタイム実行環境200の別のコンポーネントと協調するその特定のコンポーネントにより、または非マネージド実行環境からの処理コンポーネントと協調するその特定のコンポーネントにより実行することができる。従って、本明細書内の説明は実装の例に関し、決して限定しようとするものではない。
従って、ランタイム実行環境200は、アプリケーションプログラミングまたはアプリケーション実行プラットフォームのいずれかに対するマネージドコードの実行を促進することができる。マネージドコードをアプリケーション開発技術のコアセットの一部と考えることができ、さらにランタイム実行環境200上の実行向けにコンパイルされて、対応するサービスをコンピューティング装置プラットフォームに提供するコードと見なすことができる。加えて、ランタイム実行環境200はマネージドコードを解釈レベルで命令に変換することができる。その命令をプロキシして、次いでプロセッサにより実行することができる。ランタイム実行環境200に対するフレームワークはクラスライブラリも提供する。クラスライブラリを、マネージドアプリケーションに対するソフトウェアビルディングブロックと見なすことができる。
さらなる実装の例によると、ランタイム実行環境200は少なくとも部分的な機能性を提供することができる。その機能性をカーネルに要求することができ、その機能性は装置105、110、および115のうち特定のものに対するリソース制約に依存してコンピューティング装置プラットフォームにおいて不足しているかまたは不足していない可能性がある。従って、ランタイム実行環境200の少なくとも1つの例は、入力/出力(以降、「I/O」と呼ぶ)ルーチン管理、メモリ管理、コンパイル、およびサービスルーチン実行を実装することができる。従って、ランタイム実行環境200はI/Oモジュール205、コンパイラ210、ローダ215、メモリ管理コンポーネント220(または、仮想マシンとも呼ばれる)、およびサービスルーチンマネージャ225を含むことができる。これらのコンポーネントを以下で詳細に説明する。これらのコンポーネントは例として提供したに過ぎず、様々な組合せおよび構成でのランタイム実行環境200の例で実装することができる。上記の例はランタイム実行環境の任意の特定の実装に限定しようとするものではなく、限定するものと推論すべきではない。
ランタイム実行環境200のI/Oモジュール205は、アプリケーションプログラミングプラットフォームまたはアプリケーション実行プラットフォームのいずれかに関連付けたデータ源(すなわち、プロセッサおよび周辺装置)に対する非同期アクセスを提供することができる。より詳細には、I/Oモジュール205はランタイム実行環境200に、堅牢なシステムスループットと、I/O要求の発生元であるコードのストリームライン性能を提供することができる。
コンパイラ210はランタイム実行環境200内部のモジュールを指すことができる。そのモジュールは、コンパイルしたILをネイティブ機械命令に解釈して、例えば実行モジュール230によりランタイム実行環境200内で実行、またはCPUにより非マネージド実行環境で実行することができる。
ローダ215はアセンブリマネージャを指すことができる。アセンブリマネージャを起動して、必要に応じてアセンブリを発見および読み出すことができる。ローダ215を実行環境200内に配置することができるが、非マネージド実行環境の少なくとも1つの実装(すなわち、OS)はその中にローダ215を含むことができる。ローダ215は、ランタイム実行環境200にロードするために、事前コンパイルしたILを展開中またはインストール中に収集することができる。従って、ランタイム実行環境200の少なくとも1つの代替的な実装に従って、ローダ215は、ランタイム実行環境200への、事前コンパイルしたILのエントリポイントの役割を効率的に果たすことができる。
メモリ管理コンポーネント220を「ガベージコレクタ」と見なすことができる。ガベージコレクションをマネージドコード実行環境の堅牢な特徴と見なすことができる。オブジェクトがどのアプリケーションによっても使用されない場合、メモリヒープのスイープまたはスキャンの際にその特徴によりオブジェクトを自動的に解放(すなわち、割り当て解除)する。メモリ管理コンポーネント210の少なくとも1つの例では、フリーメモリヒープのスイープを線形探索として実装することができる。上記の実装は、メモリサイズが制約され、対応する装置のユーザによりスイープの完了における遅延が認識されるコンピューティング装置プラットフォームの例に適する可能性がある。
メモリ管理コンポーネント220が実装するさらなる機能には、有限揮発性RAM(すなわち、メモリヒープ)記憶の1つまたは複数の連続ブロックあるいは一連の連続メモリブロックを、コンピューティング装置プラットフォーム上で実行されているタスク間で管理すること、コンピューティング装置プラットフォーム上で実行されている少なくとも1つのアプリケーションにメモリを割り当てること、少なくとも1つのアプリケーションによる要求時にメモリの少なくとも一部を解放すること、および任意のアプリケーションが任意の他のアプリケーションに割り当てたメモリ空間に不正にアクセスすることを防止することを含めることができる。
アドミニストレータ225は、ランタイム実行環境200内部のモジュールを指すことができる。そのモジュールは、ランタイム実行環境200内のアプリケーション、プログラム、メソッド、関数または他のコードアセンブリの少なくとも一部の実行を受信、検証、および管理する役割を果たす。コンパイルした適応コード120に関連付けた技術の実装の少なくとも1つの例によると、アドミニストレータ225はランタイム実行環境220内のアプリケーション、プログラム、メソッド、関数または他のコードアセンブリの振る舞いを、その任意の実行可能部に接触または影響せずに、コンパイル時、初期実行時、またはその後のアプリケーション実行中の任意の時点で制御することができる。より詳細には、アドミニストレータ225はコンパイラ210によりコンパイルしたコード、またはローダ215によりロードしたコードに対して型マッチングを強制することができる。すなわち、アドミニストレータ225は、満足するマッチを検索するときに、少なくともコードの一部により要求した型または型のメンバを、それらの要求を満たすのに使用する型または型のメンバと比較する。上記のマッチがそれぞれの要求に対して存在しない場合、アドミニストレータ225は実行モジュール230に命令して、コンパイラ210によりコンパイルしたコードまたはローダ215によりロードしたコードの実行を、欠落した型または欠落した型のメンバに対する要求が少なくとも統計的に不可避であるまで、進めることができる。
実行モジュール230により、コンピューティング装置プラットフォームに対するマネージドコード(すなわち、コンパイルしたネイティブコード)を実行することができる。実行モジュール230を、コンパイラ210によりコンパイルしたコードまたはローダ215によりロードしたコードの実行をランタイム実行環境200内で実装可能であり、ランタイムサービス(例えば、装置アクセスおよびメモリ管理)を提供可能なモジュールとして見なすことができる。
図3は、適応コンパイルコード120(図1を参照)に関連付けた1つまたは複数の技術の例に従うデータ構造の例300を示す。より詳細には、データ構造300は、欠落した型または型のメンバへの参照を含むアプリケーション、プログラム、または関数の少なくとも一部を表すことができる。適応コンパイルコード120の実装によると、欠落した型、または欠落した型メンバに関連付けたエラーを、参照呼び出しが少なくとも統計的に不可避であるまで、延期することができる。この実装シナリオは、一般に決して排他的ではないが、データ構造300が対応するアプリケーション、プログラム、関数、または他のアセンブリコードを、それを生成した古い、または他の異なるバージョンのプラットフォーム上で実行することを試みるとき、およびコンパイル時、初期実行時、またはその後のデータ構造300が対応するアプリケーション、プログラム、関数、または他のコードアセンブリの実行中の任意の時点で検証プロセスを受けるときに、発生する可能性がある。
モジュール305は、アプリケーション、プログラム、関数または他のコードアセンブリに対応する、例えばランタイム実行環境200(図2を参照)内の実行コンポーネント230に従って実行可能である1つまたは複数の実行可能命令のモジュールを指すことができる。より詳細には、モジュール305はメソッド、クラス、DLL(dynamic link libraries)、フレームワーク等のエントリを指すことができる。モジュール305をコンパイラ210によりコンパイルし、ローダ215によりランタイム実行環境200にロードすることができる。すなわち、モジュール305はネイティブコード(すなわち、機械読取可能コード)であることができる。
しかしながら、モジュール305はネイティブコードの例のみに限定されない。寧ろ、本明細書で説明する技術の代替的な実装は、コンパイルされないコードに対するアプリケーションであることができ、従って、複数の統語特性および構成特性のうち少なくとも1つを例示可能な様々な公知の言語のうち任意の1つで書いた中間言語コードまたは他のコードに関連することができる。
モジュール310は、モジュール305に関連付けた参照を指すことができる。より詳細には、モジュール310の参照は、データ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれない型または型のメンバに対するものであることができる。しかしながら、適応コンパイルコード120の実装を現在説明しているシナリオの例に従って、モジュール310の参照が対応する欠落している型、または型の少なくとも1つのメンバのみを説明の目的でアセンブルすることができる。さらに、参照した型、またはそのメンバは整数、浮動小数点、文字列、論理、またはバイナリであることができるが決してこれらに限られない。
図4は適応コンパイルコード120(図1を参照)のコンパイルおよび/利用のうち少なくとも1つの実装例を生成および利用するデータフローの例400を示す。
以下の説明では、ランタイム実行環境200(図2を参照)に関連付けたコンポーネントにより、データ構造300(図3を参照)の1つまたは複数のモジュール上で、またはそのモジュールに対して実施されているとして様々な動作を説明する。これらのコンポーネントのうち任意の特定のものに関して説明する動作を、コンポーネント自身により、ツールに関連付けた他のコンポーネントと組み合わせて、またはランタイム実行環境200の1つまたは複数のコンポーネントと協調する特定のコンポーネントにより実行することができる。加えて、その動作を1つまたは複数のプロセッサにより実行することができ、ハードウェア、ファームウェアまたはソフトウェアとして、単体または様々な組み合わせのいずれかで実装することができる。さらに、一般には決して排他的ではないが、データ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリが、それを生成する異なるバージョンのプラットフォーム上での実行を試み、コンパイル時、初期実行時、またはその後のデータ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリの実行中の任意の時点で検証プロセスを受けるときに、その動作を行うことができる。
ブロック405は、結果としてデータ構造300となるコードのコンパイルを指すことができる。
環境410はマネージド実行環境であることができ、ブロック405は、マネージド実行環境内での実行向け、またはCPUによる非マネージド実行環境内での実行向けにILをネイティブ機械命令に解釈するコンパイラを指すことができる。
または、環境410はブロック405を指すことができる。ブロック405は、アプリケーション、プログラム、関数または他のコードアセンブリの少なくとも一部のコンパイルを指すことができる。それらのアプリケーション、プログラム、関数または他のコ−ドアセンブリは、前述のマネージド実行環境に1つまたは複数のネイティブイメージファイルとしてロードされ、従ってコンパイルに必要なCPU消費を回避する。
上述のように、データ構造300は、欠落している型または型のメンバへの参照を含むアプリケーション、プログラム、または関数に対応するコンパイルコードの少なくとも一部を表すことができる。
モジュール305は、マネージド実行環境に従って実行可能であるアプリケーション、プログラム、関数または他のコードアセンブリに対応する実行可能命令の1つまたは複数のモジュールに関することができる。モジュール305は、メソッド、クラス、DLL(dynamic link libraries)、フレームワーク等のエントリを指すことができる。
モジュール310は、データ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれない型または型のメンバを指すことができる。
ブロック410は、データ構造300に対応する実行可能コード305を実行するランタイム(すなわち、マネージド)実行環境200の実行モジュール230を指すことができる。
判断415は、データ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリに関する検証プロセス実装するアドミニストレータ225を指すことができる。より詳細には、アドミニストレータ225は実行可能コード305の実行中に要求可能な型および型のメンバを比較して、上記の要求が、データ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリ内に発見した型および型のメンバにより満たされるかどうかを判断することができる。
アドミニストレータ225が実装する検証プロセスを、コンパイル時、初期実行時、またはその後のデータ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリの実行中の任意の時点で、行うことができる。従って、アドミニストレータの機能性の少なくとも一部を、データフロー400の間の任意の時点で行うことができ、従って図4に示し、本明細書で説明するように、データフロー400は一例に過ぎない。すなわち、データフロー400の代替的な実装はここで示し、説明した順序に影響されない。
それとは関係なく、検証プロセスが、参照310を受ける型または型のメンバがデータ構造300が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれないことを示すと、データ構造300が対応するアプリケーション、プログラム、隈数または他のコードアセンブリの実行に対して割り込みを必要とせずに、参照310にフラグを立てるか、またはメモを残すことができる。さらに、データフロー400の少なくとも1つの実装によると、他の実行可能コードモジュールが実行される際に、欠落している型または型メンバに対する参照310が呼ばれる可能性または確率をアドミニストレータ225は統計的に判断することができる。
否定的判断420の結果、実行コード305および、データ構造300が対応するアプリケーション、プログラム、関数、または他のコードアセンブリに関連付けた他の実行コードの実行を継続することができる。すなわち、参照310はデータ構造300が対応するアプリケーション、プログラム、関数、または他のコードアセンブリ内に存在しない型または型のメンバに対するものであっても、参照310により適応コンパイルコード120に関連付けた技術の実装に従うエラーは生じない。
肯定的判断425は、データ構造300が対応するアプリケーション、プログラム、関数、または他のコードアセンブリの実行中にアドミニストレータ225により判断される統計的な必然の結果であることができ、あるいは単に呼び出されている欠落している型または型メンバに対する参照310の結果であることができる。
すなわち、データ構造300、従って参照310が対応するアプリケーション、プログラム、関数、または他のコードアセンブリに対する実行コードモジュールの実行が、欠落している型または型メンバに対する参照310が呼び出される統計的に不可避な点に到達する場合、マネージド実行環境はエラーを引き起こす可能性がある。または、マネージド実行環境は、単に欠落している型または型メンバに対する参照310が呼び出されるときに、エラーを誘発する恐れがある。上記エラーの非制限的な例は、例外処理を実行することができる。
従って、図1−4に関連する上述の説明により、欠落している型または型メンバに対する参照が実際に呼び出されるとき、欠落している型または型メンバに対する参照に関連付けたエラーを実行時まで延期することができる。
しかしながら、本明細書で説明した実装の例は図1の環境、図2のコンポーネント、図3のモジュール、または図4のプロセスにのみ限定されることはない。適応コンパイルコード120(図1を参照)に関連する技術(例えば、ツール、方法、およびシステム)を、図2−4を参照して説明した特徴の様々な組合せにより実装することができる。
さらに、上述の任意の例および実装に対するコンピュータ環境は、例えば1つまたは複数のプロセッサまたは処理装置、システムメモリ、および様々なシステムコンポーネントを接続するシステムバスを有するコンピューティング装置を含むことができる。
コンピューティング装置は様々なコンピュータ読取可能媒体を含むことができる。そのコンピュータ読取可能媒体には、揮発性および不揮発性媒体、取り外し可能および固定の媒体の両方が含まれる。システムメモリはコンピュータ読取可能媒体を、RAM(ランダムアクセスメモリ)のような揮発性メモリ;および/あるいはROM(リードオンリメモリ)またはフラッシュRAMのような不揮発性メモリの形で含むことができる。磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、DVD(デジタル多用途ディスク)または他の光記憶、RAM(ランダムアクセスメモリ)、ROM(リードオンリメモリ)、EEPROM(電気的消去可能プログラム可能リードオンリメモリ)等の、コンピュータによりアクセスできるデータを記憶可能な他種のコンピュータ読取可能媒体を利用して、コンピューティングシステムおよび環境の例を実装することができることも理解されたい。
本明細書を通して「例」、「代替的な例」、「少なくとも1つの例」、「実装」、または「実装の例」を参照するということは、特定の説明した特徴、構造、または特性が本発明の少なくとも1つの実装に含まれることを意味する。従って、上記語句の使用方法は単なる1つの実装ではなく、それ以上のものを参照することができる。さらに、説明した特徴、構造、または特性を1つまたは複数の実装において任意の適切な方法で組み合わせることができる。
しかしながら、当業界の技術者は、コードモジュールの初期化を1つまたは複数の特定の詳細な説明なしに、または他の方法、リソース、材料等で実装できることを理解することができる。他の事例では、単に本発明の態様を不明瞭にすることを避けるため、公知の構造、リソース、または動作を詳細には図示または説明していない。
コードモジュール初期化の実装および応用の例を例示および説明したが、本発明は上述の正確な構成およびリソースに限定されないことは理解されるべきである。当業界の技術者に明らかな様々な修正、変更、および変形を、本発明の範囲から逸脱せずに本明細書で開示した本発明の方法およびシステムの配置、動作、および詳細に対して加えることができる。その方法およびシステムの両方は、明細書および添付請求項で上述してある。
適応コンパイルコードに関する技術の例を実装する、ネットワーク上で通信する装置の図である。 適応コンパイルコードに関する技術の例を実装するための実行環境の一例を示す図である。 適応コンパイルコードに対するデータ構造の一例を示す図である。 適応コンパイルコードに関する技術の例を実装するデータフローの一例を示す図である。

Claims (20)

  1. 検証したデータ構造を有するコンピュータ読取可能媒体であって、前記データ構造は
    実行可能モジュールと、
    コンパイルしたデータ構造が関連するコードアセンブリから欠落している型に関連付けたモジュールを参照する参照モジュールと
    を備えたことを特徴とするコンピュータ読取可能媒体。
  2. 前記実行モジュールはメソッドであることを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  3. 欠落している前記型に関連付けた前記モジュールは型であることを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  4. 欠落している前記型に関連付けた前記モジュールは型のメンバであることを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  5. 前記参照モジュールに対する呼び出しは例外処理を実行することを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  6. 前記検証したデータ構造をランタイム実行環境でコンパイルすることを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  7. ランタイム実行環境により前記検証したデータ構造をコンパイル済みの形で受信することを特徴とする、請求項1に記載のコンピュータ読取可能媒体。
  8. ソースコードを検証するステップと、
    前記検証したソースコードを機械語にコンパイルするステップと、
    前記機械語に関連付けたメソッドを呼び出すステップと、
    前記コンパイルしたソースコードから欠落している型に関連付けたモジュールに対する参照を前記呼び出しが含むときに、エラーを誘発するステップと
    を有することを特徴とする方法。
  9. 前記方法をマネージド実行環境で実行することを特徴とする請求項8に記載の方法。
  10. 前記コンパイルをマネージド実行環境外部で実行し、前記呼び出しおよび誘発を前記マネージド実行環境内で実行することを特徴とする、請求項8に記載の方法。
  11. 前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照を、前記のコンパイルしたソースコードに含めることを特徴とする、請求項8に記載の方法。
  12. 前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照は、型に対する参照であることを特徴とする、請求項8に記載の方法。
  13. 前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照は、型のメンバに対する参照であることを特徴とする、請求項8に記載の方法。
  14. 読み出し時に1つまたは複数のプロセッサに、
    ソースコードを検証するステップと、
    前記検証したソースコードをネイティブ機械コードにコンパイルするステップと、
    前記コンパイルしたコードから欠落しているモジュールに対する参照を含むネイティブ機械コードを実行するステップと、
    前記ネイティブ機械コードの実行が前記参照に対する必然的な呼び出しを含むと判断したとき、エラーを誘発するステップと
    を行わせる1つまたは複数の実行可能命令を有することを特徴とする、少なくとも1つのコンピュータ読取可能媒体。
  15. 前記検証したソースコードをコンパイルするための前記1つまたは複数の実行可能命令をマネージド実行環境内で実行することを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
  16. 前記検証したソースコードをコンパイルするための前記1つまたは複数の実行可能命令をジャストインタイムコンパイラにより実行することを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
  17. 前記検証したソースコードをコンパイルするための前記1つまたは複数の実行可能命令を非マネージド実行環境内で実行し、次いで前記ネイティブ機械コードをマネージド実行環境により受信することを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
  18. 前記コンパイルしたコードから欠落しているモジュールに対する前記参照は型に対する参照であることを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
  19. 前記コンパイルしたコードから欠落しているモジュールに対する前記参照は型のメンバに対する参照であることを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
  20. 前記ネイティブ機械コードの実行が前記参照に対する必然の呼び出しを含むと判断するときにエラーを誘発する前記1つまたは複数の命令は、前記1つまたは複数のプロセッサに、前記参照に対する前記呼び出しの必然性を統計的に判断させることを特徴とする、請求項14に記載の少なくとも1つのコンピュータ読取可能媒体。
JP2008556331A 2006-02-27 2007-01-25 適応コンパイルコード Pending JP2009528589A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/276,362 US8615743B2 (en) 2006-02-27 2006-02-27 Adaptive compiled code
PCT/US2007/002320 WO2007097881A1 (en) 2006-02-27 2007-01-25 Adaptive compiled code

Publications (1)

Publication Number Publication Date
JP2009528589A true JP2009528589A (ja) 2009-08-06

Family

ID=38437698

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008556331A Pending JP2009528589A (ja) 2006-02-27 2007-01-25 適応コンパイルコード

Country Status (6)

Country Link
US (1) US8615743B2 (ja)
EP (1) EP1999583A4 (ja)
JP (1) JP2009528589A (ja)
KR (1) KR20080103970A (ja)
CN (1) CN101390053A (ja)
WO (1) WO2007097881A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1752874A1 (en) * 2005-07-19 2007-02-14 Alcatel Adaptive evolutionary computer software product
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US8615743B2 (en) * 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US9772826B2 (en) * 2013-10-04 2017-09-26 Microsoft Technology Licensing, Llc Build-time resolving and type checking references
CN104699485A (zh) * 2015-03-19 2015-06-10 神华集团有限责任公司 海量程序管理方法及构建方法
US9940218B2 (en) * 2016-02-15 2018-04-10 International Business Machines Corporation Debugging optimized code using fat binary
KR102253238B1 (ko) * 2020-12-09 2021-05-18 넷마블 주식회사 분산 컴파일링을 검증하는 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63163636A (ja) * 1986-12-26 1988-07-07 Hitachi Ltd 並列処理実行方式
JP2001051741A (ja) * 1999-05-27 2001-02-23 Sun Microsyst Inc 完全要求駆動型リンク
US20020129177A1 (en) * 2000-12-15 2002-09-12 Mcguire Richard Kenneth System and method for class loader constraint checking
US20020169999A1 (en) * 2001-05-14 2002-11-14 Microsoft Corporation Placing exception throwing instructions in compiled code
JP2002540522A (ja) * 1999-03-26 2002-11-26 サンマイクロシステムズ インコーポレーテッド インターフェーススタブを用いた遅延クラスローディングシステム及びその方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748966A (en) * 1994-12-30 1998-05-05 The Trustees Of The University Of Pennsylvania Type error checker for type-free or polymorphic computer language
DE69528749T2 (de) * 1995-02-17 2003-09-18 International Business Machines Corp., Armonk Objektorientierte Programmierschnittstelle zur Entwicklung und zur Ausführung einer Netzwerkverwaltungsapplikation auf einer Netzwerkkommunikationsinfrastruktur
US5655122A (en) 1995-04-05 1997-08-05 Sequent Computer Systems, Inc. Optimizing compiler with static prediction of branch probability, branch frequency and function frequency
US6003095A (en) 1996-10-31 1999-12-14 International Business Machines Corporation Apparatus and method for demand loading a dynamic link library
US5857104A (en) 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US6314566B1 (en) 1998-09-29 2001-11-06 Apple Computer, Inc. Method and apparatus for “Just-in-Time” dynamic loading and unloading of computer software libraries
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6321377B1 (en) * 1998-12-03 2001-11-20 International Business Machines Corporation Method and apparatus automatic service of JIT compiler generated errors
US6484313B1 (en) * 1999-06-30 2002-11-19 Microsoft Corporation Compiling and persisting of intermediate language code
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
US7080359B2 (en) * 2002-01-16 2006-07-18 International Business Machines Corporation Stack unique signatures for program procedures and methods
US6658657B1 (en) * 2000-03-31 2003-12-02 Intel Corporation Method and apparatus for reducing the overhead of virtual method invocations
US7155606B1 (en) * 2000-04-12 2006-12-26 Microsoft Corporation Method and system for accepting preverified information
US6981249B1 (en) * 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6886094B1 (en) * 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US7076785B2 (en) * 2001-08-15 2006-07-11 Microsoft Corporation Lazy loading with code conversion
US6993755B1 (en) * 2001-10-24 2006-01-31 Sun Microsystems, Inc. Dynamic compilation control
US7296257B1 (en) * 2002-08-01 2007-11-13 Tymesys Corporation Techniques for exception handling by rewriting dispatch table elements
US7150004B2 (en) * 2002-08-21 2006-12-12 International Business Machines Corporation Programmatically serializing complex objects using self-healing techniques
JP3757235B2 (ja) 2003-02-18 2006-03-22 株式会社Access ネイティブコンパイル方法、ネイティブコンパイル前処理方法、コンピュータプログラム、サーバ、通信システム、および移動体通信端末装置
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US20040268095A1 (en) 2003-06-30 2004-12-30 Tatiana Shpeisman Efficient implementation of null reference check
US7647629B2 (en) 2004-02-03 2010-01-12 Microsoft Corporation Hosted code runtime protection
US20070079290A1 (en) * 2005-09-27 2007-04-05 Bea Systems, Inc. System and method for dimensional explorer for performance test
US20070169036A1 (en) * 2005-10-31 2007-07-19 Dhi Technologies, Inc. Incremental type inferencing engine
US7770161B2 (en) * 2005-12-28 2010-08-03 International Business Machines Corporation Post-register allocation profile directed instruction scheduling
US8615743B2 (en) * 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US8572570B2 (en) * 2010-06-10 2013-10-29 Accenture Global Services Limited Assisted compositional reasoning for test scripts

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63163636A (ja) * 1986-12-26 1988-07-07 Hitachi Ltd 並列処理実行方式
JP2002540522A (ja) * 1999-03-26 2002-11-26 サンマイクロシステムズ インコーポレーテッド インターフェーススタブを用いた遅延クラスローディングシステム及びその方法
JP2001051741A (ja) * 1999-05-27 2001-02-23 Sun Microsyst Inc 完全要求駆動型リンク
US20020129177A1 (en) * 2000-12-15 2002-09-12 Mcguire Richard Kenneth System and method for class loader constraint checking
US20020169999A1 (en) * 2001-05-14 2002-11-14 Microsoft Corporation Placing exception throwing instructions in compiled code

Also Published As

Publication number Publication date
WO2007097881A1 (en) 2007-08-30
US20070240120A1 (en) 2007-10-11
EP1999583A4 (en) 2009-04-15
KR20080103970A (ko) 2008-11-28
CN101390053A (zh) 2009-03-18
EP1999583A1 (en) 2008-12-10
US8615743B2 (en) 2013-12-24

Similar Documents

Publication Publication Date Title
JP5139987B2 (ja) 拡張可能メタデータ
JP2009528589A (ja) 適応コンパイルコード
US7441094B2 (en) Memory management configuration
US7730464B2 (en) Code compilation management service
US8516589B2 (en) Apparatus and method for preventing virus code execution
US10334031B2 (en) Load balancing based on impending garbage collection in execution environment
US20040098724A1 (en) Associating a native resource with an application
JP5147728B2 (ja) 質的に注釈を付けられた注釈付きコード
US20070094671A1 (en) Load balancing interfaces
US11556348B2 (en) Bootstrapping profile-guided compilation and verification
US8701095B2 (en) Add/remove memory pressure per object
US8918776B2 (en) Self-adapting software system
US7600223B2 (en) Abstracted managed code execution
US8713524B2 (en) Memory management configuration
US7743377B2 (en) Cooperative threading in a managed code execution environment
EP1902379B1 (en) Node-to-node communication pipelines
US7549045B2 (en) Delegate registration in a managed code execution environment
US20060101439A1 (en) Memory management in a managed code execution environment
US7673051B2 (en) Resource usage conflict identifier
US20060288336A1 (en) Module initialization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120330

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120702

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121019