コンピューターで実施される方法であって:オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述するメモリーの中にメタデータを受け取るステップと;前記アプリケーションプログラミングインターフェイスのうち一つのエレメントに関するプログラミング言語におけるプログラムの中の名前付きエレメントの指標を受け取るステップと;前記メタデータを使用して、前記アプリケーションプログラミングインターフェイスの前記名前付きエレメントを投射するステップと、を含む、ことを特徴とする方法。前記投射するステップは、前記プログラムがコンパイルされるときに、一つまたはそれ以上のエレメントを作成するコードを作成するステップ、および、作成された前記エレメントをタイプに従って変換するステップと、を含む請求項1に記載の方法。前記投射するステップは、前記プログラムがインタープリートされるときに、一つまたはそれ以上のエレメントを作成するコードを作成するステップと、作成された前記エレメントをタイプに従って変換するステップと、を含む請求項1に記載の方法。前記投射するステップは、オペレーティングシステム表現とアプリケーション表現との間でタイプに従ってデータを変換するステップ、を含む請求項1に記載の方法。前記投射するステップは、メソッド、プロパティ、および、イベントを含むインターフェイスを投射するステップ、を含む請求項1に記載の方法。一つまたはそれ以上のプロセッサと;一つまたはそれ以上のコンピューターストレージメディアと;前記コンピューターストレージメディア上に保管されたコンピュータープログラムであり、プロセッサデバイスによって処理されるときに、オペレーティングシステムのアプリケーションプログラミングインターフェイスとプログラミング言語におけるアプリケーションとの間で言語投射を実施するコンピュータープログラムと、を含み、前記アプリケーションプログラミングインターフェイスは、メモリーの中に保管されたメタデータによって記述されており;前記言語投射は、前記アプリケーションプログラミングインターフェイスのうち一つのエレメントに関するプログラミング言語における名前付きエレメントの指標を受け取り、かつ、前記メタデータを使用して、前記アプリケーションプログラミングインターフェイスの前記名前付きエレメントを前記プログラミング言語における前記アプリケーションへ投射する、ことを特徴とするコンピューターマシン。前記投射は、前記プログラムがコンパイルされるときに、一つまたはそれ以上のエレメントを作成するコードを作成し、かつ、作成された前記エレメントをタイプに従って変換する、請求項6に記載のコンピューターマシン。前記投射は、前記プログラムがインタープリートされるときに、一つまたはそれ以上のエレメントを作成するコードを作成し、かつ、作成された前記エレメントをタイプに従って変換する、請求項6に記載のコンピューターマシン。前記投射は、オペレーティングシステム表現とアプリケーション表現との間でタイプに従ってデータを変換する、請求項6に記載のコンピューターマシン。前記投射は、メソッド、プロパティ、および、イベントを含むインターフェイスを投射する、請求項6に記載のコンピューターマシン。本概要は、以降の詳細な説明でより詳しく記述される本発明の概念について、簡素化された形式において代表的な概念の選択を紹介するものである。本概要は、特許請求された技術的事項の主要な特徴または本質的な特徴を特定することを意図するものではない。また、特許請求された技術的事項の範囲を限定するために使用されることを意図するものではない。オペレーティングシステムが作成されるときは、APIに関する情報が生成され、オペレーティングシステムの中の既知のロケーションに既知のフォーマットにおいて保管される。この情報は、オペレーティングシステムによって公開された全てのAPIを完全に記述するものである。これは、これらに限定されるわけではないが、API、種々のタイプの名前付きエレメントに関する情報を含んでいる。ベーシックタイプ、列挙型、デリゲートdelegate、インターフェイス、クラス、メソッド、プロパティ、および、イベントといったものである。言語コンパイラー又はインタープリターは、このAPI情報を使用して、対象言語におけるネイティブシステムnativesystemAPIの自然でよく知られた表現を作成する。この表現は、言語によって変わるものである自然でよく知られたものは言語ごとに変わるからである。言語コンパイラー又はインタープリターは、コンパイル時及び又は実行時のAPI情報、対象の言語に対して最も好適なあらゆるものを読み出すことができる。例えば、Cのような静的コンパイル言語は、純粋にコンパイル時においてメタデータを使用し、一方で、Python又はJavaScript登録商標のような動的言語は、純粋に実行時においてメタデータを使用する。NET又はJava登録商標のような環境は、コンパイル時と実行時の両方においてメタデータを使用するであろう。メタデータは、アプリケーションがAPIにおける名前付きエレメントを参照することができるように使用される。メタデータを使用する投射projectionが作成され、APIにおける名前付きエレメントを対象言語における名前付きエレメントに対してマップし、対象表現とネイティブオペレーティングシステム表現との間のこうしたデータを変換するラッパーwrapperを規定する。従って、一つの態様において、オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述するメタデータはメモリーの中に保管される。プログラミング言語におけるプログラムの中で名前付けされた指標が与えられれば、アプリケーションプログラミングインターフェイスのうち一つのエレメントを参照して、名前付けされたエレメントは、メタデータを使用してプログラミング言語の中に投射される。投射は、プログラムのコンパイル又はインタープリテーションinterpretationの最中に生じ得る。投射は、プログラミング言語において一つまたはそれ以上のエレメントを作成するコードを作成すること、および、タイプに従って、作成されたエレメントに対してデータを変換することを含んでいる。インターフェイスは、その方法、プロパティ、および、イベントを含めて、投射され得る。投射は、また、例外exceptionをオペレーティングシステムからアプリケーションへプロパゲーションすることも含んでいる。オペレーティングシステムのAPIを他の言語の中にこうして投射することは、コンピューターで実行されるプロセス、一つまたはそれ以上のコンピューターストレージメディアを含む製造の手段、または、コンピューターマシンにおいて実施され得る。以降の説明においては、添付の図面が参照される。図面は、明細書の一部を構成しており、説明図として、本技術に係る所定の実施例が示されている。本発明開示の範囲を逸脱することなく、他の実施例が使用され、構成の変更がなされ得ることが理解されるべきである。以下のセクションでは、こうしたネイティブシステムAPIを他のプログラミング言語の中へ投射することが実施できるオペレーション環境の実施例が提供される。図1を参照すると、実行されているアプリケーション100は、実行時にオペレーティングシステム104のネイティブシステムAPI102にアクセスしている。アプリケーションがこうした機能性を有するように、プログラム106は、エディターといった、開発ツール112を典型的に使用して書かれている。こうしたプログラムは、言語のコンパイラー又はインタープリター108によってコンパイルまたはインタープリートinterpretのいずれかが行われて、実行時間アプリケーションruntimeapplication100を提供する。開発ツール102、および、コンパイラー又はインタープリター108は、オペレーティングシステムのAPI102を完全に記述するメタデータ110にアクセスする。開発ツール102は、開発者がプログラムを書くことを手助けする。メタデータを介して利用可能なネイティブシステムAPIを開発者に通知し、こうしたAPIが開発者のプログラミング言語を使用してアクセスできるようにしている。コンパイラー又はインタープリターは、ネイティブシステムAPIの開発者のプログラミング言語の中への投射をメタデータを使用して実施する。特に、APIにおける名前付きエレメントは、対象言語における名前付けされたエレメントに対してマップされ、こうしたエレメントの中の値は、対象言語とオペレーティングシステムによって使用されるフォーマット間で変換される。こうしたシステムの構築は、メタデータを用いて記述されたAPIを伴うオペレーティングシステムを構築することから始まる。メタデータは、プログラミング言語の独立した形式で、API記述の名前付けされたエレメントのそれぞれを表している。このメタデータは、インターフェイスの完全な記述を提供する。結合されたシステムメタデータは、ECMA-335CLIフォーマットで、一連のメタデータファイルの中に保管され得る。しかしながら、本発明にとって所定のフォーマットは重要ではない。このコンテクストを仮定して、こうしたシステムの実施例が、図2から図4に関して、より詳細に説明される。図2において、開発ツールのオペレーションの実施例がこれから説明される。開発者は、コンピュータープログラムを書くときに、エディターといった、開発ツール形式を一般的に使用する。このエディターは種々のタスクを行うことができる。文法を確認したり、開発者が入力した文字列の完了を提示するといったことである。この環境において、オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述しているメタデータは、種々の方法で使用され得る。開発ツールは、入力された文字列を受け取る200。APIにおいて識別子マウスといったものまたは名前空間オペレーティングシステム名といったものとして使用されるキーワードといったものである。メタデータは検索され202、識別子又は名前空間の一部として受け取った入力を有しているエレメントを特定する。マッチングmatchingエレメント一式に対する識別子は集められて204、開発ツールに戻される。開発ツールは、選択のために開発者に対してエレメントを提示し206、メタデータからの情報を使用して、開発者が使用しているコンピューター言語にとって好適なフォーマットでそうしたエレメントを提示する。図3を参照して、これから言語コンパイラー又はインタープリターのオペレーションの実施例が説明される。コンピュータープログラムの処理において、コンパイル又はインタープリートであっても、コンピュータープログラムの一連のエレメントが検知される300。コンピュータープログラムのエレメントがオペレーティングシステムのAPIに関連するかどうかが判断される302。例えば、メタデータにおけるエレメントを検索することによって、このことが判断され得る。メタデータを使用して、投射エレメントが作成される304。投射データは、コンピュータープログラムとオペレーティングシステムとの間でデータを交換できるようにする。特に、コンパイラー又はインタープリターは、オペレーティングシステムのAPIにおける名前付きエレメントを対象言語における名前付きエレメントに対する投射を実施する。メタデータにより、オブジェクトが作成され、プログラムによって使用されるデータフォーマットとオペレーティングシステムによって使用されるフォーマットとの間で値を変換することができる。実行時に、このエレメントにより、プログラムは、オペレーティングシステムのAPIにアクセスすることができ306、アプリケーションとオペレーティングシステムとの間でデータを変換することができる。こうしたシステムの一般的なオペレーションが説明されてきたので、これから所定の実施例が説明される。特に、APIを記述するメタデータとAPIのエレメントのコンピューター言語所定の表現との間の投射の実施例に係るさらなる詳細がこれから説明される。以降の説明は、単なる一つの可能な実施例に関するものであり、本発明を限定するものと考えられるべきではない。特に、以降の記載は実施可能な言語投射の単なる実施例であり、この言語に対する他の実施が可能であり、他の言語への他の投射が可能であることが理解されるべきである。この実施例においては、JavaScriptが、メタデータを使用してネイティブシステムAPIの中に投射されるプログラミング言語である。以下の実施例においては、いくつかの種類のエレメントが、どのようにJavaScriptプログラミング言語の中に投射されるかが説明される。スクリプトが、オペレーティングシステムのAPIによって規定された所定のオブジェクトのインスタンスを作成するように試みるとき、プロジェクターProjectorオブジェクトがメタデータへのアクセスを担い、異なるタイプ間でのデータを変換するスタブstubを作成する。おそらくプロキシーオブジェクトの作成を含んでおり、メソッド呼び出しをディスパッチdispatchするために、イベントを管理して、コールバックファンクションを管理している。整数、文字列、等といった、基本タイプの名前付きエレメントに対して、以降の記載は、こうしたAPIエレメントをJavaScriptの中に投射する方法である。オペレーティングシステムは、いくつかの署名された整数タイプと署名のない整数タイプを有している。1バイトの署名のない整数UInt8、4バイトの署名のない整数UInt32、1バイトの署名された整数Int8、8バイトの署名された又は署名のない整数Int64とUInt64といったものである。こうしたタイプの名前付けされたエレメントが、JavaScriptナンバー値として投射される。JavaScriptナンバーがオペレーティングシステム値へと変換される場合、その値はJavaScriptナンバーに型強制typecoerceされ、ES5ToInt32規格によって定義されたプロセスが続く。UInt8に対して、結果はモジュロmodulo2^8が適用される。Int32に対しては、モジュロ2^16が適用される。UInt32に対しては、モジュロ2^32が適用される。JavaScript値へと変換された64ビットの整数は、標準ナンバー値として表現される。署名された整数で範囲-2^53、2^53にある場合、または、署名のない整数で範囲0、2^53にある場合である。この範囲の外側にある場合は、整数データの全64ビットを保持するカスタムバッキングストアcustombackingstoreを用いてナンバー値として表される。こうしたカスタムナンバー値上での数学的オペレーションにより、その値を、範囲-2^53、2^53、または、署名のない場合0、2^53の範囲における標準ナンバー表現にされる。値がこの範囲の外側にある場合、タイプエラーTypeErrorが生じる。64ビットの整数へと変換されたJavaScript値は、それが投射された値それ自身である場合は、直接的に割り当てられる。そうでなければ、その値にEC5ToInteger転換を適用した結果が渡される。キャラクター16ビットのユニコードにより表されるもの、文字列、または、グローバル一意識別子GUIDであるオペレーティングシステムのAPIに係る名前付きエレメントは、JavaScriptの文字列として表現することができ、JavaScriptにおける名前付き文字列へと投射される。JavaScriptへと変換されたキャラクターは、ユニコード値によって表わされる単一キャラクターを含むJavaScript文字列値へと転換される。キャラクターへと変換されたJavaScript値は、ES5ToStringオペレーションを介してJavaScript文字列へと型強制され、最初のキャラクターは保持される。そして、単一のキャラクターはChar16値として渡される。JavaScriptへと変換された文字列は、JavaScriptストリングStringに転換される。文字列へと変換されたJavaScript値は、JavaScriptストリングへと型強制される。JavaScript値へと変換されたGUIDは、文字列フォーマットへと転換される。GUIDへと変換されたJavaScript値は、文字列へと型強制され、そして、オペレーティングシステムによって使用されるフォーマットへと構文解析される。オペレーティングシステムは、名前付きエレメントを伴うAPIを有することができる。名前付きエレメントは、ある時点を表わすDateTimeストラクトstruct、または、時間量を表すTimeSpanストラクトである。DateTimeストラクトは、DateTimeストラクトデータDataインスタンスとは異なる範囲と精度を有するものと一致するバッキングストアを用いて、DataインスタンスとしてJavaScriptの中に投射され得る。TimeSpanストラクトはミリ秒に転換され、JavaScriptナンバーとしてリターンされる。同様に、JavaScriptナンバーはミリ秒から100ナノ秒単位に転換することができ、TimeSpanストラクトとして渡される。メタデータのインタープリートにより、投射は、いくつかの場合において、タイプをネイティブ環境から言語投射における既存のタイプへと再度マップすることもできることに留意すべきである。例えば、このことは、ネイティブAPIにおけるタイプと言語投射が互換性のあるデータレイアウトを有している場合に可能であり望ましいものであって、基本的なデータタイプについて容易に生じるものである。メタデータのマッピングを用いて、投射は、言語タイプ上のメソッド又はプロパティといった、全てのオペレーションを直接的にネイティブタイプへ単純にリダイレクトredirectすることができる。これにより、こうしたタイプの使用は、言語開発者にとって、より自然でよく知られたものになる。例えば、DateTimeストラクトの再度マップは、こうしたやり方で実施される。ネイティブAPIにおいて、DateTimeストラクトは、あらゆる追加のオペレーションなしにメタデータにおいてWindows登録商標.Foundation.DateTimeとして表される。C投射において、このタイプは、サポートが豊富なCにおけるSystem.DateTimeOffsetにリダイレクトされ得る。別の実施例として、APIにおける名前付きエレメントがメソッドである場合、そのエレメントはリターンタイプとしての値HRESULTを有し、JavaScriptにおける例外に転換される。リターンされたHRESULTは、JavaScriptエンジンによって成功が確認される。HRESULTが失敗を示している場合、JavaScriptエンジンは、JavaScript側に例外を投げかける。従って、オペレーティングシステムのAPIのメソッドを実施しているJavaScriptに対して、HRESULTの失敗がJavaScriptExceptionとしてサーフェスsurfaceされる。JavaScriptメソッドを使用しているAPIメソッド以下に説明されるコールバックcallback又はデリゲートdelegateといったものに対して、JavaScriptメソッドコールが例外ブロックまたは、APIをホストしているJavaScriptによって提供されるような等価なものの中にラップされる。捉えた例外がHRESULTとしてプロパゲーションされ得るようにである。しかしながら、オペレーティングシステムは、また、HRESULTがメソッドとプロパティのパラメーター位置の中又は外にあるようにしている。こうした場合、HRESULTは署名のない32ビットチップとして変換される上述のようにである。列挙型enumeratedtypeであるAPIにおける名前付きエレメント、つまり名前付きコンスタントconstant一式、に対しては、それぞれの名前付き値に対する読み出し専用フィールドを含むオブジェクトとしてJavaScriptにおいて表現される。ストラクトstructであるAPIにおける名前付きエレメント、つまり名前付きフィールドの集合、に対しては、JavaScriptオブジェクトとしてJavaScriptにおいて表現される。JavaScriptへと変換されたストラクトはオブジェクトへと転換される。ストラクトにおけるそれぞれの名前付きフィールドの値は、フィールドの基礎的なタイプごとに変換される。オブジェクトタイプであるJavaScript値は、ストラクトへと変換され得る。JavaScriptオブジェクト又はそのプロトタイプは、ストラクトのそれぞれの名前付きフィールドに対する名前付きフィールドを含んでおり、それぞれの名前付きフィールドの値は、基礎的なタイプに従って変換される。JavaScriptオブジェクトにおける追加のフィールドで、オペレーティングシステムのAPIストラクトにおける均等物を有さないものは、無視される。ストラクト値の変換が失敗した場合、変換エラーがリターンされる。この実施例において、オペレーティングシステムは、アレイarrayに対するタイプを有していないが、代わりに、メソッドに対する引数が、アレイにおけるエレメントの数を表している署名のない整数長さ、バイトでなく、のペアとなるようにできる。アレイの最初のエレメントに対するポインターが後に続くものである。アレイをJavaScriptへと変換する場合、以下の特性をもつオブジェクトが作成される。オブジェクトは、0とアレイの長さ、マイナス1、との間のそれぞれの整数値に対するプロパティを有しており、それらは加算enumerableで、書き込み可能であるが、構成可能ではない。そして、長さ’length’のプロパティは、初期的にベクトル長に設定されており、それは書き込み不可能であり、加算でなく、構成可能ではない。プロトタイプは、Arrayプロトタイプオブジェクトである。インデックスプロパティ上のPutオペレーションは、基本的なネイティブアレイ上に所定のインデックスを設定する。インデックスプロパティ上のGetOwnPropertyオペレーションは、基本的なネイティブアレイへとインデックスする。ArrayとしてClassは有していない。JavaScriptオブジェクトを変換するとき、オブジェクトがClassArrayを有するとすれば、アレイはネイティブアレイへとコピーされ、このアレイに対する参照が伝達される。オブジェクトが投射されたアレイであれば、基本的なネイティブアレイが伝達される。APIは、また、デリゲートdelegate又はコールバックファンクションである名前付きエレメントを有することができ、一つの実施可能な方法に関するものである。これらは、コール可能なオブジェクトとしてJavaScriptの中へ投射され得る。投射は、カスタム変換オブジェクトにおけるコールバックデリゲートをラップする。JavaScriptへと変換されたデリゲートは、JavaScriptファンクションオブジェクトの中にラップされる。ファンクションオブジェクトが実施された場合、引数は、デリゲートによって規定されるように均等なパラメーターへと変換され、ラップされたデリゲートオブジェクトが実施される。引数の変換が失敗した場合、デリゲートはフェイルfailをコールする。パラメーターにおけるデリゲートよりも少ないJavaScript引数しかない場合、デリゲートはフェイルをコールする。パラメーターにおけるデリゲートを超える追加のJavaScript引数は無視される。デリゲートが実施された後で、アウトパラメーターoutparameterはJavaScriptタイプへと変換される。アウトパラメーターの変換が失敗した場合、デリゲートはフェイルをコールする。そして、アウトパラメーターはJavaScript値に変換されて、リターンされる。ネイティブJavaScriptファンクションオブジェクトがデリゲートへと変換される場合、コール可能なオブジェクトは、対応するデリゲートタイプのデリゲートの中にラップされる。デリゲートが実施されるとき、インパラメーターinparameterがJavaScriptタイプへと変換されて、JavaScriptファンクションオブジェクトが実施される。引数の変換に失敗した場合、デリゲートコールはフェイルする。デリゲートが実施された後で、リターン値が、以下のルールに基づいてデリゲートのアウトパラメーターへとマップされる。第1に、アウトパラメーターが存在しない場合は、JavaScriptファンクションオブジェクトからのリターン値は無視される。第2に、デリゲートが一つのアウトパラメーターを規定する場合は、JavaScriptファンクションオブジェクトからのリターン値は、そのタイプへと変換される。その変換が失敗した場合、デリゲートコールはフェイルする。第3に、デリゲートが複数のアウトパラメーターを規定する場合は、JavaScriptファンクションオブジェクトからのリターン値は、それぞれのアウトパラメーターに対する名前付きプロパティを伴うオブジェクトである。それぞれの名前付きプロパティは、対応するアウトパラメーターのタイプへと変換される。リターン値がオブジェクトでない場合、デリゲートコールはフェイルする。リターンされたオブジェクトがそれぞれのアウトパラメーターに対する名前付きプロパティを含まない場合、デリゲートコールはフェイルする。リターンされたオブジェクトが、アウトパラメーターに対応していない追加の名前付きプロパティを含む場合、それらは無視される。名前付きプロパティの対応するアウトパラメータータイプへの変換が失敗した場合、デリゲートコールはフェイルする。以下の実施例は、IStringCollectionと呼ばれるデリゲートのためのメタデータと、このデリゲートのインスタンスを作成する擬似JavaScriptコードを説明するものである。ExamplemetadatauuiddelegateHRESULTComparerinterfaceIStringCollectionHRESULTSortPsuedoJavaScriptcreateaninstanceofaclassthatimplementsIStringCollectionstrColgetIStringCollectionstrColsortreturens1s2インターフェイスは、オブジェクトとして直接的にJavaScriptへと投射されるものではない。しかしながら、インターフェイスは、オペレーティングシステムのAPIメソッドのパラメーター及びリターンタイプであり得る。上記の実施例で、対象プログラミング言語において自然な投射を提供するために、メンバーがJavaScriptへと投射され、ネームがcamelCaseに変更される。メンバーに対してcamelCaseネームを使用するためのJavaScriptにおける文字列変換に従ったものである。JavaScriptコンストラクターconstructorファンクションに類似のタイプは、慣習的にPascalCaseであり、その形式に投射される。同様に、enum型プロパティ、ストラクトフィールド、addEventListenerパターンのイベント名は、camelCaseにおけるネームを有している。実行時間クラスの表現となる静的タイプ情報に基づいては知られていないインターフェイスインスタンスは、JavaScriptへと変換されて、以下のステップを通過する。第1に、インターフェイスへのコールがなされてインターフェイスに対する実行時間クラス名が獲得される。成功の場合、オブジェクトは、実行時間クラスインスタンスオブジェクト以下に説明されるとして投射される。そうでなければ、オブジェクトは、それが実施するように知られているまさにそのインターフェイスを実施する名前付けされていない実行時間クラスのインスタンスであるかのように投射される。それは、他動的にtransitively要求されるインターフェイスである。インターフェイスタイプに変換されているJavaScript値が検査される。それが投射された実行時間クラスインスタンスオブジェクトであるか、または、投射されたインターフェイスインスタンスオブジェクトであるかが検査される。それが実行時間クラスオブジェクトであり、そのオブジェクトがプロキシーするproxyオリジナルの値がインターフェイスタイプを実施する場合、インターフェイスのオブジェクト実施がオペレーティングシステムに渡される。そうでなければ、タイプエラー例外が生じる。オペレーティングシステムのAPIにおけるオブジェクトは、実行時間クラスのインスタンスであってよい。実行時間クラスは、一式の一つまたはそれ以上のインターフェイス以下に定義されるものを実施する。実行中のオブジェクトに係る実施されたインターフェイスのリストは、実行中のオブジェクトをリターンしたメソッドのメタデータに基づくか、または、実行時間クラス名にアクセスしてメタデータを検索することによるか、いずれかにより決定され得る。JavaScriptは、プロトタイプベースの動的言語であるため、クラスの構造を有さない。クラス構造は、オブジェクトとしてJavaScriptに投射される。このように、オペレーティングシステムのAPIオブジェクトは、オブジェクトとしてJavaScriptに投射される。クラスの全ての実施されたインターフェイス上で定義されるメソッド、プロパティ、および、イベントの結合は、タイプメンバーを表しており、投射されたJavaScriptオブジェクト上で利用可能な名前付きプロパティとして、プロトタイプを介して、示される。JavaScript言語投射の使用者は、どのインターフェイス上にメンバーが実際に定義されているかを気にすることなく、クラスのあらゆるメンバーに直接的にアクセスすることができる。JavaScriptオブジェクトは動的である。新たなプロパティがいつでも追加され、または、削除され得ることを意味している。投射されたオブジェクトは、新たなプロパティとメソッドの追加をサポートすることができる。既定のインターフェイスメンバーがオーバーライドoverrideまたは削除されない限りにおいてである。JavaScript表現において、投射されたオブジェクトは拡張可能であるが、名前付きタイプメンバーの集合は構成可能ではない。投射されたオブジェクトは、実行時間クラス実施のインターフェイスからのメンバーの集合上で定義されたインスタンスメンバーを伴うプロトタイプを有している。そうしたインターフェイスは、上述のように、メソッド、パラメーター、および、イベントを有している。言語投射レイヤーlayerでのメソッドは、メソッドごとのスロットを用いて仮想関数テーブルvtableとして実施される。インターフェイスに関するメタデータは、メソッドと同様に、パラメーターのネームname、タイプ、および、ダイレクションイン/アウトを提供する。メソッドは、投射された実行時間クラス上のコール可能なプロパティ、または、インターフェイスオブジェクトとしてJavaScriptに投射される。こうしたプロパティは、以下のとおりである。{WritablefalseEnumerabletrueConfigurablefalse}コールされた場合、引数は対応するパラメータータイプに従って変換され、メソッドは、これらの値を用いてコールされる。リターン値は、JavaScript値に変換され、値としてのJavaScriptオブジェクトを伴うものである。言語投射レイヤーでのプロパティは、ゲットget及び又はセットsetメソッドとして実施される。プロパティ値のアクセスがゲットメソッドをコールし、一方でプロパティ値の更新はセットメソッドを実施する。プロパティは、読み出し又は書き込みつまり、ゲット及びセットメソッドが利用可能であるであってよく、または、読み出し専用であってよいつまり、ゲットメソッドだけが利用可能である。プロパティは、JavaScriptの中にプロパティとして投射される。プロパティ値の変換は、上述のように、基本的なプロパティタイプに基づいて作用する。言語投射レイヤーでのイベントは、アッドadd及び又はリムーブremoveメソッドとして実施される。アッドメソッドは、デリゲートインスタンスを得てリスナーlistenerを記述するデータをリターンする。一方で、リム-ブメソッドは、リスナーを記述するデータ得て何もリターンしない。JavaScriptにおいて、少なくとも一つのイベントが投射されているあらゆる投射された実行時間クラス又はインターフェイスオブジェクトは、そのプロパティに2つのプロパティが追加される。addEventListenerとremoveEventListenerである。これらのプロパティは、WritablefalseEnumerabletrueConfigurablefalesであり、コール可能なオブジェクトとなるように割り当てられる。addEventListenerファンクションは、リスンlistenするイベントの名前を表す文字列引数、リスナーとして割り当てるためにコールバックファンクション、および、無視されている任意の第3のパラメーターを獲得する。このファンクションは、基本的なadd_Eventメソッドをコールし、変換されたコールバックファンクションをデリゲートとして渡して、結果として生じたトークンtokenをコールバックファンクションオブジェクトの参照識別子によってキー付けされたマップの中に保管する。removeEventListenerは、リスナーから取り除くイベントの名前を表す文字列引数、取り除かれるべきコールバックファンクション、および、無視されている任意の第3のパラメーターを獲得する。このファンクションは、保管されたトークンのマップにおける参照識別子によってコールバックファンクションを検索して、トークンが見つかった場合に、基本的なremove_Eventメソッドをコールし、検索されたトークンを渡す。イベントが開始されると、コールバックとして渡されたあらゆるJavaScriptファンクションオブジェクトが実施される。ファンクションオブジェクトに渡された引数は、EventHandlerデリゲートに提供される引数の変換された値になる。上述のように、言語に対するAPI投射レイヤーを有することにより、オペレーティングシステムのAPIに係る名前付きエレメントは、オペレーティングシステムの中に保管されたメタデータによって規定されるように、オペレーティングシステムのAPIフォーマットとアプリケーションプログラミング言語フォーマットとの間のオブジェクト及び変換データを自動的に作成するために使用される。上記は、例示オペレーティングシステムと例示プログラム言語との間の単なる例示投射であること、および、本発明がこの実施例に限定されるものではないことが理解されるべきである。実施例について説明してきたので、そうしたシステムが動作するようにデザインされたコンピューター環境についてこれから説明する。以降の記載は、このシステムが実施され得る好適なコンピューター環境について簡潔で一般的な説明を提供するように意図されたものである。システムは、数多くの汎用又は専用コンピューターハードウェア構成を用いて実施することができる。好適なよく知られたコンピューターデバイスの実施例は、これらに限定されるわけではないが、以下のものを含んでいる。パーソナルコンピューター、サーバーコンピューター、ハンドヘルド又はラップトップデバイス例えば、メディアプレーヤー、ノートブックコンピューター、携帯電話、パーソナルデータアシスタント、ボイスレコーダー、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、ゲームコンソール、プログラム可能な家電、ノートブックPC、ミニコンピューター、メインフレームコンピューター、上記のあらゆるシステム又はデバイスを含む分散コンピューティング環境、等である。図4は、好適なコンピューターシステム環境の実施例を示している。コンピューターシステム環境は、好適なコンピューター環境の単なる一例であって、こうしたコンピューター環境の範囲又は機能性に関していかなる限定も意図するものではない。コンピューター環境は、オペレーション環境の中に示されたあらゆる一つのコンポーネント又はその組み合わせに関していかなる依存も要求も有しないものとして理解されるべきである。図4に関して、コンピューター環境の実施例は、コンピューターマシン400といった、コンピューターマシンを含んでいる。最も基本的な構成において、コンピューターマシン400は、典型的に、少なくとも一つのプロセッサユニット402とメモリー404を含んでいる。コンピューターデバイスは、複数のプロセッサユニット、及び又は、グラフィックプロセッサユニット420といった追加のコプロセッサユニットco-processingunitを含んでよい。コンピューターデバイスのまさにその構成とタイプに基づいて、メモリー40は、揮発性RAMといったもの、不揮発性ROM、フラッシュメモリー、等といったもの、または、これら2つのいくつかの組み合わせであってよい。この最も基本的な構成は、破線406によって図4の中に示されている。加えて、コンピューターマシン400は、また、追加の特性/機能性を有し得る。例えば、コンピューターマシン400は、また、追加ストレージリムーバブル及び又は非リムーバブルのものを含んでよい。これらに限定されるわけではないが、磁気又は光ディスク又はテープを含んでいる。こうした追加ストレージは、リムーバブルストレージ408及び非リムーバブルストレージ410として図4の中に示されている。コンピューターストレージメディアは、揮発性と不揮発性、リムーバブルと非リムーバブルメディアを含んでおり、コンピュータープログラムインストラクション、データ構造、プログラムモジュール、または、他のデータといった情報を保管するためのあらゆる方法又は技術において実施される。メモリー404、リムーバブルストレージ408及び非リムーバブルストレージ410は、全てコンピューターストレージメディアの実施例である。コンピューターストレージメディアは、これらに限定されるわけではないが、以下のものを含んでいる。RAM、ROM、EEPROM、フラッシュメモリーまたは他のメモリー技術、CD-ROM、デジタル多目的ディスクDVDまたは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、または、所望の情報を保管するために使用でき、コンピューターマシン400によってアクセスされ得る他のあらゆるメディア、である。コンピューターマシン400は、また、コミュニケーション接続412を含んでおり、デバイスは他のデバイスとコミュニケーションすることができる。コミュニケーション接続412は、コミュニケーションメディアの実施例である。コミュニケーションメディアは、典型的に、コンピュータープログラムインストラクション、データ構造、プログラムモジュール、または、キャリア波又は他の伝送メカニズムといった変調されたデータ信号における他のデータを保持しており、あらゆる情報伝達メディアを含んでいる。用語変調されたデータ信号modulateddatasignalは、一つまたはそれ以上の特性セットを有する信号、または、信号におけるエンコード情報に関して、そうしたやり方で変換された信号を意味しており、それによって、信号の受信装置の構成または状態が変化している。実施例として、そして限定ではなく、コミュニケーションメディアは、有線ネットワーク又はダイレクト有線接続、および、音声、RF、赤外線、又は他の無線メディアといった無線メディアを含んでいる。コンピューターマシン400は、ディスプレイ、キーボード、マウス、ペン、カメラ、タッチ入力デバイス、等といった種々の入力デバイス414を有してよい。スピーカー、プリンター、等といった出力デバイス416も、また、含まれてよい。こうしたデバイスの全ては従来技術としてよく知られており、ここにおいて長らく説明することを要しないものである。こうしたシステムは、ソフトウェアの一般的なコンテクストcontextにおいて実施され得る。プログラムモジュールといった、コンピューターで実行可能なインストラクション及び/又はコンピューターで解釈されるインストラクションを含み、コンピューターマシンによって処理されるものである。一般的に、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含み、プロセッサユニットによって処理されると、プロセッサユニットに対して所定のタスク又は所定の抽象的なデータタイプを実行するように指示する。このシステムは、分散コンピューター環境において実施されてもよい。タスクは、コミュニケーションネットワークを通じてリンクされた離れたプロセッサデバイスによって実行される。分散コンピューター環境において、プログラムモジュールは、メモリストレージデバイスを含むローカル及びリモート両方のコンピューターストレージメディアの中に存在し得る。添付の請求項のプリアンブルにおける用語製造方法、プロセス、マシン、および、組み合せは、米国特許法第101条におけるこれらの用語の使用によって定義される特許可能な技術的事項の範囲内にあるものと考えられる技術的事項に請求項を限定するように意図されたものである。ここにおいて説明されたあらゆる又は全ての前出の代替的な実施例は、追加のハイブリッドな実施例を形成するために望まれるあらゆる組み合せにおいて使用され得るものである。添付の請求項において定められる技術的事項は、上述の所定の実施例に必ずしも限定されるものではないことが理解されるべきである。上述の所定の実施例は、単なる例として開示されたものである。