適応コードをコンパイルし、その適応コンパイルコードを実行するツール、システム、および方法を本明細書で説明する。さらに、少なくとも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つまたは複数の特定の詳細な説明なしに、または他の方法、リソース、材料等で実装できることを理解することができる。他の事例では、単に本発明の態様を不明瞭にすることを避けるため、公知の構造、リソース、または動作を詳細には図示または説明していない。
コードモジュール初期化の実装および応用の例を例示および説明したが、本発明は上述の正確な構成およびリソースに限定されないことは理解されるべきである。当業界の技術者に明らかな様々な修正、変更、および変形を、本発明の範囲から逸脱せずに本明細書で開示した本発明の方法およびシステムの配置、動作、および詳細に対して加えることができる。その方法およびシステムの両方は、明細書および添付請求項で上述してある。