(57)【要約】  マネージド実行環境において、アプリケーション、プログラム、関数または他のコードアセンブリが、欠落している型または型メンバに関連付けたモジュールに対する参照を呼び出すのが不可避になる点に到達するまで、エラーを延期することができる。
2009528589.tif 000002
【特許請求の範囲】
【請求項１】
検証したデータ構造を有するコンピュータ読取可能媒体であって、前記データ構造は
実行可能モジュールと、
コンパイルしたデータ構造が関連するコードアセンブリから欠落している型に関連付けたモジュールを参照する参照モジュールと
を備えたことを特徴とするコンピュータ読取可能媒体。
【請求項２】
前記実行モジュールはメソッドであることを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項３】
欠落している前記型に関連付けた前記モジュールは型であることを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項４】
欠落している前記型に関連付けた前記モジュールは型のメンバであることを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項５】
前記参照モジュールに対する呼び出しは例外処理を実行することを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項６】
前記検証したデータ構造をランタイム実行環境でコンパイルすることを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項７】
ランタイム実行環境により前記検証したデータ構造をコンパイル済みの形で受信することを特徴とする、請求項１に記載のコンピュータ読取可能媒体。
【請求項８】
ソースコードを検証するステップと、
前記検証したソースコードを機械語にコンパイルするステップと、
前記機械語に関連付けたメソッドを呼び出すステップと、
前記コンパイルしたソースコードから欠落している型に関連付けたモジュールに対する参照を前記呼び出しが含むときに、エラーを誘発するステップと
を有することを特徴とする方法。
【請求項９】
前記方法をマネージド実行環境で実行することを特徴とする請求項８に記載の方法。
【請求項１０】
前記コンパイルをマネージド実行環境外部で実行し、前記呼び出しおよび誘発を前記マネージド実行環境内で実行することを特徴とする、請求項８に記載の方法。
【請求項１１】
前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照を、前記のコンパイルしたソースコードに含めることを特徴とする、請求項８に記載の方法。
【請求項１２】
前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照は、型に対する参照であることを特徴とする、請求項８に記載の方法。
【請求項１３】
前記コンパイルしたソースコードから欠落している前記型に関連付けた前記モジュールに対する前記参照は、型のメンバに対する参照であることを特徴とする、請求項８に記載の方法。
【請求項１４】
読み出し時に１つまたは複数のプロセッサに、
ソースコードを検証するステップと、
前記検証したソースコードをネイティブ機械コードにコンパイルするステップと、
前記コンパイルしたコードから欠落しているモジュールに対する参照を含むネイティブ機械コードを実行するステップと、
前記ネイティブ機械コードの実行が前記参照に対する必然的な呼び出しを含むと判断したとき、エラーを誘発するステップと
を行わせる１つまたは複数の実行可能命令を有することを特徴とする、少なくとも１つのコンピュータ読取可能媒体。
【請求項１５】
前記検証したソースコードをコンパイルするための前記１つまたは複数の実行可能命令をマネージド実行環境内で実行することを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【請求項１６】
前記検証したソースコードをコンパイルするための前記１つまたは複数の実行可能命令をジャストインタイムコンパイラにより実行することを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【請求項１７】
前記検証したソースコードをコンパイルするための前記１つまたは複数の実行可能命令を非マネージド実行環境内で実行し、次いで前記ネイティブ機械コードをマネージド実行環境により受信することを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【請求項１８】
前記コンパイルしたコードから欠落しているモジュールに対する前記参照は型に対する参照であることを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【請求項１９】
前記コンパイルしたコードから欠落しているモジュールに対する前記参照は型のメンバに対する参照であることを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【請求項２０】
前記ネイティブ機械コードの実行が前記参照に対する必然の呼び出しを含むと判断するときにエラーを誘発する前記１つまたは複数の命令は、前記１つまたは複数のプロセッサに、前記参照に対する前記呼び出しの必然性を統計的に判断させることを特徴とする、請求項１４に記載の少なくとも１つのコンピュータ読取可能媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
アプリケーション、プログラム、関数、ならびに他のプログラム可能コードアセンブリおよび実行可能コードアセンブリは一般にサードパーティ（すなわち、「カスタマー」）利用向けに書かれる。従って、サードパーティの使用シナリオが可能でありサードパーティの期待を満たすように効率的なコードが書かれる。しかしながら、既存のプラットフォーム上で実行するよう設計されたアプリケーション、プログラム、関数または他のコードアセンブリを古い、または異なるバージョンのプラットフォーム上で実行することを試みるとき、上記の期待を満たすことは難しい場合がある。
【発明の開示】
【課題を解決するための手段】
【０００２】
アプリケーション、プログラム、関数または他のコードアセンブリを、それを生成した古い、または異なるバージョンのプラットフォーム上で実行することを試みるとき、欠落した型または型メンバは、その欠落した型または型メンバへの参照呼出しが必然となる点にアプリケーション、プログラム、関数または他のコードアセンブリの実行が達するまで延期される。
【０００３】
本発明では以下の図面を参照する。
【発明を実施するための最良の形態】
【０００４】
適応コードをコンパイルし、その適応コンパイルコードを実行するツール、システム、および方法を本明細書で説明する。さらに、少なくとも１つの適応コンパイルモジュールを有する１つまたは複数のアプリケーション、プログラム、関数、または他のコードアセンブリをコンパイルすることおよび実行することのうち少なくとも１つに関する説明は、関連するエラーを延期するために利用可能なツール、システム、プロセス、命令、技術、およびルーチンに関することができる。すなわち、前述のツール、システム、プロセス、命令、技術、およびルーチンを利用してコンパイルコード内の参照に関連付けた１つまたは複数のエラーを、その参照呼び出しが少なくとも統計的に必然であるまで延期することができる。前述のツール、システム、プロセスをネットワーク環境内の１つまたは複数の装置、またはノードで実装することができる。
【０００５】
本明細書で説明する「モジュール」は、共通の物理および／または論理リソースを利用可能なメソッド、クラス、ＤＬＬ（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｉｅｓ）、フレームワーク等の別個のエンティティを指すことができる。
【０００６】
本明細書で説明する「アセンブリ」は、コードの展開単位を指すことができる。
【０００７】
図１は、適応コードをコンパイルし、少なくとも１つの適応コンパイルモジュールを有する１つまたは複数のアプリケーション、プログラム、関数または他のコードアセンブリを実行するための技術の例を実装可能なネットワーク環境の例１００を示す。しかしながら、上記の技術の例はネットワーク環境に限定されない。本明細書で説明するように上記の技術は、適応コンパイルコード１２０に関連付けたツール、方法（例えば、技術）、およびシステムを含むことができるがこれらに限らない。図１では、クライアント装置１０５、サーバ装置１１０、および「他の」装置１１５をネットワーク１２５経由で互いに通信するように接続することができ、さらに、クライアント装置１０５、サーバ装置１１０、および「他の」装置１１５のうち少なくとも１つは前述の技術を実装することができる。
【０００８】
クライアント装置１０５は様々な公知のコンピューティング装置のうち少なくとも１つを表すことができる。そのコンピューティング装置には、適応コンパイルコード１２０の生成および利用のうち少なくとも１つに対する技術の例を実装できるデスクトップＰＣ（パーソナルコンピュータ）、ワークステーション、メインフレームコンピュータ、インターネット機器、セットトップボックス、またはゲームコンソールが含まれる。クライアント装置１０５はさらに、移動体（すなわち、携帯）電話、ＰＤＡ（携帯情報端末）、ラップトップコンピュータ等を含む有線および／または無線リンクによりネットワーク１２５と関連付けできる少なくとも１つの装置を表すことができる。さらに、クライアント装置１０５は上述のクライアント装置を様々な個数および／または組合せで表すことができる。「他の」装置１１５をクライアント装置１０５の上記例のうち任意のもので具現化することもできる。
【０００９】
サーバ装置１１０は、適応コンパイルコード１２０のコンパイルおよび利用のうち少なくとも１つに対する少なくとも１つの実装に従って、任意の様々なデータおよび／または機能性をクライアント装置１０５または「他の」装置１１５に提供できる任意の装置を表すことができる。データを公的に利用可能とするか、または制限することができる。例えばデータを、ある特定のユーザにのみ制限するか、または適切な受信料またはライセンス料が支払われた場合にのみ制限することができる。サーバ装置１１０はネットワークサーバ、アプリケーションサーバ、ブレードサーバ、またはそれらの任意の組合せのうち少なくとも１つであることができる。一般に、サーバ装置１１０はコンテンツ源でありうる任意の装置を表すことができ、クライアント装置１０５は上記コンテンツをネットワーク１２５経由またはオフラインのいずれかにより受信できる任意の装置を表すことができる。しかしながら、本明細書で説明する実装の例によると、クライアント装置１０５およびサーバ装置１１０は交互にネットワーク環境１００内の送信ノードまたは受信ノードであることができる。「他の」装置１１５を、サーバ装置１１０の上記例のうち任意のものにより具現化してもよい。
【００１０】
「他の」装置１１５は、本明細書で説明する１つまたは複数の技術の例に従って適応コンパイルコード１２０をコンパイルおよび／または利用できる任意のさらなる装置を表すことができる。すなわち「他の」装置１１５は、コードをコンパイルできるかまたはコンパイルコードを受信できる装置を表すことができる。そのコードに対して、コンパイルコード内の参照に関連付けた１つまたは複数のエラーを、その参照呼び出しが少なくとも統計的に必然であるまで延期することができる。従って、「他の」装置１１５は、自身の上にオペレーティングシステム、インタプリタ、コンバータ、コンパイラ、またはランタイム実行環境のうち少なくとも１つを有するコンピューティング装置または処理装置であることができる。これらの例は決して限定的であるとは意図されず、従ってそのように解釈すべきではない。
【００１１】
ネットワーク１２５は、有線および／または無線ネットワークを含むことができる様々な従来のネットワークトポロジおよびネットワークタイプのうち任意のものを表すことができる。ネットワーク１２５はさらに、パブリックおよび／または専用プロトコルを含む様々な従来のネットワークプロトコルのうち任意のものを利用することができる。ネットワーク１２５は例えば、８０２．１１システムのようなインターネットならびに１つまたは複数のローカルエリアネットワーク（個別に「ＬＡＮ」とも呼ばれる）、大規模な、広域ネットワーク（すなわち、「ＷＡＮ」）のうちの少なくとも一部、またはＢｌｕｅｔｏｏｔｈのようなパーソナルエリアネットワーク（すなわち、ＰＡＮ）を含むことができる。
【００１２】
装置１０５、１１０、および１１５のうち少なくとも１つにおけるコンピュータアーキテクチャは一般に、ハードウェアおよびソフトウェアの観点でのコンピューティングプラットフォームを定義している。コンピューティング装置に対するソフトウェアは機能に基づいてグループに分類されている。そのグループは、ハードウェア抽象化層（または、「ＨＡＬ」とも呼ばれる）、オペレーティングシステム（または「ＯＳ」とも呼ばれる）、およびアプリケーションを含むことができる。
【００１３】
ランタイム実行環境はＯＳおよびアプリケーション、プログラム、関数、または他のコードアセンブリの間に存在することができる。ランタイム実行環境は、アプリケーション、プログラム、関数、または他のコードアセンブリが任意の１つまたは複数の処理装置１０５、１１０および１１５上の特定のタスクを実行できる空間の役割を果たすことができる。より詳細には、ランタイム実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、および移動体処理／通信装置を含む増大する範囲の処理装置１０５、１１０、１０５上でのアプリケーション、プログラム、関数、または他のコードアセンブリの実行の信頼性を、上記装置上で実行されているアプリケーションに抽象化およびサービスの層を提供することにより、およびアプリケーション、プログラム、関数、または他のコードアセンブリにそのメモリ管理および構成を含む能力を提供することにより、拡張することができる。
【００１４】
ランタイム実行環境は、プログラミングプラットフォームおよび実行プラットフォームのうち少なくとも１つとしての役割を果たすことができる。プログラミングプラットフォームとして、ランタイム実行環境は、複数のコンピューティング言語のうち１つで書くことができる１つまたは複数のターゲットアプリケーション、プログラム、関数、または他のコードアセンブリを、中間言語（以降、「ＩＬ」）またはバイトコードにコンパイルすることができる。ＩＬは一般にプラットフォーム独立であり、中央演算装置（以降「ＣＰＵ」）がＩＬを実行する。実際、ＩＬは多数のＣＰＵ機械語よりも上位の言語である。
【００１５】
実行プラットフォーム、ランタイム実行環境はコンパイルしたＩＬをネイティブ機械命令に解釈することができる。ランタイム実行環境はインタプリタまたはコンパイラ（例えば、「ジャストインタイム」、または「ＪＩＴ」コンパイラ）のいずれかを利用して上記命令を実行することができる。それとは関係なく、ネイティブ機械命令を次いでＣＰＵにより直接実行することができる。ＩＬはＣＰＵ独立であるので、ＩＬを任意のＣＰＵプラットフォーム上で、そのＣＰＵプラットフォーム上で実行されているＯＳが適切なランタイム実行環境をホストする限り、実行することができる。
【００１６】
または、アプリケーション、プログラム、関数、または他のコードアセンブリの少なくとも一部を事前コンパイルして、ランタイム実行環境内に１つまたは複数のネイティブイメージファイルとしてロードすることができ、従ってコンパイルに必要なＣＰＵ消費を回避することができる。事前コンパイルした部分は、ネイティブプラットフォームの実行形式ではなくＩＬ形式で分散したソフトウェアモジュール（例えば、アセンブリ、メソッド、または型）であると効率的である。上記の事前コンパイルしたＩＬのソースを、非マネージド実行環境あるいは、装置１０５、１１０、および１１５のうち同一または別個の上のランタイム実行環境の別個の実装のいずれかに配置することができる。ソースは、事前コンパイルしたＩＬが対応するアプリケーション、プログラム、メソッド、関数、または他のコードアセンブリに対するインストール中またはインストール前に、事前コンパイルしたＩＬを展開することができる。
【００１７】
それとは関係なく、適応コンパイルコード１２０をコンパイルおよび／または利用する技術を実装可能なランタイム環境の例には、Ｖｉｓｕａｌ  Ｂａｓｉｃランタイム環境、例えば、Ｊａｖａ（登録商標）ルーチンの実行に使用されるＪａｖａ（登録商標）仮想マシンランタイム環境、または例えばＭｉｃｒｏｓｏｆｔ  ．ＮＥＴ（登録商標）アプリケーションをルーチンの実行および呼び出し前に機械語にコンパイルするＣＬＲ（Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ）が含まれる。しかしながら、このランタイム環境の一覧は例に過ぎない。本明細書で説明する技術の例はこれらのマネージド実行環境のみには限定されない。より詳細には、実装の例はマネージド実行環境のみには限定されない。なぜならば、１つまたは複数の例をテスト環境および／またはアンマネージド実行環境内部で実装できるからである。
【００１８】
ＩＬにコンパイルしたアプリケーション、プログラム、関数、または他のコードアセンブリを「マネージドコード」と称することができ、そのためランタイム実行環境を代替的に「マネージド実行環境」と称することができる。実行にランタイム実行環境を利用しないコードをネイティブコードアプリケーションと称することができる。
【００１９】
図２はラインタイム実行環境２００の例を示す。ラインタイム実行環境２００では、適応コード１２０（図１を参照）をコンパイルし、少なくとも１つの適応コンパイルモジュールを有する１つまたは複数のアプリケーション、プログラム、関数、または他のコードを実行する技術の例を実装することができる。
【００２０】
図２のモジュールの説明では、ランタイム実行環境２００の異なるコンポーネントにより実施されているとして様々な動作を説明することができる。図２は図３および４の説明でも参照することができる。特定のコンポーネントに関して説明する動作を、その特定のコンポーネント自体により、ランタイム実行環境２００の別のコンポーネントと協調するその特定のコンポーネントにより、または非マネージド実行環境からの処理コンポーネントと協調するその特定のコンポーネントにより実行することができる。従って、本明細書内の説明は実装の例に関し、決して限定しようとするものではない。
【００２１】
従って、ランタイム実行環境２００は、アプリケーションプログラミングまたはアプリケーション実行プラットフォームのいずれかに対するマネージドコードの実行を促進することができる。マネージドコードをアプリケーション開発技術のコアセットの一部と考えることができ、さらにランタイム実行環境２００上の実行向けにコンパイルされて、対応するサービスをコンピューティング装置プラットフォームに提供するコードと見なすことができる。加えて、ランタイム実行環境２００はマネージドコードを解釈レベルで命令に変換することができる。その命令をプロキシして、次いでプロセッサにより実行することができる。ランタイム実行環境２００に対するフレームワークはクラスライブラリも提供する。クラスライブラリを、マネージドアプリケーションに対するソフトウェアビルディングブロックと見なすことができる。
【００２２】
さらなる実装の例によると、ランタイム実行環境２００は少なくとも部分的な機能性を提供することができる。その機能性をカーネルに要求することができ、その機能性は装置１０５、１１０、および１１５のうち特定のものに対するリソース制約に依存してコンピューティング装置プラットフォームにおいて不足しているかまたは不足していない可能性がある。従って、ランタイム実行環境２００の少なくとも１つの例は、入力／出力（以降、「Ｉ／Ｏ」と呼ぶ）ルーチン管理、メモリ管理、コンパイル、およびサービスルーチン実行を実装することができる。従って、ランタイム実行環境２００はＩ／Ｏモジュール２０５、コンパイラ２１０、ローダ２１５、メモリ管理コンポーネント２２０（または、仮想マシンとも呼ばれる）、およびサービスルーチンマネージャ２２５を含むことができる。これらのコンポーネントを以下で詳細に説明する。これらのコンポーネントは例として提供したに過ぎず、様々な組合せおよび構成でのランタイム実行環境２００の例で実装することができる。上記の例はランタイム実行環境の任意の特定の実装に限定しようとするものではなく、限定するものと推論すべきではない。
【００２３】
ランタイム実行環境２００のＩ／Ｏモジュール２０５は、アプリケーションプログラミングプラットフォームまたはアプリケーション実行プラットフォームのいずれかに関連付けたデータ源（すなわち、プロセッサおよび周辺装置）に対する非同期アクセスを提供することができる。より詳細には、Ｉ／Ｏモジュール２０５はランタイム実行環境２００に、堅牢なシステムスループットと、Ｉ／Ｏ要求の発生元であるコードのストリームライン性能を提供することができる。
【００２４】
コンパイラ２１０はランタイム実行環境２００内部のモジュールを指すことができる。そのモジュールは、コンパイルしたＩＬをネイティブ機械命令に解釈して、例えば実行モジュール２３０によりランタイム実行環境２００内で実行、またはＣＰＵにより非マネージド実行環境で実行することができる。
【００２５】
ローダ２１５はアセンブリマネージャを指すことができる。アセンブリマネージャを起動して、必要に応じてアセンブリを発見および読み出すことができる。ローダ２１５を実行環境２００内に配置することができるが、非マネージド実行環境の少なくとも１つの実装（すなわち、ＯＳ）はその中にローダ２１５を含むことができる。ローダ２１５は、ランタイム実行環境２００にロードするために、事前コンパイルしたＩＬを展開中またはインストール中に収集することができる。従って、ランタイム実行環境２００の少なくとも１つの代替的な実装に従って、ローダ２１５は、ランタイム実行環境２００への、事前コンパイルしたＩＬのエントリポイントの役割を効率的に果たすことができる。
【００２６】
メモリ管理コンポーネント２２０を「ガベージコレクタ」と見なすことができる。ガベージコレクションをマネージドコード実行環境の堅牢な特徴と見なすことができる。オブジェクトがどのアプリケーションによっても使用されない場合、メモリヒープのスイープまたはスキャンの際にその特徴によりオブジェクトを自動的に解放（すなわち、割り当て解除）する。メモリ管理コンポーネント２１０の少なくとも１つの例では、フリーメモリヒープのスイープを線形探索として実装することができる。上記の実装は、メモリサイズが制約され、対応する装置のユーザによりスイープの完了における遅延が認識されるコンピューティング装置プラットフォームの例に適する可能性がある。
【００２７】
メモリ管理コンポーネント２２０が実装するさらなる機能には、有限揮発性ＲＡＭ（すなわち、メモリヒープ）記憶の１つまたは複数の連続ブロックあるいは一連の連続メモリブロックを、コンピューティング装置プラットフォーム上で実行されているタスク間で管理すること、コンピューティング装置プラットフォーム上で実行されている少なくとも１つのアプリケーションにメモリを割り当てること、少なくとも１つのアプリケーションによる要求時にメモリの少なくとも一部を解放すること、および任意のアプリケーションが任意の他のアプリケーションに割り当てたメモリ空間に不正にアクセスすることを防止することを含めることができる。
【００２８】
アドミニストレータ２２５は、ランタイム実行環境２００内部のモジュールを指すことができる。そのモジュールは、ランタイム実行環境２００内のアプリケーション、プログラム、メソッド、関数または他のコードアセンブリの少なくとも一部の実行を受信、検証、および管理する役割を果たす。コンパイルした適応コード１２０に関連付けた技術の実装の少なくとも１つの例によると、アドミニストレータ２２５はランタイム実行環境２２０内のアプリケーション、プログラム、メソッド、関数または他のコードアセンブリの振る舞いを、その任意の実行可能部に接触または影響せずに、コンパイル時、初期実行時、またはその後のアプリケーション実行中の任意の時点で制御することができる。より詳細には、アドミニストレータ２２５はコンパイラ２１０によりコンパイルしたコード、またはローダ２１５によりロードしたコードに対して型マッチングを強制することができる。すなわち、アドミニストレータ２２５は、満足するマッチを検索するときに、少なくともコードの一部により要求した型または型のメンバを、それらの要求を満たすのに使用する型または型のメンバと比較する。上記のマッチがそれぞれの要求に対して存在しない場合、アドミニストレータ２２５は実行モジュール２３０に命令して、コンパイラ２１０によりコンパイルしたコードまたはローダ２１５によりロードしたコードの実行を、欠落した型または欠落した型のメンバに対する要求が少なくとも統計的に不可避であるまで、進めることができる。
【００２９】
実行モジュール２３０により、コンピューティング装置プラットフォームに対するマネージドコード（すなわち、コンパイルしたネイティブコード）を実行することができる。実行モジュール２３０を、コンパイラ２１０によりコンパイルしたコードまたはローダ２１５によりロードしたコードの実行をランタイム実行環境２００内で実装可能であり、ランタイムサービス（例えば、装置アクセスおよびメモリ管理）を提供可能なモジュールとして見なすことができる。
【００３０】
図３は、適応コンパイルコード１２０（図１を参照）に関連付けた１つまたは複数の技術の例に従うデータ構造の例３００を示す。より詳細には、データ構造３００は、欠落した型または型のメンバへの参照を含むアプリケーション、プログラム、または関数の少なくとも一部を表すことができる。適応コンパイルコード１２０の実装によると、欠落した型、または欠落した型メンバに関連付けたエラーを、参照呼び出しが少なくとも統計的に不可避であるまで、延期することができる。この実装シナリオは、一般に決して排他的ではないが、データ構造３００が対応するアプリケーション、プログラム、関数、または他のアセンブリコードを、それを生成した古い、または他の異なるバージョンのプラットフォーム上で実行することを試みるとき、およびコンパイル時、初期実行時、またはその後のデータ構造３００が対応するアプリケーション、プログラム、関数、または他のコードアセンブリの実行中の任意の時点で検証プロセスを受けるときに、発生する可能性がある。
【００３１】
モジュール３０５は、アプリケーション、プログラム、関数または他のコードアセンブリに対応する、例えばランタイム実行環境２００（図２を参照）内の実行コンポーネント２３０に従って実行可能である１つまたは複数の実行可能命令のモジュールを指すことができる。より詳細には、モジュール３０５はメソッド、クラス、ＤＬＬ（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｉｅｓ）、フレームワーク等のエントリを指すことができる。モジュール３０５をコンパイラ２１０によりコンパイルし、ローダ２１５によりランタイム実行環境２００にロードすることができる。すなわち、モジュール３０５はネイティブコード（すなわち、機械読取可能コード）であることができる。
【００３２】
しかしながら、モジュール３０５はネイティブコードの例のみに限定されない。寧ろ、本明細書で説明する技術の代替的な実装は、コンパイルされないコードに対するアプリケーションであることができ、従って、複数の統語特性および構成特性のうち少なくとも１つを例示可能な様々な公知の言語のうち任意の１つで書いた中間言語コードまたは他のコードに関連することができる。
【００３３】
モジュール３１０は、モジュール３０５に関連付けた参照を指すことができる。より詳細には、モジュール３１０の参照は、データ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれない型または型のメンバに対するものであることができる。しかしながら、適応コンパイルコード１２０の実装を現在説明しているシナリオの例に従って、モジュール３１０の参照が対応する欠落している型、または型の少なくとも１つのメンバのみを説明の目的でアセンブルすることができる。さらに、参照した型、またはそのメンバは整数、浮動小数点、文字列、論理、またはバイナリであることができるが決してこれらに限られない。
【００３４】
図４は適応コンパイルコード１２０（図１を参照）のコンパイルおよび／利用のうち少なくとも１つの実装例を生成および利用するデータフローの例４００を示す。
【００３５】
以下の説明では、ランタイム実行環境２００（図２を参照）に関連付けたコンポーネントにより、データ構造３００（図３を参照）の１つまたは複数のモジュール上で、またはそのモジュールに対して実施されているとして様々な動作を説明する。これらのコンポーネントのうち任意の特定のものに関して説明する動作を、コンポーネント自身により、ツールに関連付けた他のコンポーネントと組み合わせて、またはランタイム実行環境２００の１つまたは複数のコンポーネントと協調する特定のコンポーネントにより実行することができる。加えて、その動作を１つまたは複数のプロセッサにより実行することができ、ハードウェア、ファームウェアまたはソフトウェアとして、単体または様々な組み合わせのいずれかで実装することができる。さらに、一般には決して排他的ではないが、データ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリが、それを生成する異なるバージョンのプラットフォーム上での実行を試み、コンパイル時、初期実行時、またはその後のデータ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリの実行中の任意の時点で検証プロセスを受けるときに、その動作を行うことができる。
【００３６】
ブロック４０５は、結果としてデータ構造３００となるコードのコンパイルを指すことができる。
【００３７】
環境４１０はマネージド実行環境であることができ、ブロック４０５は、マネージド実行環境内での実行向け、またはＣＰＵによる非マネージド実行環境内での実行向けにＩＬをネイティブ機械命令に解釈するコンパイラを指すことができる。
【００３８】
または、環境４１０はブロック４０５を指すことができる。ブロック４０５は、アプリケーション、プログラム、関数または他のコードアセンブリの少なくとも一部のコンパイルを指すことができる。それらのアプリケーション、プログラム、関数または他のコ−ドアセンブリは、前述のマネージド実行環境に１つまたは複数のネイティブイメージファイルとしてロードされ、従ってコンパイルに必要なＣＰＵ消費を回避する。
【００３９】
上述のように、データ構造３００は、欠落している型または型のメンバへの参照を含むアプリケーション、プログラム、または関数に対応するコンパイルコードの少なくとも一部を表すことができる。
【００４０】
モジュール３０５は、マネージド実行環境に従って実行可能であるアプリケーション、プログラム、関数または他のコードアセンブリに対応する実行可能命令の１つまたは複数のモジュールに関することができる。モジュール３０５は、メソッド、クラス、ＤＬＬ（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｉｅｓ）、フレームワーク等のエントリを指すことができる。
【００４１】
モジュール３１０は、データ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれない型または型のメンバを指すことができる。
【００４２】
ブロック４１０は、データ構造３００に対応する実行可能コード３０５を実行するランタイム（すなわち、マネージド）実行環境２００の実行モジュール２３０を指すことができる。
【００４３】
判断４１５は、データ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリに関する検証プロセス実装するアドミニストレータ２２５を指すことができる。より詳細には、アドミニストレータ２２５は実行可能コード３０５の実行中に要求可能な型および型のメンバを比較して、上記の要求が、データ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリ内に発見した型および型のメンバにより満たされるかどうかを判断することができる。
【００４４】
アドミニストレータ２２５が実装する検証プロセスを、コンパイル時、初期実行時、またはその後のデータ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリの実行中の任意の時点で、行うことができる。従って、アドミニストレータの機能性の少なくとも一部を、データフロー４００の間の任意の時点で行うことができ、従って図４に示し、本明細書で説明するように、データフロー４００は一例に過ぎない。すなわち、データフロー４００の代替的な実装はここで示し、説明した順序に影響されない。
【００４５】
それとは関係なく、検証プロセスが、参照３１０を受ける型または型のメンバがデータ構造３００が対応するアプリケーション、プログラム、関数または他のコードアセンブリに含まれないことを示すと、データ構造３００が対応するアプリケーション、プログラム、隈数または他のコードアセンブリの実行に対して割り込みを必要とせずに、参照３１０にフラグを立てるか、またはメモを残すことができる。さらに、データフロー４００の少なくとも１つの実装によると、他の実行可能コードモジュールが実行される際に、欠落している型または型メンバに対する参照３１０が呼ばれる可能性または確率をアドミニストレータ２２５は統計的に判断することができる。
【００４６】
否定的判断４２０の結果、実行コード３０５および、データ構造３００が対応するアプリケーション、プログラム、関数、または他のコードアセンブリに関連付けた他の実行コードの実行を継続することができる。すなわち、参照３１０はデータ構造３００が対応するアプリケーション、プログラム、関数、または他のコードアセンブリ内に存在しない型または型のメンバに対するものであっても、参照３１０により適応コンパイルコード１２０に関連付けた技術の実装に従うエラーは生じない。
【００４７】
肯定的判断４２５は、データ構造３００が対応するアプリケーション、プログラム、関数、または他のコードアセンブリの実行中にアドミニストレータ２２５により判断される統計的な必然の結果であることができ、あるいは単に呼び出されている欠落している型または型メンバに対する参照３１０の結果であることができる。
【００４８】
すなわち、データ構造３００、従って参照３１０が対応するアプリケーション、プログラム、関数、または他のコードアセンブリに対する実行コードモジュールの実行が、欠落している型または型メンバに対する参照３１０が呼び出される統計的に不可避な点に到達する場合、マネージド実行環境はエラーを引き起こす可能性がある。または、マネージド実行環境は、単に欠落している型または型メンバに対する参照３１０が呼び出されるときに、エラーを誘発する恐れがある。上記エラーの非制限的な例は、例外処理を実行することができる。
【００４９】
従って、図１−４に関連する上述の説明により、欠落している型または型メンバに対する参照が実際に呼び出されるとき、欠落している型または型メンバに対する参照に関連付けたエラーを実行時まで延期することができる。
【００５０】
しかしながら、本明細書で説明した実装の例は図１の環境、図２のコンポーネント、図３のモジュール、または図４のプロセスにのみ限定されることはない。適応コンパイルコード１２０（図１を参照）に関連する技術（例えば、ツール、方法、およびシステム）を、図２−４を参照して説明した特徴の様々な組合せにより実装することができる。
【００５１】
さらに、上述の任意の例および実装に対するコンピュータ環境は、例えば１つまたは複数のプロセッサまたは処理装置、システムメモリ、および様々なシステムコンポーネントを接続するシステムバスを有するコンピューティング装置を含むことができる。
【００５２】
コンピューティング装置は様々なコンピュータ読取可能媒体を含むことができる。そのコンピュータ読取可能媒体には、揮発性および不揮発性媒体、取り外し可能および固定の媒体の両方が含まれる。システムメモリはコンピュータ読取可能媒体を、ＲＡＭ（ランダムアクセスメモリ）のような揮発性メモリ；および／あるいはＲＯＭ（リードオンリメモリ）またはフラッシュＲＡＭのような不揮発性メモリの形で含むことができる。磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）または他の光記憶、ＲＡＭ（ランダムアクセスメモリ）、ＲＯＭ（リードオンリメモリ）、ＥＥＰＲＯＭ（電気的消去可能プログラム可能リードオンリメモリ）等の、コンピュータによりアクセスできるデータを記憶可能な他種のコンピュータ読取可能媒体を利用して、コンピューティングシステムおよび環境の例を実装することができることも理解されたい。
【００５３】
本明細書を通して「例」、「代替的な例」、「少なくとも１つの例」、「実装」、または「実装の例」を参照するということは、特定の説明した特徴、構造、または特性が本発明の少なくとも１つの実装に含まれることを意味する。従って、上記語句の使用方法は単なる１つの実装ではなく、それ以上のものを参照することができる。さらに、説明した特徴、構造、または特性を１つまたは複数の実装において任意の適切な方法で組み合わせることができる。
【００５４】
しかしながら、当業界の技術者は、コードモジュールの初期化を１つまたは複数の特定の詳細な説明なしに、または他の方法、リソース、材料等で実装できることを理解することができる。他の事例では、単に本発明の態様を不明瞭にすることを避けるため、公知の構造、リソース、または動作を詳細には図示または説明していない。
【００５５】
コードモジュール初期化の実装および応用の例を例示および説明したが、本発明は上述の正確な構成およびリソースに限定されないことは理解されるべきである。当業界の技術者に明らかな様々な修正、変更、および変形を、本発明の範囲から逸脱せずに本明細書で開示した本発明の方法およびシステムの配置、動作、および詳細に対して加えることができる。その方法およびシステムの両方は、明細書および添付請求項で上述してある。
【図面の簡単な説明】
【００５６】
【図１】適応コンパイルコードに関する技術の例を実装する、ネットワーク上で通信する装置の図である。
【図２】適応コンパイルコードに関する技術の例を実装するための実行環境の一例を示す図である。
【図３】適応コンパイルコードに対するデータ構造の一例を示す図である。
【図４】適応コンパイルコードに関する技術の例を実装するデータフローの一例を示す図である。
【図１】
2009528589.tif 000003
【図２】
2009528589.tif 000004
【図３】
2009528589.tif 000005
【図４】
2009528589.tif 000006
【国際調査報告】
2009528589.tif 000007
2009528589.tif 000008