(57)【要約】  意図の宣言型表示の関数として非同期メソッドおよび呼び出しが自動で作り出される。非同期属性で注釈付けされたメソッドまたは特別な非同期関数を含むメソッド呼び出しを識別することができる。その後に、識別された同期メソッドまたは呼び出しの非同期バージョンが自動で作成される。意図を指定するためのアシスタンスも提供される。
2011515741.tif 000002
【特許請求の範囲】
【請求項１】
非同期メソッドおよび／または呼び出し作成システムであって、
非同期の意図の宣言を含むメソッドおよび／またはメソッド呼び出しを置くスキャナコンポーネントと、
前記置かれたメソッドおよび／または呼び出しの非同期バージョンを作成するライターコンポーネントと
を備えることを特徴とするシステム。
【請求項２】
前記宣言は、非同期メソッドの空宣言に貼り付けられる非同期属性であることを特徴とする請求項１に記載のシステム。
【請求項３】
前記属性および／または宣言は、前記ライターによって用いられる要望された非同期実装パターンを識別することを特徴とする請求項２に記載のシステム。
【請求項４】
前記ライターコンポーネントは、対応する同期メソッド定義の関数として非同期メソッドの実装を作成することを特徴とする請求項２に記載のシステム。
【請求項５】
前記属性および／または貼り付けられた宣言は、前記同期メソッド定義を識別することを特徴とする請求項４に記載のシステム。
【請求項６】
前記ライターコンポーネントは、前記属性および／または前記非同期メソッド宣言から前記対応するメソッド定義を推測することを特徴とする請求項４に記載のシステム。
【請求項７】
前記宣言は、同期呼び出しサイトにおける関数であることを特徴とする請求項１に記載のシステム。
【請求項８】
前記コンポーネントは、言語トランスレータを仲介するための中間言語の部分を形成することを特徴とする請求項１に記載のシステム。
【請求項９】
前記コンポーネントは、ソースコードから中間言語へのコンパイラ、中間言語からマシン語へのトランスレータ、またはプログラムローダーの部分を形成することを特徴とする請求項１に記載のシステム。
【請求項１０】
ユーザから情報を獲得するユーザインタフェースコンポーネントと、
前記獲得された情報の関数として属性および関連するパラメータを作成する作成コンポーネントと
をさらに備えることを特徴とする請求項１に記載のシステム。
【請求項１１】
非同期メソッドを作成する方法であって、
非同期メソッド宣言に貼り付けられた注釈付けを識別するステップと、
前記注釈付けと対応する同期メソッドとの関数として非同期メソッドの実装を自動で作り出すステップと
を備えることを特徴とする方法。
【請求項１２】
前記注釈付けから前記対応する同期メソッドを識別するステップをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記非同期メソッド宣言から前記対応する同期メソッドを推測するステップをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記注釈付けによって指定された実装パターンに従って前記非同期メソッドを作り出すステップを備えることを特徴とする請求項１１に記載の方法。
【請求項１５】
前記パターンに従ってコンテキストの関数として実装パターンを推測するステップと前期非同期メソッドを作り出すステップとを備えることを特徴とする請求項１１に記載の方法。
【請求項１６】
前記注釈付けによって決められた処理ステージにおいて前記非同期メソッドを作り出すステップを備えることを特徴とする請求項１１に記載の方法。
【請求項１７】
中間言語コードによって前記注釈付けを識別するステップと中間言語コードによって前記メソッドを作り出すステップとを備えることを特徴とする請求項１１に記載の方法。
【請求項１８】
コンピュータプログラムが格納されているコンピュータ可読媒体であって、
同期メソッドと、
前記メソッドまたはその呼び出しの非同期バージョンが要望されていることを示す識別子と
を備えることを特徴とするコンピュータ可読媒体。
【請求項１９】
前記識別子は、同期メソッド定義または非同期メソッド宣言に貼り付けられた属性であることを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記識別子は、同期メソッド呼び出しサイトに置かれた特別な関数であることを特徴とする請求項１８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、非同期メソッドのための宣言型サポート（declarative support）に関する。
【背景技術】
【０００２】
コンピュータプログラムは、コンピュータまたは他のプロセッサベースのデバイスによって行われる動作を記述する一群の命令である。コンピュータプログラムがコンピュータハードウェア上で読み込まれて実行される時、コンピュータは、そのコンピュータプログラムの命令に従うことによってあらかじめ決められた方法で動く。従って、コンピュータは、命令によって規定されたタスクを行う専用のマシンになる。
【０００３】
１または複数のプログラミング言語を用いるプログラマーは、コンピュータプログラムを備える命令を生成する。典型的には、ソースコードは、プログラマーが手動および／または統合開発環境（ＩＤＥ:integrated development environment）を使用して指定または編集される。その後、そのソースコードを、コンピュータまたは同様のデバイスによって実行可能なコンピュータ命令に、別のプログラムによってコンパイルまたは変換することができる。
【０００４】
例えば、プログラマーは、ハイレベルなオブジェクト指向のプログラミング言語（例えば、Ｃ＃、Ｃ＋＋、ＶＢ、Ｊａｖａ等）を使用して実装されるコードを選択できる。関連するコンパイラを使用して、次に、特定のマシンの実行コードを作り出すことができる。あるいは、そのコードをターゲットの仮想マシンの中間言語（ＩＬ：intermediate language）コードに変換して、さらにその中間言語のコンパイルまたはインタプリテーションを介して複数のコンピュータプラットフォーム上での実行を容易にすることができる。
【０００５】
メソッドは、ほとんどのプログラミング言語において重要なプログラム機構である。或るシナリオにおいて関数（function）とも呼ばれるメソッドは、独立した、再利用可能な関数機能のパッケージである。それは、行われる具体的なタスクまたはルーチンを指定する。オブジェクト指向のパラダイムにおいて、メソッドは、具体的なクラスの動きまたは能力を記述する。例えば、犬のクラスは、吠えるメソッドを有することができる。
【０００６】
ほとんどのメソッドは、標準的には同期する。メソッドの相互作用は、発呼者（caller）／被呼者（callee）のパターンに従い、発呼者は、被呼者によって提供される関数機能を呼び出す。この場合、発呼者は、被呼者に呼び出しを行って、被呼者は、或る計算を行って、次に、その計算結果を発呼者に戻す。発呼者は、被呼者が或る計算を行う間は遮断する。しかしながら、これは、例えば、ネットワークまたはディスクと関連付けられた計算の過密さまたは待ち時間に起因して、計算を行う時間が比較的長くかかる場合に問題となる。非同期メソッドを使用してこのような問題に対処することができる。
【０００７】
非同期メソッドは、計算が行われる間でも遮断しない。発呼者は単に継続し、被呼者は開始する。いったん被呼者が終了すると、再度同期するための機構が発呼者と被呼者とに用いられる。例えば、被呼者は、発呼者を呼び戻すことができる。言い換えれば、発呼者が被呼者を呼び出し、発呼者が遮断かつ待機する非対称的な呼び出しではなく、発呼者が被呼者を呼び出して、被呼者が結果を用いて発呼者を呼び戻す。とりわけ、これによって、発呼者は典型的には遮断しないのでかなり迅速なプログラムの仕様が可能になる。
【０００８】
非同期メソッドを指定するために、プログラマーが必要なものに、非同期性を導入（inject）するための多数のプラミングコード(plumbing code)が含まれる。一標準的実施形態において、これは、「開始呼び出し（BeginInvoke）」と「終了呼び出し（EndInvoke）」とのメソッドの委譲（delegate）および定義の生成に対応する。ここで、「開始呼び出し」は非同期動作を開始して、「終了呼び出し」は結果を得る。非同期メソッドを、この設計パターンを使用したさまざまな方法において指定することができる。例えば、非同期動作の開始後、「終了呼び出し」を、結果を得るために直接呼び出すまたは呼び戻し関数によって間接的に呼び出すことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、上述したような問題に鑑みてなされたものであり、その目的するところは、非同期メソッドのための宣言型サポートを提供することにある。
【課題を解決するための手段】
【００１０】
開示される発明の態様の一部について基本的理解を与えるために、以下に簡易な概要を提示する。本概要は、広範囲の概略ではない。特許請求の範囲に係る発明の重要な／決定的な要素を特定するまたはその範囲を明らかにすることを意図しない。その唯一の目的は、後で提示されるより詳細な説明の前置きとして、簡易な形式において概念の一部を提示することである。
【００１１】
簡単に説明すると、対象とする開示は、非同期メソッドとメソッドの呼び出しとを作成すること（generation）に関する。開示の態様に従って、ユーザは、コード注釈付け（code annotation）を介して非同期メソッドを作り出すというユーザの意図を宣言（declare）することができる。例えば、非同期バージョンのメソッドを要望していることを示す宣言型属性（declarative attribute）をメソッドに貼り付ける（attach）ことができる。別の態様に従って、非同期呼び出し（asynchronous call）の要望を示すための特別な関数を、同期メソッド呼び出しサイトにおいて指定することができる。非同期の実装または呼び出しを自動で作成（generate）するための機構が提供される。言い換えれば、開発者は、単に自分たちの意図を明らかにするだけでよく、その実装は自動で作り出される。結果的に、開発者は、非同期メソッドを容易に用いてかなり迅速なアプリケーションを作り出すことができる。
【００１２】
上述およびそれに関連する目的を達成するために、特許請求の範囲に係る発明の図示された或る態様を、以下の説明と添付図面との関連において本明細書で説明する。これらの態様は、発明を実施できるさまざまな方法を示し、そのすべては、特許請求の範囲に係る発明の範囲においてなされることを意図する。他の利点および新規の特徴は、図面と共に検討される場合に以下の詳細な説明から明らかになるだろう。
【図面の簡単な説明】
【００１３】
【図１】開示される発明の一態様に係る、非同期メソッド作成システムのブロック図である。
【図２】開示の一態様に係る、代表的なメソッド注釈付けコンポーネントのブロック図である。
【図３】開示される一態様に係る、代表的な非同期ライターコンポーネントのブロック図である。
【図４】開示の一態様に係る、非同期コードが中間コードレベルにおいて作成されるコード変換システムのブロック図である。
【図５】開示される一態様に係る、ソースコードレベルにおいて非同期コードを作成するコード変換システムのブロック図である。
【図６】開示の一態様に係る、実行時間に非同期コードを作り出すコード変換システムのブロック図である。
【図７】開示の一態様に係る、非同期コードを作成するコードローダーシステムのブロック図である。
【図８】開示される一態様に係る、注釈付け指定システムのブロック図である。
【図９】開示の一態様に係る、宣言型非同期メソッドの方法のフローチャート図である。
【図１０】開示される一態様に係る、非同期メソッド作成の方法のフローチャート図である。
【図１１】開示の一態様に係る、非同期呼び出し作成のメソッドのフローチャート図である。
【図１２】開示の一態様に係る、非同期注釈付け作成メソッドのフローチャート図である。
【図１３】対象となる開示の一態様に対する適切なオペレーティング環境を示す略ブロック図である。
【図１４】例示的なコンピューティング環境の略ブロック図である。
【発明を実施するための形態】
【００１４】
非同期メソッドに関するシステムおよび方法を以下に詳細に説明する。非同期メソッド／関数を提供するのに必要な標準コードは、極めて難解であり、結果的に、プログラマーは、実際に必要な場合であってもこのようなメソッド／関数をほとんど用いない。その結果、多くのアプリケーションは、例えば、通信の不具合のために見込みよりもずっと遅延するまたは中断さえする。
【００１５】
非同期メソッド／関数を用いることを容易にして推進するための機構を本明細書に提供する。特に、非同期性（asynchrony）は宣言型で定義される。一例において、非同期バージョンのメソッド／関数を使用する意図を示すメソッド／関数宣言（declaration）に対して属性を指定することができる。非同期呼び出しの要望を示す同期呼び出しに対して特別な関数も指定することができる。非同期メソッドまたはメソッド呼び出しを、その後に自動で作成することができる。さらにまた、プログラマーを、応答型および／非応答型ユーザ入力に基づいて属性またはリファクタリングされたコードを作成する機構によって支援することができる。
【００１６】
対象とする開示のさまざまな態様を、添付図面を参照してこれから説明するが、全体を通じて同種の番号は同種のまたは対応する要素を示す。しかしながら、図面とそれに関連する詳細な説明は、特許請求に係る発明を開示される特定の形式に限定することを意図しないことを理解されたい。むしろ、その意図するところは、特許請求に係る発明の趣旨および範囲内において修正、同等、および代替のすべてを網羅することにある。
【００１７】
最初に図１では、特許請求の範囲に係る発明の一態様による、非同期メソッド作成システム１００を示す。図のように、システム１００は、スキャナ１１０と非同期（アシンク(async)）ライター１２０とを含み、両方とも本明細書で定義されるコンポーネントである。スキャナコンポーネント１１０は、メソッド、関数および／またはその呼び出しと関連付けられて非同期をとる意図の宣言型表示のプログラムコードをスキャンする。より具体的には、スキャナコンポーネント１１０は、非同期属性コンポーネント１１２と非同期関数コンポーネント１１４とを含む。
【００１８】
非同期属性コンポーネント１１２は、とりわけ“Ａｓｙｎｃ”などの非同期属性で注釈付けするような方法、関数の識別を容易にする。属性コンポーネント１１２を介したスキャナコンポーネント１１０は、この属性で注釈付けされたメソッドまたは関数を識別することができる。例えば、非同期メソッドの宣言（空値）は、属性“Ａｓｙｎｃ”を含むあるいはそれと関連付けることができる。この属性は、対応する同期メソッドの非同期バージョンを要望しているという意図を表す。その属性に加えて、スキャナコンポーネント１１０も、要望する非同期メソッドの実装についての詳細を指定する任意の非同期実装パターンを含む他の関連付けられた情報を識別することができる。
【００１９】
非同期関数コンポーネント１１４は、非同期呼び出しに変換／書き換えなければならない同期メソッドまたは関数呼び出しを具体的に識別するときにスキャンコンポーネント１１０を支援するための機構である。メソッド定義または宣言とは異なって、呼び出しサイトを、属性ではなく“Ａｓｙｎｃ（）”等の関数呼び出しを特別に識別することによって識別することができる。非同期関数コンポーネント１１４を、それに関連する呼び出しに加え、これらの関数も識別するように構成することができる。呼び出しサイト識別関数も、実装パターンについての特別な情報で注釈付けされることも理解されたい。従って、スキャンコンポーネント１１０もさらに、この情報を識別することができる。
【００２０】
検出されると、スキャナコンポーネント１１０は、ライターコンポーネント１２０に送信あるいはアクセスして、１または複数のメソッド、関数、および／または呼び出しを識別することができる。後の節でさらに説明するように、実装パターンを含む他の情報もライターコンポーネント１２０に提供することができるが、これに限らない。
【００２１】
スキャナ情報が受信または検索されると、ライターコンポーネント１２０は、メソッド、関数、および／または呼び出しの非同期バージョンを作成または作り出すことができる。メソッドまたは関数を、対応する同期メソッドと、入手可能な実装パターンを含む他の属性または注釈付け情報との関数として作成することができる。一実装において、ライターコンポーネント１２０は、識別された同期メソッドを、その実際の定義またはツリー式表記から書き換えて、適切な場所で非同期機構を導入することができる。提供される任意の実装パターンに従って、呼び出しを非同期呼び出しに書き換えることができる。当業者には周知の特定の非同期機構または非同期パターンを含むことができる。
【００２２】
図２では、特許請求の範囲に係る発明の一態様に従って、代表的なメソッド注釈付けコンポーネント２００を図示する。注釈付けコンポーネント２００を、図１のスキャナコンポーネント１１０によって探索された入力とすることができる。さらに、注釈付けコンポーネント２００は、非同期属性２１０、同期識別子２２０、非同期識別子２３０、結果戻り識別子２４０、実装識別子２５０、および処理ステージ識別子２６０を含むいくつものサブコンポーネントを備える。非同期属性２１０は、非同期メソッドが要望されていると注釈付けする“Ａｓｙｎｃ”等の固有の属性または識別子に対応する。同期識別子２２０は、非同期メソッドを作成するのに用いられる同期メソッドを識別する。例えば、“Ａｓｙｎｃ（“Ｆ”）において“Ｆ”は、対応する同期メソッドを識別する。非同期識別子２３０は、例えば、同期名とは異なる新しく作成された非同期メソッド名を提供する。戻り結果識別子２４０は、呼び戻し、関数もしくは他の種類等の結果を戻すために用いる機構、または非同期計算を表す機構を指定する。実装識別子２５０は、要望する非同期の実装または、とりわけ、“ＢｅｇｉｎＩｎｖｏｋｅ．．．ＥｎｄＩｎｖｏｋｅ”またはＸＭＬ ＨＴＴＰリクエスト等の実装イディオムを指定する。処理ステージ識別子２６０は、どのステージまたは層で作成または変換の処理が行われるかを定義する。例えば、これは、とりわけ、中間言語（ＩＬ：intermediate language）コンパイル、ＩＬからＩＬへの変換、読み込み、またはＪＩＴコンパイル（ＪＩＴｉｎｇ：just in time compiling）のソースに対応することができる。
【００２３】
代表的な注釈付けコンポーネント２００を、実行可能なサブコンポーネントのサブセットとしてのみ提供する。もちろん、特許請求に係る発明の範囲において検討される上で、他も実行可能である。さらに、さまざまな方法において、サブコンポーネントを用いたり用いなかったり、組み合わせたり組み合わせなかったりすることができることに留意されたい。例えば、非同期属性２１０を同期識別子と共に用いることができるが、非同期識別子２３０と共に用いることはできない。あるいは、非同期属性２１０を非同期識別子２４０と組み合わせて使用することができ、そこで同期識別子がその非同期識別子から、恐らく図１のスキャナコンポーネント１１０またはそのサブコンポーネントによって推測される。
【００２４】
特許請求に係る発明の一態様に従って、図３に、代表的な非同期ライターコンポーネント１２０を図示する。作成（generation）コンポーネント３１０は、非同期メソッドまたは呼び出しを作り出す。言い換えれば、作成コンポーネント３１０は、非同期機構を導入することによって、同期メソッドまたは呼び出しを非同期メソッドまたは呼び出しに書き換えることができ、少なくともその一部の機構は当業者には周知である。特にメソッドについて、その作成を、関連するまたは対応する同期メソッド定義または実装に基づいて行うことができ、明示的に指定あるいは判定または推測することができる。さらに、作成コンポーネント３１０は、付加的に宣言されるプロパティ、優先等の関数として非同期メソッドまたは呼び出しを作り出すことができることによって非同期性の作成を制御する。このような詳細が明示的に宣言されないところでは、作成コンポーネント３１０は、コンテキスト情報の関数として適切な詳細を推測することができる。
【００２５】
図のように作成コンポーネント３１０は、戻り結果コンポーネント３２０と相互作用できる。このコンポーネントは、さまざまな戻り結果機構の実装を容易にする情報を作成コンポーネント３１０に提供する。非同期メソッドの重要な機能は、別のメソッドを呼び出して、応答を待つ間にブロックすることではなく、処理を継続しながら後で結果を受信する能力である。これらの結果を、呼び戻し、関数もしくは他の種類を含むがこれに限定されない機構または非同期計算を表す機構といった異なる戻り結果機構によって提供することができる。簡潔に言えば、呼び戻しは、被呼者によって結果が計算された後で発呼者を呼び戻すことができる関数であり、メソッドに渡される。対照的に、機能は、メソッド呼び出しの結果のプレースホルダーとして動作するオブジェクトである。発呼者が被呼者を呼び出す時、応答を待つのではなく、発呼者によって計算が継続して行われるようにできる計算の結果のプレースホルダーである機能オブジェクトが戻される。
【００２６】
作成コンポーネント３１０は、実装コンポーネント３３０によって提供される非同期メソッドを作成する情報を使用することもできる。与えられたプログラムのコンテキストに基づいて、非同期メソッドの異なる実装を要求または優先することができる。例えば、一標準的実装パターンでは、“ＢｅｇｉｎＩｎｖｏｋｅ  ａｎｄ  ＥｎｄＩｎｖｏｋｅ”と呼ばれる。ここで、委譲が生成されて、呼び出しが開始動作と終了動作とに分かれる。これは、多くの状況において有効になり得るが、ネットワークトランザクションを処理するには最適ではない場合がある。この場合、代わりにＸＭＬ ＨＴＴＰリクエストパターンを使用することができる。実装コンポーネント３３０は、必要に応じて具体的な実装の作成に関する情報を作成コンポーネント３１０に提供する。
【００２７】
注釈付けによって、実装コンポーネント３３０との相互作用を制御することができる。しかしながら、そのような情報が明示的に提供されないところでは、作成コンポーネント３１０は、デフォルト実装を用いるまたは入手可能なコンテキスト情報に基づいて適切な設定を推測することができる。例えば、関連付けられたアプリケーションまたはそれに関する部分がネットワークトランザクションを処理することが分かっているまたは推測することができる場合、作成コンポーネント３１０は、ＸＭＬ ＨＴＴＰリクエストパターンを使用して、実装コンポーネント３３０と相互作用して非同期メソッドの作成を支援することができる。
【００２８】
明確にする目的で、いくつかの例を、特許請求に係る発明の一態様を説明するのを支援するために提示する。これらは、単なる例示である。それらは、発明の範囲を限定するためではなく、むしろ或る態様を理解するのを支援するためのものである。第１の例は、被呼者に対するメソッド作成に関し、第２の例は、発呼者に関係する。
【００２９】
最初に、ハイレベル構造のプログラミング言語：“ｐｕｂｌｉｃ  Ｉｎｔ  Ｆ（ｓｔｒｉｎｇ  ｓ）”で書き込まれた以下の同期メソッドについて検討する。この場合、同期関数“Ｆ”は、文字列“ｓ”を渡して、整数を戻す。そのメソッドの非同期バージョンの使用を要望するところでは、以下のように指定することができる。 
[Async(‘‘F’’)]
public extern void Foo (string s, Action<int> callback)
【００３０】
ここで、非同期属性は、“Ａｓｙｎｃ”であり、同期メソッド識別子は、“Ｆ”である。他の識別子は、非同期属性および同期メソッド識別子の下で非同期メソッドの署名または宣言に提供される。この場合、非同期識別子は、“Ｆｏｏ”であり、戻り結果機構は、呼び戻し(callback)である。言い換えれば、“Ｆｏｏ”と名付けられたメソッド“Ｆ”の非同期バージョンは、呼び戻し機構を使用して、結果を与えることが要望されている。動作において、発呼者は、被呼者メソッド“Ｆｏｏ”に、文字列と一緒に整数をとる呼び戻し関数を渡し、被呼者は、計算が完了した時にその関数を呼び出す。ここでは図示されていないが、非同期メソッドの署名は、別の呼び戻し、つまり非同期メソッドが、例えば、計算またはネットワークの不具合に起因して不具合が起きた場合に呼び出すことができる不具合の呼び戻しを含むことができるということも留意されたい。典型的には、同じスレッド内で実行していて不具合が起こった場合、例外プロセスが実行される。しかしながら、非同期コードは同じスレッド内で実行していないので、そのコードは、バブル表示された例外を認識できない。不具合の呼び戻しは、このような例外を通知することができる機構である。
【００３１】
上記の宣言された意図に応答して、以下のようにメソッド本体を自動で作成することができる。 
[Async(‘‘F’’)]
public void Foo(string s, Callback<int> callback)
{
object[] parameters = new object[] {s};
Proxy.AsyncCall<int>(callback,
‘‘http://localhost:8081/C.agihttp://localhost:8081/C.agi’’,2,new
Guid?(this._instance),parameters);
}
【００３２】
この簡易な例において、実装は、サーバ側の“Ｆ”を呼び出すが、それを非同期で行うことに留意されたい。結局、ユーザは、「何が」そして「どのように」自動で導入されるかを指定しさえすればよい。
【００３３】
第１の例において、注釈付けがメソッドに適用された。これは、同期メソッドと非同期メソッドの両方が定義される場所を制御すると見なす。従って、同期および非同期呼び出しを行う関数を提供したいライブラリライターは、この方法においてそのように行うこともできる。同期メソッドが定義されて、次に、非同期メソッドが、実装を用いずに宣言型注釈付けを用いて定義される。残念ながら、この手法は、誰かが関連コードにアクセスできない故に、非同期の方法で第三者コードを呼び出したい場合に適切でない場合がある。この場合、呼び出す側の注釈付けを使用することができる。
【００３４】
第２の例は、このような呼び出す側の注釈付けに関する。例えば、同期メソッド呼び出し“ｘ＝ｃ．Ｆ（．．．）”について検討する。この呼び出しを非同期呼び出しに変換するために、 “ｘ＝Ａｓｙｎｃ（ｃ．Ｆ（．．．））”にあるような“Ａｓｙｎｃ”等のメソッド／関数の識別を含むことができる。その非同期メソッドを以下のように表示することができる。
Future<T> Async<T>(T value) {return new
Future<T>(value);}
【００３５】
言い換えると、それは同期して行われる。しかしながら、呼び出す側を変換して以下のように非同期で実行させることができる。
x = new Future<T>(() => c.F(…))
【００３６】
呼び出しを行う代わりに、関数構成が挿入されて、同期呼び出しを渡す。次に、“ｘ”がしばらく用いられない場合、このコードは、非同期で実行されて、“ｘ”の値が要求されるまでブロックされない。ここで、“Ｔ”の代わりに“Ｆｕｔｕｒｅ＜Ｔ＞を用いて、サンクとして動作させることができる。
【００３７】
開示の別の態様に従って、呼び出しサイト識別関数を、とりわけ実装パターンを識別する情報で注釈付けすることができることを理解されたい。例えば、 
[AsyncCallSite(…implementation/optional…)]
public extern Future<T> Async<T>(T t)
【００３８】
さまざまなプログラムレベルにおいて自動作成または変換を行うことができる。特定の実施形態によって、そのレベルを定めることができる。しかしながら、プログラマーは、以前に説明したように、プロセス識別子を提供することによって変換に使用されるレベルに影響を与えることができる。図４−７にいくつかの異なる例示的実施形態を示す。もちろん、これらの実施形態は完全ではなく、他の実施形態も実行可能である。
【００３９】
図４では、特許請求に係る発明の一態様による、コード変換システム４００を示す。ソースからＩＬへのコンパイラコンポーネント４１０によって、１または複数のプログラミング言語（例えば、Ｃ＃、ＶＢ、Ｊａｖａ、Ｃ＋＋）で指定されたソースコードを提供あるいは獲得することができる。その後に、ソースからＩＬへのコンパイラ４１０は、そのソースコードを中間言語（ＩＬ：intermediate language）コードにコンパイルまたは変換することができる。ＩＬからＩＬへのコンパイラ／トランスレータコンポーネント４２０は、ＩＬコードのさらなる処理を提供することができる。ここで、ＩＬからＩＬへのコンパイラ／トランスレータコンポーネント４２０は、以前に説明したように、非同期メソッド作成システム１００をサブコンポーネントとして含むことができる。従って、そのような実装が無い、非同期として識別されたメソッドまたはメソッド呼び出しに実装を提供するためのコードを導入することができる。その後に、ＩＬからターゲットへのコンパイラ／トランスレータコンポーネント４３０によって、そのＩＬコードをターゲットコードにコンパイルまたはトランスレートすることができる。特定の一実装において、そのＩＬコードを、ウェブブラウザにおいて解釈かつ実行するためのＥＣＭＡスクリプト（Ｊａｖａスクリプト、Ｊスクリプト）等の言語に変換することができる。
【００４０】
ＩＬレベルにおいて非同期メソッド作成を呼び出すことは、いくつかの利点がある。第１に、開発者は、非同期のシンタックス注釈付けを、ＩＬにコンパイルする任意のプログラミング言語に挿入することができる。これによって、多くの言語において非同期メソッドの作成が実現できる。第２に、ソースコードは、非同期性の複雑さによって難読化されない。むしろ、そのコードは、理解しやすい宣言型注釈付けのみを含むことができる。第３に、この実施形態は安定している。ソースコードを継続して生成するために使用されるようなプログラミング言語は、新しい機能を付加しながら展開するが、ＩＬは、そうなったとしても変更がかなり少ない。さらに、ＩＬレベル上ではすべてのツーリング(tooling)はアップストリームであるので、用いられる言語に強固に接続されるツーリング(tooling)への影響はゼロに近い。
【００４１】
図５に、ソースコードレベルにおいて非同期のコード作成／変換が行われるコード変換システム５００を示す。図のように、システム５００は、ソースからＩＬへのコンパイラ４１０を含む。以前に説明したように、コンパイラ４１０は、１または複数の言語からのソースコードを中間言語コードにトランスレートする。さらに、ソースからＩＬへのコンパイラ４１０は、そのコンポーネントとして非同期メソッド作成システム１００を含む。コンパイラ４１０は、そのため、注釈付けまたは他の特別なシンタックスに従ったメソッドに対して非同期メソッドまたは呼び出しの実装を作成することができる。これらの非同期の実装を、次に、他のコードと同じ方法で中間言語にトランスレートすることができる。作成されたＩＬを、次に、ＩＬからＩＬへのコンパイラ／トランスレータ４２０に任意に提供して、ＩＬコードのさらなる変換を提供することができる。結果として得られたＩＬコードは、ＩＬからターゲットへのコンパイラ／トランスレータ４３０の入力として動作することができる。例えば、そのＩＬを、ウェブブラウザにおいて実行するためのスクリプト言語にコンパイルすることができる。この実施形態の実装は、結果的に言語コンパイラごとに非同期メソッド作成コンポーネント１１０を作り出すことができる。
【００４２】
図６では、特許請求の範囲に係る発明の一態様による、コード変換システム６００を図示する。システム６００は、以前に説明したように、ソースからＩＬへのコンパイラ４１０とＩＬからＩＬへのコンパイラ／トランスレータ４２０とを含むことができる。さらに、システム６００は、ＩＬからターゲットへのコンパイラ／トランスレータコンポーネント４３０を含む。この実施形態において、非同期メソッド作成システム１００を、ＩＬからターゲットへのコンパイラトランスレータコンポーネント４３０のコンポーネントとすることができる。一例において、コンポーネント４３０は、ＪＩＴ(just in time)コンパイラに対応することができる。従って、非同期の注釈付けまたは他の特別なシンタックスに従って非同期の実装を実行時に動的に導入することができる。
【００４３】
特許請求の範囲に係る発明の一態様に従って、図７に、プログラムローダーシステム７００を示す。ローダーシステム７００は、実行可能なコンピュータプログラムを受信あるいは獲得して、それをメモリ７２０に読み込むローダーコンポーネント７１０を含む。これは、メモリ７２０からその後に実行されるプログラムを準備する。標準システムとは異なり、ローダーコンポーネント７１０は、以前に説明した非同期メソッド作成システム１００をコンポーネントとして含む。メモリに読み込む前に、非同期メソッドの実装および／または呼び出しを、それぞれ、宣言型注釈付けおよび／または呼び出しサイト識別関数に従って、導入することができる。
【００４４】
特許請求の範囲に係る発明の一態様に従って、図８では、注釈付け指定システム８００を提供する。システム８００は、ユーザインタフェースコンポーネント８１０と注釈付け作成コンポーネント８２０とを含む。ユーザインタフェースコンポーネント８１０は、システム８００とのユーザ相互作用を容易にする。より詳細には、非同期メソッドおよび／または呼び出しを宣言型で識別することに関する情報を、ユーザから利用するおよび／または獲得することができる。本開示の特許請求の範囲の態様に従って、注釈付け作成コンポーネント８２０は、非同期メソッドおよび／または呼び出しの作成のために必要な属性または注釈付けを作り出す。注釈付け作成コンポーネントは、従って、コードリファクタリングの関数機能を提供する。
【００４５】
注釈付け作成コンポーネント８２０は、属性または注釈付けの作成についての情報を受動的または能動的に獲得することができる。例えば、ユーザインタフェースコンポーネント８１０は、単に注釈付け作成コンポーネント８２０から情報を受信したり渡したりするための機構として動作することができる。あるいは、注釈付け作成コンポーネント８２０は、ユーザからユーザインタフェースコンポーネント８１０を介した情報を能動的に呼ぶことができる。例を挙げると、注釈付け作成コンポーネント８２０は、同期メソッド名、非同期メソッド名、戻り結果機構、および／または非同期実装イディオム等の情報を要求するウィザードとして動作することができる。一実施形態において、システム８００は、１または複数の開発ツールとするまたはその一部を成すことができる。結果として、非同期性をとる宣言型は、直接の仕様よりもさらに容易に行うことができる。
【００４６】
いくつかのコンポーネント間の相互作用に対して上述のシステム、アーキテクチャ等を説明した。そのようなシステムおよびコンポーネントは、それらに指定されたコンポーネントまたはサブコンポーネント、その指定されたコンポーネントまたはサブコンポーネントの一部、および／または付加的なコンポーネントを含むことができることを理解されたい。サブコンポーネントも、親コンポーネント内に含まれるのではなく、他のコンポーネントに通信接続されるコンポーネントとして実装されることもあり得る。さらにまた、１または複数のコンポーネントおよび／またはサブコンポーネントを組み合わせて単一のコンポーネントにして、統合された関数機能を提供できる。プッシュおよび／またはプル方式のいずれかに従って、システム、コンポーネントおよび／またはサブコンポーネント間の通信を達成することができる。コンポーネントは、簡潔にするために本明細書で具体的に説明されていないが、当業者には周知である１または複数の他のコンポーネントと相互作用することもできる。
【００４７】
さらに、当然のことながら、上記に開示されたシステムおよび以下のメソッドのさまざまな部分は、人工知能、機械学習、またはコンポーネント、サブコンポーネント、プロセス、手段、方法論に基づいた知識またはルール、または機構（例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアン信念ネットワーク、ファジー理論、データ融合エンジン、分類子）を含むまたはそれから構成されることができる。このようなコンポーネントは、とりわけ、それによって行われる或る機構またはプロセスを自動化して、そのシステムおよびメソッドを効率的で知的にすることに加え、より適用できるようにすることもできる。例を挙げると、非同期コンポーネント１２０は、このような機構を使用して、明示的に提供されない属性情報を推測あるいは判定することができるが、これに限らない。例えば、同期名ではなく非同期メソッドの署名を用いて非同期属性が指定されるところでは、非同期および同期メソッド名は同じであると推測することができる。
【００４８】
上述した例示的システムに鑑みて、開示された発明に従って実装できる方法は、図９−１１のフローチャートを参照してより理解されるであろう。説明を簡潔にする目的で方法を一連のブロックとして説明しているが、当然のことながら、特許請求の範囲に係る発明は、或るブロックが本明細書で図示されるものとは異なる順序および／または他のブロックと同時に起こり得るように、一連のブロックの順序によって限定されない。さらに、図示されたブロックが、以下に説明される方法を実装するのにすべて必要ではない。
【００４９】
特許請求の範囲に係る発明の一態様に従って、図９では、非同期メソッド宣言型９００の方法を図示する。参照数字９１０において、同期メソッド（または関数）が識別される。識別されたメソッドは、非同期通信を要望しているメソッドに対応する。参照数字９２０において、非同期の意図は、非同期バージョンの要望を示す識別されたメソッドと関連して宣言によって識別される。これを、特定のシンタックスまたは注釈付けをメソッドまたはメソッド宣言に提供することによって達成することができる。例えば、“Ａｓｙｎｃ”属性を同期メソッド定義あるいは非同期メソッドの空宣言に貼り付けることができる。単独の属性またはそれと関連付けられた他の情報との組み合わせにおける属性は、とりわけ、非同期メソッド名、戻り結果機構、および実装イディオム等の非同期メソッドの作成に影響を与えることができる。メソッド呼び出しを、属性を使用するのではなく、その呼び出しが同期ではなく非同期で行われるという意図を示す“Ａｓｙｎｃ（．．．）”等の特別な関数呼び出しが、同期呼び出しサイトにおいて提示される場合を除く同様の方法で宣言して作成することができることを理解されたい。
【００５０】
対象とする特許請求の範囲の態様に従って、図１０に、非同期メソッド作成１０００の方法を示す。参照数字１０１０において、非同期メソッドの属性が識別される。例えば、プログラムをスキャンしてメソッド定義または宣言に貼り付ける“Ａｓｙｎｃ”と呼ばれる属性等を探すことができる。数字１０２０において、関連する同期メソッド／関数が識別される。非同期属性が同期メソッド定義に直接貼り付けられるところでは、その同期メソッドを容易に識別することができる。別の実装において、属性と関連付けられるさらなる情報を検索してそのようなメソッドを識別することができる。例えば、“Ａｓｙｎｃ“Ｆ”は、“Ｆ”と呼ばれる同期メソッドの非同期バージョンが要望されていることを示すことができる。同期メソッド名が明示的に識別されない場合、例えば、とりわけ、非同期メソッドの署名に基づいてそれを推測することができる。参照数字１０３０において、関連する同期メソッドに加えて、非同期メソッドコードが、非同期属性および他の関連する情報の関数として作り出される。言い換えれば、同期メソッドは、注釈付けに従った非同期機構の導入を介して非同期メソッドに変換される。
【００５１】
図１１では、フローチャート図に、非同期呼び出し作成の方法１１００を示す。参照数字１１１０において、特別な関数が同期呼び出しサイトにおいて識別される。例えば、関数を、“ｘ＝Ａｓｙｎｃ（ｃ．Ｆ（．．．））”にあるような“Ａｓｙｎｃ（）”とすることができる。その関数の種類は、“Ｆｕｔｕｒｅ＜Ｔ＞Ａｓｙｎｃ＜Ｔ＞（Ｔ  ｔ）”またはその他の非同期計算の表記である。参照数字１１２０において、呼び出しは、非同期呼び出しとして書き換えられる。言い換えれば、非同期呼び出しが作成されて導入される。例えば、“ｘ＝Ａｓｙｎｃ（ｃ．Ｆ（．．．））”を、“ｘ＝ｎｅｗ  Ｆｕｔｕｒｅ＜Ｔ＞（（）＝＞ｃ，Ｆ（．．．））”として書き換えることができる。
【００５２】
図１２では、特許請求の範囲に係る発明の一態様による、非同期注釈付け作成の方法１２００を示すフローチャート図を提供する。一実施形態に従って、方法１２００を、統合開発環境（ＩＤＥ：integrated development environment）と関連付けられた１または複数の開発ツールによって行うことができる。参照数字１２１０において、非同期性についての情報は、ユーザから要求される。例えば、そのような要求は、対応する同期メソッドの識別および、とりわけ、要望する実装についての詳細を含むことができる。参照数字１２２０において、情報はユーザから受信される。この情報は、動作１２１０または非応答型の情報によって要求されたものとすることができる。数字１２３０において、受信された情報に従って、属性が作成される。属性は、実装についての優先を含むさまざまな情報を含むことができる。しかしながら、最も単純な場合、それは、“Ａｓｙｎｃ”等の単純な識別子とすることができる。参照数字１２４０において、プログラムコードが属性および関連する任意の情報／パラメータで注釈付けされる。
【００５３】
概して、方法１２００は、コードの注釈付け、より詳細には非同期メソッド作成／変換を容易にするのに役立つ。例を挙げると、ＩＤＥにおいて、ユーザは、メソッド上で右クリックしてそのリファクタリングを開始する、またはそのメソッドの非同期バージョンを作成することができる。ＩＤＥは、次に、非同期属性をそのメソッドに貼り付けることができる。さらにまた、右クリックすることによって、ユーザに質問するダイアログボックス、例えば、「非同期バージョンを異なる名前にしたいですか？それとも同じ名前にしたいですか？」、「呼び戻し機構を用いたいですか？それとも呼び戻し機能を用いたいですか？」、「実装を明示するためにどんな設計パターンまたはイディオムを用いたいですか？」等が開くようにできる。次に、ユーザに提供するそのような情報をすべて捕える注釈付けを作り出すことができる。それ以外では、デフォルト設定またはコンテキスト情報の関数として推測される最適パラメータを用いることができる。
【００５４】
用語「メソッド」と「関数」とは、本明細書ではほぼ同じ意味で使用される。「関数」は、標準的には、動作を行う一つのコードを示す。一方、「メソッド」は、オブジェクトに対する関数である。しかしながら、本明細書に限らず実際において、その用語は、オブジェクトを伴うか否かにかかわらず、具体的なルーチンまたは動作を指定する一つのコードを単に示すためにほぼ同じ意味で用いられる。
【００５５】
単語「例示的な」またはそのさまざまな形式は、本明細書では、例、実例、または図解としての役割をする意味で用いられる。本明細書で「例示的な」として説明される任意の態様または設計は、他の態様または設計に対して必ずしも優先されるまたは有利であると解釈されるものではない。さらに、例は、明確さおよび理解を唯一の目的として提供され、特許請求の範囲に係る発明または本開示の関連部分がいかなる方法によっても限定または制限されることを意図しない。さまざまな範囲の付加的または代替可能な例を多く提示することも可能であったが、簡潔にする目的で省略されていることを理解されたい。
【００５６】
本明細書で用いられるように、用語「推測」または「推測する」は、一般的に、イベントおよび／またはデータを介して捕えられるような観察のセットからシステム、環境、および／またはユーザの状態について推論または推測するプロセスを示す。推測を用いて、具体的なコンテキストまたは動作を識別することができる、または例えば、状態に対する確立分布を作成することができる。推測は、確立的、つまり、データおよびイベントの検討に基づく興味の状態に対する確立分布の計算とすることができる。推測は、イベントおよび／またはデータのセットからより高レベルのイベントを構成するために用いられる技術を示すこともできる。イベントが一時的に近接して相関するか否かにかかわらず、およびイベントおよびデータが１または複数のイベントおよびデータソースに由来するか否かにかかわらず、そのような推測は、結果として観察されたイベントおよび／または格納されたイベントデータのセットから新しいイベントまたは動作を構築する。対象とする技術革新に関連して、さまざまな分類方式および／またはシステム（例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアン信念ネットワーク、ファジー理論、データ融合エンジン）を自動および／または推測動作することに関連して用いることができる。
【００５７】
さらに、ソフトウェア、ファームウェア、ハードウェアを作り出すための標準のプログラミングおよび／またはエンジニアリング技術、またはコンピュータを制御して開示された技術革新を実装するその任意の組み合わせを用いて、対象とする技術革新のすべてまたは一部をメソッド、装置、または製品として実装できる。本明細書で用いられる用語「製品」は、任意のコンピュータ可読デバイスまたは媒体からアクセスできるコンピュータプログラムを範囲とすることを意図する。例えば、コンピュータ可読媒体は、磁気ストレージデバイス（例えば、ハードディスク、フロッピーディスク、磁気帯）、光ディスク（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ））、スマートカード、およびフラッシュメモリデバイス（例えば、カード、スティック、キードライブ）を含むことができるが、これに限らない。さらに、搬送波を用いて、電子メールを送受信する時またはインターネットもしくはローカルエリアネットワーク（ＬＡＮ）等のネットワークにアクセスする時に用いられるようなコンピュータ可読電子データを運ぶことができることを理解されたい。もちろん、特許請求の範囲に係る発明の範囲または趣旨から逸脱せずに、この構成に対して多くの変更が行われてもよいことを当業者は理解されたい。
【００５８】
開示された発明のさまざまな態様にコンテキストを提供するために、以下の考察に加えて図１３および１４も、開示された発明のさまざまな態様を実装できる適切な環境の簡潔で、一般的な説明を提供することを意図する。１または複数のコンピュータ上で実行するプログラムのコンピュータ実行可能命令の一般的なコンテキストにおいて発明を上記で説明しているが、対象とする技術革新も他のプログラムモジュールとの組み合わせにおいて実装できることを当業者は理解されたい。一般的に、プログラムモジュールは、特定のタスクを行うおよび／または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。さらに、システム／方法を、パーソナルコンピュータ、ハンドヘルドコンピューティングデバイス（例えば、パーソナルデジタルアシスタント（ＰＤＡ）、電話、時計）、マイクロプロセッサベースまたはプログラマブル家庭用もしくは業務用電化製品等に加えて、単一プロセッサ、マルチプロセッサもしくはマルチコアプロセッサコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータを含む他のコンピュータシステム構成に実施できることを当業者は理解されたい。図示された態様は、タスクが、通信ネットワークを通じて接続されるリモート処理デバイスによって行われる分散コンピューティング環境において実施することもできる。しかしながら、すべてではないが、一部において、特許請求の範囲に係る発明の諸態様をスタンドアロンのコンピュータ上で実施することができる。分散コンピューティング環境において、プログラムモジュールを、ローカルメモリストレージデバイスとリモートメモリストレージデバイスとの両方に置くことができる。
【００５９】
図１３の参照では、本明細書で開示されるさまざまな態様を実装するための例示的環境１３１０は、コンピュータ１３１２（例えば、デスクトップ、ラップトップ、サーバ、ハンドヘルド、プログラマブル家庭用または業務用電化製品）を含む。コンピュータ１３１２は、処理ユニット１３１４、システムメモリ１３１６、およびシステムバス１３１８を含む。システムバス１３１８は、システムメモリ１３１６を含むシステムコンポーネントを処理ユニット１３１４に接続するが、これに限らない。処理ユニット１３１４は、入手可能なさまざまなマイクロプロセッサのいずれにもすることができる。二重プロセッサ、マルチコアおよび他のマルチプロセッサアーキテクチャを、処理ユニット１３１４として用いることができることを理解されたい。
【００６０】
システムメモリ１３１６は、揮発性および不揮発性メモリを含む。コンピュータ１３１２において、起動時等の、要素間で情報を転送するための基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）は、不揮発性メモリに格納される。実例として、不揮発性メモリは、リードオンリーメモリ（ＲＯＭ）を含むことができるが、これに限らない。揮発性メモリは、処理を容易にする外部キャッシュメモリとして動作することができるランダムアクセスメモリ（ＲＡＭ）を含む。
【００６１】
コンピュータ１３１２は、リムーバブル／ノンリムーバブル、揮発性／不揮発性コンピュータストレージ媒体も含む。図１３に、例えば、マスストレージ１３２４を図示する。マスストレージ１３２４は、磁気または光ディスクドライブ、フロッピーディスクドライブ、フラッシュメモリ、またはメモリスティック等のデバイスを含むが、これに限らない。さらに、マスストレージ１３２４は、ストレージ媒体を単独でまたは他のストレージ媒体と組み合わせにおいて含むことができる。
【００６２】
図１３に、ユーザおよび／または他のコンポーネントと、適切なオペレーティング環境３１０において説明された基本コンピュータリソースとの間の中間として動作するソフトウェアアプリケーション１３２８を提供する。そのようなソフトウェアアプリケーション１３２８は、システムまたはアプリケーションソフトウェアの１つまたは両方を含む。システムソフトウェアは、コンピュータシステム１３１２のリソースを制御して割り当てるマスストレージ１３２４上に格納することができるオペレーティングシステムを含むことができる。アプリケーションソフトウェアは、システムメモリ１３１６またはマスストレージ１３２４のいずれかまたは両方に格納されるプログラムモジュールおよびデータを介したシステムソフトウェアを利用することによって、リソースを管理をする。
【００６３】
コンピュータ１３１２は、バス１３１８に通信接続されてコンピュータ１３１２との相互作用を容易にする、１または複数のインタフェースコンポーネント１３２６も含む。例を挙げると、インタフェースコンポーネント１３２６は、ポート（例えば、シリアル、パラレル、ＰＣＭＣＩＡ、ＵＳＢ、ファイアワイア）またはインタフェースカード（例えば、音声、ビデオ、ネットワーク）等とすることができる。インタフェースコンポーネント１３２６は、（有線または無線で）入力を受信して出力を供給することができる。例えば、入力を、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、カメラ、その他のコンピュータ等のポインティングデバイスを含むデバイスから受信することができるが、これに限らない。コンピュータ１３１２によって、出力を、インタフェースコンポーネント１３２６を介して出力デバイスに供給することもできる。出力デバイスは、とりわけ、ディスプレイ（例えば、ＣＲＴ、ＬＣＤ、プラズマ）、スピーカ、プリンタ、およびその他のコンピュータを含むことができる。
【００６４】
図１４は、対象とする技術革新を相互作用することができる例示的なコンピューティング環境１４００の略ブロック図である。システム１４００は、１または複数のクライアント１４１０を含む。クライアント１４１０は、ハードウェアおよび／またはソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）とすることができる。システム１４００は、１または複数のサーバ１４３０も含む。従って、システム１４００は、他のモデルの中でもとりわけ、二層構造クライアントサーバモデルまたは多層構造モデル（例えば、クライアント、中間層サーバ、データサーバ）に対応することができる。サーバ１４３０は、ハードウェアおよび／またはソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）とすることもできる。サーバ１４３０は、対象とする技術革新の態様を用いることによって、例えば、スレッドを格納して変換を行うことができる。クライアント１４１０とサーバ１４３０との間の１つの実行可能な通信を、２または３以上のコンピュータプロセス間で送信されるデータパケットの形式にできる。
【００６５】
システム１４００は、クライアント１４１０とサーバ１４３０との間の通信を容易にするために用いることができる通信フレームネットワーク１４５０を含む。クライアント１４１０は、クライアント１４１０にローカルな情報を格納するために用いることができる１または複数のクライアントデータストア１４６０に動作的に接続される。同様に、サーバ１４３０は、サーバ１４３０にローカルな情報を格納するために用いることができる１または複数のサーバデータストア１４４０に動作的に接続される。
【００６６】
クライアント／サーバ相互作用を、特許請求に係る発明のさまざまな態様に対して使用することができる。例を挙げると、通信フレームネットワーク１４５０を通じて、メソッド呼び出しを、クライアント１４１０とサーバ１４３０との間で行うことができるが、これに限らない。さらに、開示された態様を、１または複数のクライアント１４１０およびサーバ１４３０上で実行するためにアプリケーションコードが分割または分散される層分割を、クライアント１４１０またはサーバ１４３０上で行う具体的なコンパイラまたはトランスレータに組み込むことができる。これによって、開発者が、オブジェクトアイデンティティなどの本質的なプログラムの語義を保存する一方で、強力な多層コードを簡単に書き込むことができる。
【００６７】
上述したものには、特許請求の範囲に係る発明の諸態様の例を含む。もちろん、特許請求の範囲に係る発明を説明する目的でコンポーネントまたは方法の考えられるすべての組み合わせを説明することは不可能であるが、開示された発明のさらに多くの組み合わせおよび置換が実行可能であることを当業者は理解されたい。従って、開示された発明は、添付の特許請求の範囲の趣旨および範囲内において、そのような代替、変更、および変形のすべてを受け入れることを意図する。さらに、用語「含む」、「包含する」、「有する(has)」、「有している(having)」またはその変形は、詳細な説明または特許請求範囲のいずれかにおいて用いられる範囲において、そのような用語は、「備える」が用いられた場合、特許請求において変更できる単語として解釈されるので、用語「備える」と同様の方法で包括されることを意図する。
【図１】
2011515741.tif 000003
【図２】
2011515741.tif 000004
【図３】
2011515741.tif 000005
【図４】
2011515741.tif 000006
【図５】
2011515741.tif 000007
【図６】
2011515741.tif 000008
【図７】
2011515741.tif 000009
【図８】
2011515741.tif 000010
【図９】
2011515741.tif 000011
【図１０】
2011515741.tif 000012
【図１１】
2011515741.tif 000013
【図１２】
2011515741.tif 000014
【図１３】
2011515741.tif 000015
【図１４】
2011515741.tif 000016
【国際調査報告】
2011515741.tif 000017
2011515741.tif 000018