(57)【要約】  プログラム補助を、統合開発環境（ＩＤＥ）内に動的型に対して提供する。遅延バインディングのコンストラクトに関連付けられた型を、静的情報から推論すること及び／又は設計のときの実行から決定することができる。次に、補助を、明確な及び／又は推測の型に応じて提供することができる。更に、例えば、動的型補助を、静的型補助と共同して使用して、事前バインディング及び遅延バインディングの両方をサポートするプログラムの開発を容易にすることができる。
2010530590.tif 000002
【特許請求の範囲】
【請求項１】
統合されたプログラム開発のシステムであって、
遅延バインディングのプログラムのコンストラクトに対して１つ又は複数の候補の型を識別する動的型コンポーネントと、
型に応じてコードエディターにサジェスチョンを提供してプログラムの記述を容易にする補助コンポーネントと
を備えたことを特徴とするシステム。
【請求項２】
前記動的型コンポーネントは、プログラムの静的分析を実行して前記遅延バインディングのコンストラクトに対して可能性のある型を識別すること特徴とする請求項１に記載のシステム。
【請求項３】
前記動的型コンポーネントは、プログラムの設計のときの実行により遅延バインディングのプログラムコンストラクトに対して明確な型を識別すること特徴とする請求項１に記載のシステム。
【請求項４】
前記補助コンポーネントによる使用のために事前バインディングのプログラムのコンストラクトに対して型を識別する静的型コンポーネントをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項５】
提供されたサジェスチョンを予め定められた個数の最も関係のあるサジェスチョンに制限するフィルターコンポーネントをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項６】
関連する型が正しいとする見込みに応じての各サジェスチョンの関連性をランク付けするランク付けコンポーネントをさらに備えたことを特徴とする請求項５に記載のシステム。
【請求項７】
少なくとも１つのサジェスチョンは、候補の型にマッチするメンバーを識別することを特徴とする請求項５に記載のシステム。
【請求項８】
前記候補の型及び／又は前記関連するサジェスチョンを維持して実行を最適化する最適化コンポーネントをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項９】
プログラマの記述の通りに動的型を静的型へ変換するリファクターコンポーネントをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項１０】
前記動的型コンポーネント及び／又は前記補助コンポーネントのビヘイビアーを加える又は変えるエクステンションコンポーネントをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項１１】
オブジェクト指向プログラム開発を補助する方法であって、
設計のときに遅延バインディング呼び出しについてのレシーバーに対して少なくとも１つの型を決定するステップと、
選択及び自動コード完了のために前記型の１組のメンバーをプログラマに表示するステップと
を備えたことを特徴とする方法。
【請求項１２】
コードの静的分析を実行して前記型を推論するステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１３】
設計のときのコードの実行から前記型を識別するステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記型が正しいとする見込みより決定される関連性の順に前記メンバーを表示するステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１５】
明確な型及び／又は推測の型から得られるメンバーを示すステップをさらに備えたことを特徴とする請求項１４に記載の方法。
【請求項１６】
キャッシュから前記少なくとも１つの型及び／又はメンバーを検索するステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１７】
インデックスを使用して前記型のメンバーを識別するステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１８】
選択されたメンバーに応じて動的呼び出しを静的呼び出しと取替えるステップをさらに備えたことを特徴とする請求項１１に記載の方法。
【請求項１９】
プログラムの記述を容易にするシステムであって、
設計のときに遅延バインディング呼び出しに対して１つ又は複数の可能性のある型を決定する手段と、
前記１つ又は複数の型にマッチするメンバーをコードエディター内に表示する手段と
を備えたことを特徴とするシステム。
【請求項２０】
１つ又は複数の静的型を決定する手段をさらに備えたことを特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム補助に関し、より詳細には、遅延バインディングのプログラム補助に関する。
【背景技術】
【０００２】
コンピュータープログラムは、コンピューター又は他のプロセッサベースのデバイスにより実行されるアクションを記述する命令の集まりである。コンピュータープログラムがコンピューターハードウェアにロード且つ実行されると、コンピューターは、コンピュータープログラムの命令に従うことより、予め決められたように動作するものである。従って、コンピューターは、命令より定められるタスクを実行する特殊化したマシンになる。
【０００３】
１つ又は複数のプログラミング言語を使用するプログラマは、コンピュータープログラムの全体を構成する命令を作成する。通常、ソースコードは、プログラマが手を使って及び／又は統合開発環境（ＩＤＥ）を使って指定又は編集される。次に、ソースコードを、コンパイルするか又はさもなければ別のプログラムがコンピューター又は類するデバイスにより実行可能なコンピューター命令に変換することができる。
【０００４】
一例として、プログラマは、オブジェクト指向プログラミング言語（例えば、Visual Basic、Ｃ＃、Java（登録商標）等）を使用する、実行されるコードを選択することができる。上記の状況の通りに、プログラマは、抽象的なものの属性及び特性を識別する多くのクラスを作成し、同様にクラスのビヘイビアー又はアクティビティを記述する多くのメソッドを作成するものである。次に、特定のプログラム論理を、クラス若しくはオブジェクトのインスタンスの間の、又は他のものの間の相互作用として指定することができる。次に、個別のマシン用の実行可能なコードを、結びつけられたコンパイラが生成することができる。あるいはまた、コードをターゲットの仮想マシン用の中間コード（例えば、共通中間言語（ＣＩＬ）、Java（登録商標）バイトコード等）に変換して、中間コードの更にいっそうのコンパイル又は解釈によって、複数のコンピュータープラットフォーム上の実行を容易にすることができる。
【０００５】
従来、プログラミング言語は、静的型か動的型かの何れかである。型は、データの解釈の制約を、言語の型システムに従って与える。従って、型を使用して、型チェックを行うことによってプログラミングエラーを検出することができる。すなわち、わずかのプログラムの安全姓を、無意味な又は無効らしいコードを検出することによりデータ型に応じて取得することができる。上記を、静的か動的かの何れかに達成することができる。静的型言語は、コンパイルするときに、プログラムに対して、型チェックを行うことができるようにする。従って、全ての型を、コンパイルするときに、例えば、明示的な記述又は型推論によって判断する。動的型言語は、実行するときに、型チェックを行う点において異なる。結果として、型を、使用する前に明示的に記述する必要がなく、むしろ実行中に決定する。
【０００６】
言語を選ぶときに、プログラマは、静的型と動的型との間のトレードオフを考慮する必要がある。特に、静的型は、エラーを、実行する前に検出することができ、及びプログラムを、非常に効率的に実行することができることにおいて有益である。更に、例えば型に基づいて自動設定及び自動提案等の補助を提供することができるので、設計の時間体験を改善することができる。しかしながら、動的型言語は、実行時間のチェックをすることによってわずかの型の安全性が依然として与えられている間には、静的型言語よりも、プログラミングに、より柔軟性があるとすることができる。更に、動的型言語は、プログラマが型記述に関与する必要がないので、使用することがより容易である。
【発明の概要】
【０００７】
以下は、主張される主題の幾つかの側面の基本的な理解を与えるために簡略化された概要を示す。本発明の概要は、広範囲にわたる概観ではない。重要な／決定的な要素を識別すること、又は主張される主題の範囲の境界を明示することを意図しない。唯一の目的は、以下に示す、より詳細な説明の前置きとして、簡略化された形式において幾つかの概念を示すことである。
【０００８】
簡潔に説明すると、主題の開示は、プログラム補助を提供準備することに関係する。より具体的にいうと、プログラム補助を、動的／遅延バインディングの型及び／又は呼び出しに関して提供することができる。動的型の補助を、単独において又は静的型の補助と連係して使用することができて、全体的なプログラム開発を容易にする。上記は、プログラマが型について心配せずに問題を調査する、非常にはしこいプログラミングスタイルを可能にする。次に、設計が具体化するので、静的型を加えて、型の安全性及び効率的な実行を提供することができる。
【０００９】
開示の１つの側面のとおりに、動的型を、静的情報及び／又は設計のときの実行から確かめることができる。例えばプログラムのフロー分析、プログラムのプロファイル、プログラマのプロファイル及び先の実行から現れること等の静的情報を使用して、おおよその又は推測の動的型を識別することができる。加えて又はあるいはまた、明確な型を、設計のときのプログラム実行から識別することができる。
【００１０】
開示の別の側面によると、プログラム補助を、１つ又は複数の識別された静的型に応じて提供することができる。１つのインスタンスにおいて、上記の補助は、メンバーをリストアップすること及び自動コード完了に付随することができる。上記の場合には、メンバーを、１つ又は複数の明確な及び／又はおおよその型に応じて、選択及び自動コード完了のために提供することができる。更に、種々の技法を、ユーザーに与えて、関係のあるプログラム補助を提供する。
【００１１】
上述の及び関連した目的の達成に対して、主張される主題の、ある例示的な側面を、本明細書において、以下の説明及び添付された図面に関連して説明する。上記の側面は、主題を実行することができる種々の方法の表していて、全ては、主張される主題の範囲内にあることを意図する。他の利点及び新規の機能は、以下の発明を実施するための形態から、図面と連係して考慮されると明らかになることができよう。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る主張される主題の側面の通りのプログラム開発システムのブロック図である。
【図２】本発明の一実施形態に係る典型的な動的型コンポーネントのブロック図である。
【図３】本発明の一実施形態に係る典型的な補助コンポーネントのブロック図である。
【図４】本発明の一実施形態に係る最適化されたプログラム開発システムのブロック図である。
【図５】本発明の一実施形態に係る静的型と動的型との両方に対して補助を提供準備するプログラム開発システムのブロック図である。
【図６】本発明の一実施形態に係る自動のリファクターをサポートするプログラム開発システム６００のブロック図である。
【図７】本発明の一実施形態に係る拡張可能なプログラム開発システムのブロック図である。
【図８】本発明の一実施形態に係るプログラム開発を容易にする方法のフローチャートである。
【図９】本発明の一実施形態に係るプログラム補助を提供準備する方法のフローチャートである。
【図１０】本発明の一実施形態に係る遅延バインディングのコンテキストと事前バインディングのコンテキストとの間において推移する方法のフローチャートである。
【図１１】本発明の一実施形態に係る主題の開示の側面に適しているオペレーティング環境を例示する図式的なブロック図である。
【図１２】本発明の一実施形態に係る見本コンピューター処理環境の図式的なブロック図である。
【発明を実施するための形態】
【００１３】
システム及び方法を、統合開発環境内における遅延バインディング又は動的型のプログラム補助に関して説明する。明確な及び／又は推測の型を、設計の時間分析を使用するコンストラクトに対して識別することができ、及び明確な及び／又は推測の型を利用して自動コード完了を含むプログラム記述において有用な補助を提供することができる。種々の機構を使用して、最も関連のある補助を提供準備することができる。更に、動的型のプログラム補助を、静的型のプログラム補助と合同して提供準備することができる。
【００１４】
主題の開示の種々の側面を、添付の図面を参照して説明するが、同一の符号は、全体を通して同一又は対応する要素を引用する。しかしながら、図面及び関連する詳細な説明は、主張される主題を開示される部分的な形式に制限することを意図しないことが理解されるべきである。むしろ、意図は、主張される主題の精神及び範囲内に収まる全ての変更、等価及び代替に及ぶ。
【００１５】
図１を最初に参照すると、プログラム開発システム１００を、主張される主題の通りに例示する。１つのインスタンスにおいて、プログラム開発システム１００は、制限なしに、コードエディターを含む統合開発環境（ＩＤＥ）又はその一部に対応する。とりわけ、プログラム開発システム１００は、動的型コンポーネント１１０及び補助コンポーネント１２０を含む。
【００１６】
動的型コンポーネント１１０は、遅延バインディングのプログラムコンストラクト用に型を決定する機構である。以下に更に詳細に説明するように、動的型コンポーネント１１０は、明確な型及び／又はプログラムのデータ型の推測又は推定を、決定する、推論するにせよそうでないにせよ識別する又は確かめるのに使用することができる。更に、動的型コンポーネント１１０は、実行時間よりむしろ設計するときに１つ又は複数の型を識別することができる。
【００１７】
補助コンポーネント１２０は、動的型コンポーネント１１０により生成される型情報を、受信する、検索するにせよそうでないにせよ取得し又は獲得し、及びこれに基づいてフィードバックを生成する。とりわけ、型ベースのフィードバックは、プログラム記述又はコード記述を容易にすることができる。１つのインスタンスにおいて、補助コンポーネント１２０は、プログラマを助けるためのサジェスチョン、リコメンデーション又はヒントを提供することができる。一例として及び制限なしに、プログラマがオブジェクトレシーバー（object receiver）及びドット演算子（「．」）を指定する場合には、コンポーネント１２０は、識別されたレシーバーの型又はクラスより提供されるオブジェクトメンバーを含む幾つかのステートメント完了のオプションを識別するプルダウンメニューを提供することができる。
【００１８】
プログラム開発システム１００の１つの利点は、はしこいプログラミングスタイルを可能にする点である。プログラマが遅延バインディングの型を使用する１つの理由は、プログラミングを開始する簡単な方法を欲することである。プログラマは、型宣言などにつきまとわれることなしに、問題空間を「調査」し始めたいと欲する。上記は、静的型の推論を自動的に推論することができる場合には、プログラマが型を省略するところの静的型の推論により部分的に取り組むことができる。しかしながら、上記は、変数が、ある静的型の変数のみであることができるという点において、依然として制限的である。動的型は、プログラム開発プロセスにおいて更に柔軟性又は流動性を与える。残念ながら、従来の技術は、フィードバックが最も必要である明確なポイントにおいてプログラム補助を提供しないことにより、上記のプログラムスタイルを妨げた。プログラム開発システム１００は、設計のときのプログラム補助を又は動的な若しくは遅延バインディングの型に関してフィードバックを提供することよって上記の問題を解決する。
【００１９】
図２に注意を向けると、典型的な動的型コンポーネント１１０を、本開示の側面の通りに例示する。動的型は、静的分析及び／又は実行分析を使用して識別又は近似することができる。従って、動的型コンポーネント１１０は、静的分析コンポーネント２１０及び実行分析コンポーネント２２０を含む。
【００２０】
静的分析コンポーネント２１０は、静的情報により動的型を近似するための機構を提供する。とりわけ、静的分析コンポーネント２１０は、型識別を容易にするハードコードされた命令、発見的方法、及び／又はマシンを使用することができる。加えて、１つ又は複数の型を、明確な型が絶対的な確実性を静的に識別することができそうにもないという定義よっているので、識別することができる。結果として、静的分析コンポーネント２１０は、幾つかの可能性のある又は候補の動的型を生成することができる。
【００２１】
１つのインスタンスにおいて、静的分析コンポーネント２１０は、プログラムのフロー分析（例えば制御及び／又はデータ等）を実行して候補の型を識別することができる。より具体的には、プログラム中の各呼び出し位置において、静的分析コンポーネント２１０は、遅延バインディング呼び出しのレシーバーが備えることができる全ての可能な静的に既知の型の集まりを収集することができる。一例として及び制限なしに、以下のコード片を考える。  
Ｄｉｍ Ｘ Ａｓ Ｏｂｊｅｃｔ  
Ｉｆ ＳｏｍｅＣｏｎｄｉｔｉｏｎ  
Ｘ＝’’Ｈｅｌｌｏ’’  
Ｅｌｓｅ  
Ｘ＝ｎｅｗ Ｂｕｔｔｏｎ（）  
Ｅｎｄ Ｉｆ  
コードの第１行において、変数「Ｘ」が型「Ｏｂｊｅｃｔ」の変数であると宣言する。従って、変数の型を明示的に宣言するので、上記は、変数「Ｘ」の型であるとすることができる。しかしながら、上記は、「Ｏｂｊｅｃｔ」がルート型又はスーバ―型である点において非常に有益でなく、いくつかの言語において、変数、式等が遅延バインディングであることを示すのに単に使用される。更に、後続の条件は、より具体的な型を指定する。条件は、「Ｘ」を、文字列「Ｈｅｌｌｏ」に割当てる又は新しい「Ｂｕｔｔｏｎ」としてインスタンスを作成する「Ｉｆ、Ｔｈｅｎ、Ｅｌｓｅ」の条件である。静的分析コンポーネント２１０の上記のプログラムのフロー分析についての結果は、型「Ｓｔｒｉｎｇ」及び「Ｂｕｔｔｏｎ」が動的型変数「Ｘ」の潜在的な型を表すので、型「Ｓｔｒｉｎｇ」及び「Ｂｕｔｔｏｎ」の集合であるとすることが可能である。
【００２２】
静的分析コンポーネント２１０よって提供される潜在的な型の集合は、複数の他の情報によって、生成される又は影響を与えることができる。例えば、先行するプログラム実行情報を使用して型を識別することができる。加えて、プログラム及び／又はプログラマのプロファイル情報又は他のコンテキスト情報を、動的型候補を推論することに関して考慮することができる。
【００２３】
更に、静的型分析コンポーネント２１０は、あるインスタンスにおいてリンクされた部分（例えばＡＰＩ、ライブラリ等）を含むプログラム全体を分析することができる間に、上記を実際的能力に対して縮小することができる。例えば、型「Ｏｂｊｅｃｔ」の変数に未だに割当てがなされていない場合には、又はパラメータ若しくは関数の結果が型「Ｏｂｊｅｃｔ」を有する場合には、可能な型の集合をバインド解除することができる。例えば、「Ｄｉｍ Ｘ Ａｓ Ｏｂｊｅｃｔ＝Ｆ（）」又は「Ｓｕｂ Ｇ （Ｘ Ａｓ Ｏｂｊｅｃｔ）」をそれぞれ考える。上記を実際的な何かに縮小するために、静的分析コンポーネント２１０を、範囲内にある型よって制限することができる。例えば、「Ｏｂｊｅｃｔ」がメソッドのリターン型であると、コンポーネント２１０は、グローバルすなわちプログラム全体の分析を行って、ヒット数を減少させるためにＦの可能なリターン型が何であるとすることができるかを決定することかできる。オブジェクト型の引数を使用すると、静的分析コンポーネント２１０は、グローバル分析を実行して、「Ｇ」が呼び出される全ての可能な位置を検出し、及び上記の呼び出し位置から可能な型のより小さい集合を決定する。
【００２４】
動的型コンポーネント１１０の実行分析コンポーネント２２０は、明確な動的型を、設計のときの実行に応じて識別する機構を提供する。プログラム実行を、プログラム記述の間にバックグラウンドにおいて実行することができ、及び動的型情報を、上記の実行から検索することができる。一実施例において、例えばＩＤＥ等のプログラム開発システム内のバッチコンパイラ若しくはＲＥＰＬ又はＲＥＰＬループ（read-evaluate-print loop）又は変更を使用して、上記を遂行することができる。上記は、ＲＥＰＬの従来の使用とまるで異なり、動的型のコード用のＩＤＥの外に双方向のＲＥＰＬ環境を使用すること、及び上記のコードを、ＩＤＥを使用して開発されたメインプログラムにカット・アンド・ペーストすることとを含む。プログラム開発システム内において、コードを、ブレークポイント等により指定して、バックグランドの実行を制御することができる。例えば、「Ｉｆ、Ｔｈｅｎ、Ｅｌｓｅ」の条件を含む上記のコード片を考える。ブレークポイントが条件の後に与えられる場合には、「Ｓｔｒｉｎｇ」か「Ｂｕｔｔｏｎ」かの点において、明確な動的型を、実行から獲得することができる。
【００２５】
図３を参照すると、典型的な補助コンポーネント１２０を、主張される主題の通りに例示する。先に説明したように、補助コンポーネント１２０は、プログラム補助及び／又はフィードバックを型情報に応じて提供する。１つのインスタンスにおいて、プログラム補助は、コード記述又はコード完了に関して、サジェスチョン、リコメンデーション又はヒントを含むことができる。例えば、「Ｘ．」における「．」等のトリガーの検出に基づいて、完了のリコメンデーションを含むドロップ・ダウン・ボックス、ドロップ・ダウン・メニュー等を生じる。サジェスチョン識別コンポーネント３１０は、サジェスチョンを生成するための機構を型に応じて提供する。例えば、型「Ｓｔｒｉｎｇ」に対して、サジェスチョン識別コンポーネント３１０は、とりわけ、属性「長さ」及び／又はメソッド「ｃｏｍｐａｒｅ（）」と「ｃｏｎｃａｔｅｎａｔｅ（）」とを含むクラス又は型のメンバーを戻すことができる。
【００２６】
幾つかの場合には、幾つかの型を、潜在的な動的型であると識別し及び潜在的なメンバーの集合が大きいので、ランク付けを使用することができる。特に、ランク付けコンポーネント３２０は、コンポーネント３１０よって提供されるサジェスチョンに関連しているランクを決定且つ提供することができる。次に、フィルターコンポーネント３３０を、ランク付けに応じて結果にフィルタリングをして、最も関連のある情報について提供準備することを容易にすることができる。型及び／又は（複数の）結びつけられたサジェスチョンに関する情報を含むあらゆる及び／又は全ての関連情報に応じて、ランク付けを生成することができる。例えば、ランク付けコンポーネント３２０は、条件の見込みを決定するか又は推論することができる。説明している例において、条件「ＳｏｍｅＣｏｎｄｉｔｉｏｎ」が誤っているよりもより正しい場合には、型「Ｓｔｒｉｎｇ」及び結び付けられたサジェスチョンを、型「Ｂｕｔｔｏｎ」のサジェスチョンよりも関連性においてより高くランク付けをすることができる。他のインスタンスにおいて、ランク付けを、先行する選択と関連付けることができる。ここで、ユーザーがシチュエーションを与えられ、ステートメント完了用の特有のメンバーを選択し、及びシチュエーションが再び表面化する場合には、ランク付けに、先行する選択よって影響を与えることができる。更に依然として、現在及び／又は先行する実行を、プロファイル情報のように使用して、ランク付けに影響を与えることができる。同様にして、プログラマプロファイル情報を、ランク付けの計算に使用することができる。例えば、プログラマが、ある型を他の型よりも選ぶことを学習することができる。なお更に依然として、プログラムの範囲及び範囲内のより特に型を使用して、関連性を決定することができる。
【００２７】
プレゼンテーションコンポーネント３３０は、どのように補助をユーザーに与えるかを制御する。プレゼンテーションコンポーネント３３０は、サジェスチョンコンポーネント３１０、ランク付けコンポーネント３２０、及び／又はフィルターコンポーネント３３０からの情報を使用して、ユーザーにとって最も助けになりそうな方法において補助を提供することができる。例えば、プレゼンテーションコンポーネント３３０は、予め定められた数のサジェスチョンを関連性の順に提供することができる。加えて又はあるいはまた、ランク付け情報を、サジェスチョンに提供することができる。更に依然として、決定された明確な型自体を（例えば、設計のときの実行により）識別する及び／又は決定された明確な型を（例えば、静的分析よって）近似の型から分離することができる。更にまた、プレゼンテーションコンポーネントは、更に後述されるような静的型に動的型を変換するオプションを与えることができる。
【００２８】
図４は、プログラム開発システム４００を、主張される主題の通りに示す。図１のシステム１００と同様に、システム４００は、動的型コンポーネント１１０と、補助コンポーネント１２０とを前述のように含む。簡潔には、動的型コンポーネント１１０は、設計のときに、動的型を決定又は推論することができて、補助コンポーネント４００により使用されて、プログラム記述中の開発者を、とりわけ、例えば自動コード完了等の機構により援助する。
【００２９】
設計のときの動的型の決定又は推論は、計算上、集約することができる。従って、最適化コンポーネント４１０を使用して、処理を援助することができる。最適化コンポーネント４１０は、周知技術の幾つかを含む１つ又は複数のプロセス最適化機構を使用することができる。例えば、最適化コンポーネント４１０は、識別された型及び／又はサジェスチョンをデータ記憶装置４２０にキャッシュすることができる。一例として及び制限なしに、最適化コンポーネント４１０は、型、及び／又は最も頻繁に使われるか及び／又は最も使用される可能性があると関連付けられた補助をキャッシュ（例えば、予測のキャッシュを）する。次に、処理を調整して、あらゆる決定に先行して、最適化コンポーネント４１０及び特にデータ記憶装置４２０により最初にチェックして、重複の作業を避けることができる。
【００３０】
加えて又はあるいはまた、型及び／又は補助情報は、データベース及び検索エンジンよって用いられると同様の方法においてインデックスを付けることができて、適当な情報の素早い検索を可能にする。従って、最適化コンポーネント４１０を使用して、データ記憶装置４２０において、格納されたインデックスの情報を格納する及び／又は検索することができる。
【００３１】
図５を参照すると、プログラム開発システム５００を例示する。本開示の１つの側面の通りに、静的型と動的型との両方及び／又は静的型と動的型との複合型をサポートする言語において、コードを、開発することができる。従って、システム５００は、事前バインディングと遅延バインディングとの両方の型に応じて補助を与えることを可能にする。上記は、静的型及び動的型の両方に提供することができる補助において、プログラム開発における高い柔軟性を提供する。
【００３２】
特に、前述のように、システム５００は、動的型コンポーネント１１０及び補助コンポーネント１２０を含む。加えて、システム５００は、補助コンポーネント１２０に通信可能に結合された静的型コンポーネント５１０を含む。静的型コンポーネント５１０は、静的又は事前バインディングの型を識別、決定且つ推論し、及び静的又は事前バインディングの型を補助コンポーネント１２０に使用可能にする。補助コンポーネント１２０は、動的型に加えて、静的型に応じてプログラム補助及び／又はフィードバックを提供することができる。例えば、ある状況において、開発者は、動的型の柔軟性を超えて静的型の安全性を重んじるだろう。
【００３３】
より具体的には、フィードバックは、明示的に宣言された型及び／又は推論された静的型に基づくことができる。例えば、以下の例示的な事前バインディングのコードセグメント「Ｄｉｍ Ｘ＝’Ｈｅｌｌｏ’」及び「Ｄｉｍ Ｘ Ａｓ Ｓｔｒｉｎｇ＝’Ｈｅｌｌｏ’」を考える。どちらの場合でも、「Ｘ」は、静的型「Ｓｔｒｉｎｇ」を有する。従って、「Ｘ．」（Ｘ「ドット」）の記述は、補助コンポーネント１２０に、とりわけ、「ｌｅｎｇｔｈ」、「ｃｏｍｐａｒｅ（）」及び「ｃｏｎｃａｔｅｎａｔｅ（）」を含む型「Ｓｔｒｉｎｇ」のメンバーを、コード完了のために、識別させることができる。
【００３４】
図６は、事前バインディングのコンストラクトと遅延バインディングのコンストラクトと間の自動的なリファクターをサポートするプログラム開発システム６００を示す。図５のシステム５００と同様にして、システム６００は、動的型コンポーネント１１０と、補助コンポーネント１２０と、静的型コンポーネント５１０とを含む。上記のコンポーネントを介した静的型と動的型との両方に基づく補助の使用可能性は、静的コンストラクトと動的コンストラクトとの間の相互作用に対する機会を提供する。リファクターコンポーネント６１０は、ユーザー選択に応答する例の場合には、自動的にコードを修正する機構を提供する。本質的には、リファクターコンポーネント６１０は、推測の型を、より価値のある型に変換することができる改善を与える。
【００３５】
１つのインスタンスにおいて、動的型を、メンバーの選択及び／又は記述に基づいて静的型に変換することができる。例えば、動的型に応じて補助コンポーネント１２０よって提供されるメンバーのリストを考える。ひとたびメンバーがリストから選択されると、メンバーの戻り型及びメンバーのレシーバーが分かり、リファクターコンポーネント６１０は、関連するコンストラクトをそれらに応じてキャストすることができる。便宜のために説明していた以下の例を再び考える。  
Ｄｉｍ Ｘ Ａｓ Ｏｂｊｅｃｔ  
Ｉｆ ＳｏｍｅＣｏｎｄｉｔｉｏｎ  
Ｘ＝’’Ｈｅｌｌｏ’’  
Ｅｌｓｅ  
Ｘ＝ｎｅｗ Ｂｕｔｔｏｎ（）  
Ｅｎｄ Ｉｆ  
上記のループの次に「Ｄｉｍ Ｙ＝Ｘ．」の追加及び補助コンポーネント１２０により提供されるメンバーのリストからの「Ｌｅｎｇｔｈ（）」の選択を仮定する。上記の点において、Ｌｅｎｇｔｈメソッドの結果が整数型であることを決定することができる。従って、リファクターコンポーネント６１０は、動的呼び出しの周囲に暗示的なキャストを挿入してユーザー選択のメンバーにより決定されたような静的型を戻すことによって、「Ｙ」を遅延バインディングから事前バインディングに自動的に変換することができる。例えば以下の通りである。すなわち、「Ｄｉｍ Ｙ＝ＣＩｎｔ（Ｘ．Ｌｅｎｇｔｈ（））ＲＥＭ Ｘ Ｉｎｆｅｒｒｅｄ ａｓ Ｉｎｔｅｇｅｒ」である。あるいはまた、以下の通りに、初めにレシーバーを変換することより、呼び出しを、静的呼び出しにすることができる。すなわち、「Ｄｉｍ Ｙ＝Ｃｓｔｒ（Ｘ）．Ｌｅｎｇｔｈ（）ＲＥＭ Ｘ ｉｎｆｅｒｒｅｄ ａｓ Ｉｎｔｅｇｅｒ」である。上記の両方の場合には、上記の変換を、生成されたコードにおいて、コンパイラ又は同様のコンポーネントにより挿入することができる。
【００３６】
ある場合において、ユーザーは適用可能なメンバーの名前を選択するだけで、遅延バインディングのコンテキストのままにしたいことがあることを理解するべきである。上記は、ユーザー優先及び／又は明示的／暗示的な宣言よって指図することができる。例えば、補助コンポーネント１２０は、例えばラジオボタン等のオプションによりメンバーを与えることができて、ユーザーが、遅延バインディングのコンテキストを保持することを望むかどうかを選択することができる。
【００３７】
プログラム開発システム６００は、他の同様システムも同じように、異なった、より実地調査のプログラム処理を可能にする。上記は、開発者のプログラムについて、より学習させる近似の型の推論又は決定を使用することを、開発者に可能にする。本質的には、コンパイラ又は他の開発コンポーネントは、プログラマが選択且つ使用して遅延バインディングの世界を出て事前バインディングの世界に入る又は逆の場合も同じことができる中の複数のオプションを提供することができる。１つのインスタンスにおいて、全ての柔軟性を含む遅延バインディングのコンストラクトを、より制限的である、より安全なコンストラクトにリファクターすることができる。
【００３８】
図７に注意を向けると、拡張可能なプログラム開発システム７００を、主張される主題の通りに例示する。システム７００は、動的型コンポーネント１１０と、補助コンポーネント１２０と、静的型コンポーネント５１０とを含む図５のシステム５００と同一のコンポーネントを含む。前述のように、上記のコンポーネントは、設計のときに、プログラム補助を、静的及び動的型の１つ又は両方に応じて提供するように動作可能である。理解されるべきとして、システム５００は、ある標準又はデフォルトの機能を含むことができる。更に、システム７００において、拡張を可能とする各コンポーネントに通信可能に結合されたエクステンションコンポーネント７１０が提供される。１つの個別の実装において、エクステンションコンポーネント７１０は、プラグインにより提供される外部機能を受信且つ使用することができる。従って、システム７００は、拡張可能及び／又はプラグ可能と呼ぶことができる。一例として及び制限なしに、ランク付けアルゴリズムを、補助の提供準備に関して、システム７００によりプラグイン且つ使用することができる。更に、望ましいかもしれないメンバーを含むメタデータを、システム７００にプラグインすることができる。更に、エクステンションコンポーネント７１０は、ウェブサービスの利用及び／又はデータベースへの接続性によりネットワークを通じて使用する拡張を可能にすることができる。例えば、エクステンションコンポーネント７１０は、システムに、スキーマ又は他のメタデータのリポジトリにシステムが接続し、及びリポジトリを使用することができるようにする機構を提供することができる。
【００３９】
前述のシステム、及びアーキテクチャ等を、幾つかのコンポーネントとの相互作用に関して説明した。上記のシステム及びコンポーネントは、上記のコンポーネント又は上記のコンポーネントにおいて指定されたサブコンポーネント、指定されたコンポーネント又はサブコンポーネントのうちの幾つか、及び／又は追加のコンポーネントを含むことを理解するべきである。さらに、サブコンポーネントを、親コンポーネント内に含まれるよりもむしろ、他のコンポーネントに通信可能に接続されるコンポーネントとして実装することができるだろう。更に依然として、１つ又は複数のコンポーネント及び／又はサブコンポーネントを、集められた機能を提供する単一のコンポーネントに結合することができる。システム、コンポーネント及び／又はサブコンポーネント間の通信を、プッシュ及び／又はプルの何れかのモデルの通りに遂行することができる。更に、コンポーネントは、簡略にするために本明細書において特に説明されないが、当業者に周知である、１つ又は複数の他のコンポーネントと相互作用することができる。
【００４０】
更に、理解されるように、開示されたシステム及び方法の様々な部分は、人工知能、マシン学習、又は知識若しくは規則に基づくコンポーネント、サブコンポーネント、プロセス、デバイス、手順、又は機構（例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク、ファジー論理、データ・フュージョン・エンジン（data fusion engine）、クラシファー（classifier）等）を含む又は構成することができる。上記のコンポーネントは、とりわけ、ある機構又はコンポーネントにより実行されるプロセスを自動化して、より適応性のある、効率的に及びインテリジェットにも同様に、システム及び方法の一部を、動作するようにすることができる。一例として及び制限なしに、動的型コンポーネント１１０は、設計のときに、上記の機構を使用して、静的情報から動的型を推論することかできる。同様に、補助コンポーネント１２０は、補助をランク付け、フィルター及び／又は与える同様の機構を使用することができる。
【００４１】
上記に説明された例示的なシステムの観点から、開示される主題の通りに実装される手順は、図８〜図１０のフローチャートを参照して、よりよく理解されるであろう。簡単な説明を目的するために、手順を、一連のブロックとして示す且つ説明するが、いくつかのブロックが、本明細書において示す且つ説明するものから、異なる順序において及び／又は他のブロックと並行して行うことができるように、主張される主題が、ブロックの順序により制限されないことを知的に理解且つ価値的に理解するべきである。更に、例示する全てのブロックが、本明細書において以後、説明される手順を実装することを必要とすることができるとは限らない。
【００４２】
図８を参照すると、プログラム開発を容易にする方法８００を、主張される主題の通りに示す。ステップ８１０において、設計のときに、遅延バインディングのコンストラクトに関連付けられた可能性のある型を、決定する。１つのインスタンスにおいて、決定は、例えば静的なプログラムフローの分析及び／又は例えばプログラマプロファイル、プログラマの好み及び先行する実行等の他のコンテキスト情報によって静的情報から近似の型を推論することに対応することができる。１つの側面の通りに、潜在的な遅延バインディングの型のセットは、静的型のスーパーセットである。別のインスタンスにおいて、決定は、設計のときの実行から明確な型を識別することに付随することができる。ステップ８２０において、フィードバックを、遅延バインディング呼び出しのために開発環境内に提供する。すなわち、プログラム補助を、１つ又は複数の決定された型に応じて与える。例えば、ドット演算子（「．」）等のトリガーの記述に基づいて、明確な及び／又は近似の型に関連付けられたメンバーを、プログラマに与えることができる。次に、プログラムは、自動完了のために、提供されたメンバーを選択し、更に選択をしぼるために型を決めることを続けて、続いて自動完了を起動する又は望しいメンバーを完全に指定する。
【００４３】
図９は、本開示の側面の通りにプログラム補助を提供する方法９００を示す。ステップ９１０において、プログラムの型を、識別、決定、推論又は確定する。ステップ９２０において、１つ又は複数の型を分析して、動的型に対応する見込みを決定する。上記を、いろいろのファクタを使用して決定することができる。例えば、実行から識別される明確な型は、静的制御フロー分析から推論される近似の型よりも、より動的型でありそうである。同様にして、いくつかの近似の型は、プログラム及び／又はプログラマについてコンテキスト上の情報を考慮して、他よりも、より可能性があることがある。ステップ９３０において、少なくとも確定された型のサブセットにマッチするメンバーを識別する。メンバーは、変数、フィールド、メソッド、及び／又は関数等に一致することができる。更に、マッチするメンバーを、例えば最も頻繁に使用されるコンテキスト及び／又は最も使用されそうであるコンテキスト等に応じてフィルタリングすることができる。ステップ９４０において、メンバーをユーザーに与える。上記は、プログラム補助のリスト・メンバー・オプションに一致する。上記のリストを、プログラマに最も有用な方法において構成且つ与えることができる。例えば、メンバーを、関連順に型及び／又はメンバーに応じて構成することができて、より可能性があるサジェスチョンを最初に提示し、及び最小の関係のあるサジェスチョンを最後に提示する。更に、提示を、関係のある上位Ｋ個のサジェスチョンに制限することができる。更に依然として、サジェスチョン、リコメンデーション、ヒント等を、関連スコア（relevancy score）によりラベルをつけることができ、及び／又は上記に基づいてセグメント又はタイヤ（tier）において正確に叙述することができる。例えば、明確な型の関数であるメンバーを、近似の型に関連付けられたメンバーからは図表に示して正確に叙述することができる。
【００４４】
図１０を参照すると、フローチャートは、遅延バインディングのコンテキストと事前バインディングのコンテキストとの間において推移する方法１０００を示す。遅延バインディングの世界と事前バインディングの世界とを依然として同様に分離することができるが、１つの側面の通りに上記は相互作用することができる。ステップ１０１０において、動的型の補助が提供される。例えば、リストメンバーの補助を与えて、潜在的な選択及び自動コード完了に対して、複数のメンバーを、リストアップすることができる。ステップ１０２０において、選択されたメンバーを識別する。ステップ１０３０において、自動コードリファクターを提供するかどうかを決定する。上記の決定を、リファクターが可能であるかどうか及び／又は有益であるかどうかに基づいて行うことができ、及び／又は、とりわけ上記の機能を許可する又は制限する好みを使用することができる。ステップ１０３０において、リファクターが必要であると決定されない場合には、方法は、単に終了することができる。そうでない場合には、方法は、継続しステップ１０４０に戻ることができ、動的呼び出しをキャストして選択されたメンバーにより静的型を戻すようにすることができる。上記の方法において、プログラマは、動的型及び与えられる補助を用いて、開発志向の及びはしこい方法にてコード化を行うことかできる。個別のメンバーの選択に基づいて、コードの部分が静的型に自動的にリファクターされ、効果的実行と共に改良されたコード安全性を提供する。
【００４５】
本明細書において用いられたように、用語「コンポーネント」、「システム」等はコンピューター関連の実体、何らかのハードウェア、ハードウェア及びソフトウェアの組合せ、ソフトウェア、実行下のソフトウェアを意味することが意図されている。例えば、コンポーネントは、制限されないが、プロセッサ上において実行するプロセス、オブジェクト、インスタンス、実行可能、実行スレッド、プログラム、及び／又はコンピューターであるとすることができる。実例として、コンピューター上において実行するアプリケーションとコンピューターとの両方は、コンポーネントであるとすることができる。１つ又は複数のコンポーネントは、プロセス及び／又は実行スレッドに属することができ、並びにコンポーネントを、１台のコンピューターに配置することができ及び／又は２台以上のコンピューターに分散することができる。
【００４６】
用語「例示的」は、本明細書において実施例、事例又は例示として供することを意味するために用いられる。本明細書において「例示的」として説明されている何らかの側面及び設計は、他の側面又は設計よりも好ましいものとして説明する必要はない。更に、実施例は、明快さと分かり易さのためにのみ提供されるものであり、あらゆる方法において主題の新機軸又は関連する部分を制限することを意味しない。無数の追加又は代替の実施例を提示することができたが、簡潔さのために割愛されたことを理解するべきである。
【００４７】
本明細書において使用されるように、用語「推論」又は「推論する」とは、システム、環境及び／又はユーザーの状態を、イベント及び／又はデータを介して取り込まれた観測集合から推理する又は推論するプロセスを意味する。推論を使用して、明確なコンテキスト又はアクションを識別することができ、又は推論は、例えば、複数状態にわたる確率分布を生成することができる。推論は、確率論的であり、すなわちデータ及びイベントの考察に基づいて、関心の状態について、確率分布を計算することである。更に、推論は、より高レベルのイベントを１組のイベント及び／又はデータから構成するのに使用される技術を引用することができる。上記の推論は、１組の監視されたイベント及び／又は記憶されたイベントデータからの新しいイベント又はアクションのコンストラクション、イベントを一時的にすぐに近くに相関させるかどうか、イベント及びデータが１つ又は幾つかのイベント及びデータソースから来るかどうかに帰着する。種々の分類のスキーム及び／又はシステム（例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク、ファジー論理、データ・フュージョン・エンジン等）を、主題の新機軸に関連して自動的に及び／又は推論されたアクションを実行することに関連して使用することができる。
【００４８】
更に、本発明の全て又は部分は、標準のプログラミング及び／又は工学技術を用いて、方法、装置又は製造物として実施されることによって、ソフトウェア、ファームウェア、ハードウェア、又はこれらのあらゆる組合せが生産されて、開示される新機軸を実装するようにコンピューターが制御される。本明細書において用いられる用語「製造物」は、あらゆるコンピューター読取り可能な装置又は媒体からアクセス可能なコンピュータープログラムを含むことを意図する。例えば、コンピューター読取り可能な媒体は、制限されないが、磁気記憶装置（例えばハードディスク、フロッピー（登録商標）ディスク、磁気ストリップ等）、光ディスク（例えばコンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）等）、スマートカード及びフラッシュメモリ装置（例えばカード、スティック、キードライブ等）を含むことができる。加えて、例えば電子メールを送受信するのに使用される又は例えばインターネット若しくはローカルエリアネットワーク（ＬＡＮ）等のネットワークにアクセスするのに使用される等のコンピューター読取り可能な電子データを伝える搬送波を、使用することができることを理解するべきである。当然として、当業者は、上記の構成に対する多くの変更を、主張される主題の範囲又は精神から逸脱することなく行うことができることを承知するであろう。
【００４９】
開示される主題の種々の側面用の文脈を提供するために、図１１及び図１２は、以下の説明と同様に、開示される主題の種々の側面を実装する適切な環境の簡潔的な一般的な記述を提供することを意図する。主題を、１つ又は複数のコンピューターにおいて実行するプログラムのコンピューター実行可能な命令の一般的な文脈において説明したが、当業者は、主題の新機軸を、他のプログラムモジュールと合同して、更に実装することができることを承知するであろう。一般的に、プログラムモジュールは、特定のタスクを実行する及び／又は特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。更に、当業者は、システム／方法を、シングルプロセッサ、マルチプロセッサ又はマルチコアプロセッサのコンピューターシステム、ミニコンピューター処理デバイス、メインフレームコンピューター、同様に、パーソナルコンピューター、ハンドヘルドコンピューター処理デバイス（例えば、ＰＤＡ（Personal Digital Assistant）、電話、時計等）、マイクロプロセッサベースの又はプログラム可能な家庭用若しくは産業用の電子機器等を含む他のコンピューターシステム構成により実行することができることを理解するであろう。更に、例示された側面を、通信ネットワークによってリンクされた遠隔処理デバイスよってタスクが実行される分散コンピューター環境において実行することができる。しかしながら、主張される主題の全ての側面を、スタンドアロンのコンピューターにおいて実行することができない場合が、いくつかある。分散されたコンピューター環境において、プログラムモジュールを、ローカルとリモートとの両方のメモリ記憶装置に置くことができる。
【００５０】
図１１を参照すると、本明細書において開示される種々の側面を実装するための例示的な環境１１１０は、コンピューター１１１２（例えば、デスクトップ、ラップトップ、サーバー、ハンドヘルド、プログラム可能な家庭用又は産業用電子機器等）を含む。コンピューター１１１２は、処理ユニット１１１４と、システムメモリ１１１６と、システムバス１１１８とを含む。システムバス１１１８は、システムメモリ１１１６を含むがこれに限らずシステムコンポーネントを処理ユニット１１１４に結合する。処理ユニット１１１４は、種々の利用可能なマイクロプロセッサの何れであるとすることができる。デュアルマイクロプロセッサ、マルチコア及び他のマルチプロセッサアーキテクチャを、処理ユニット１１１４として使用することができることを理解するべきである。
【００５１】
システムメモリ１１１６は揮発性及び不揮発性メモリを含む。基本入出力システム（ＢＩＯＳ）は、例えば始動等の間に、コンピューター１１１２内のコンポーネント間の情報転送を行う基本的ルーチンを含み、不揮発性メモリに記憶される。例示として、制限されないが、不揮発性メモリは、リード・オンリー・メモリ（ＲＯＭ）を含むことができる。揮発性メモリは、処理を容易にする外部のキャッシュメモリとして動作することができるランダム・アクセス・メモリ（ＲＡＭ）を含む。
【００５２】
コンピューター１１１２は、また、着脱可能／着脱不能な、揮発性／不揮発性のコンピューター記憶媒体を含む。図１１は、例えば、大容量記憶装置１１２４である。大容量記憶装置１１２４は、制限されないが、磁気又は光学的ディスクドライブ、フロッピー（登録商標）ディスク装置、フラッシュメモリ又はメモリースティックのような装置を含む。加えて、大容量記憶装置１１２４は、別々の記憶媒体を含むこともでき、又は他の記憶媒体と組合せることができる。
【００５３】
図１１は、ユーザー及び／又は他のコンピューターと、適切な操作環境１１１０において説明される基本的なコンピューターリソースとの間の中継として動作する（複数の）ソフトウェアアプリケーション１１２８を提供する。上記のソフトウェアアプリケーション１１２８は、システム及びアプリケーションソフトウェアの一方又は両方を含む。システムソフトウェアは、大容量記憶装置１１２４に格納することができ、コンピューターシステム１１１２のリソースを制御且つ割当てる動作をするオペレーティングシステムを含むことができる。アプリケーションソフトウェアは、システムメモリ１１１６及び大容量記憶装置１１２４の何れか又は両方に記憶されたプログラムモジュール及びデータを介して、システムソフトウェアによるリソース管理の優位性を利用する。
【００５４】
コンピューター１１１２は、また、バス１１１８に通信可能に接続され且つコンピューター１１１２との相互作用を容易にする１つ又は複数のインタフェースコンポーネント１１２６を含む。例示として、インタフェースコンポーネント１１２６は、ポート（例えば、シリアル、パラレル、ＰＣＭＣＩＡ、ＵＳＢ、ファイヤワイヤ等）又はインタフェースカード（例えば音、ビデオ、ネットワーク等）等であるとすることができる。インタフェースコンポーネント１１２６は、（有線又は無線の）入力を受信し及び出力を提供することができる。例えば、制限されないが、例えばマウス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロホン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナ、カメラ、他のコンピューター等のポインティングデバイスを含む装置から、入力を受信することができる。更に、出力は、コンピューター１１１２により（複数の）出力装置にインタフェースコンポーネント１１２６を介して与えることができる。出力装置は、とりわけ、ディスプレイ（例えばＣＲＴ、ＬＣＤ、プラスマ等）、スピーカ、プリンタ及び他のコンピューターを含むことができる。
【００５５】
図１２は、主題の新機軸が相互作用することができるサンプルのコンピューター環境１２００の概略的なブロック図である。システム１２００は、１つ又は複数のクライアント１２１０を含む。（複数の）クライアント１２１０は、ハードウェア及び／又はソフトウェア（例えばスレッド、メソッド、コンピューター）であるとすることができる。システム１２００は、また、１つ又は複数のサーバー１２３０を含む。従って、システム１２００は、他のモデルのうちでとりわけ、２層クライアントサーバーモデル又は複数層モデル（例えば、クライアント、中間層サーバー、データサーバー）に対応することができる。更に、サーバー１２３０は、ハードウェア及び／又はソフトウェア（例えばスレッド、メソッド、コンピューター）であるとすることができる。例えば、サーバー１２３０は、主題の新機軸の側面を使用することにより変換を実行するスレッドを格納することができる。クライアント１２１０とサーバー１２３０との間の１つの可能な通信は、２つ又は複数のコンピュータープロセス間で送信されるデータパケットの形であってもよい。
【００５６】
システム１２００は、（複数の）クライアント１２１０と（複数の）サーバー１２３０との間の通信を容易にするのに使用することができる通信フレームワーク１２５０を含む。（複数の）クライアント１２１０は、（複数の）クライアント１２１０に局所的な情報を格納するのに使用することができる１つ又は複数の（複数の）クライアントデータ記憶装置１２６０に動作可能に接続される。同様にして、サーバー１２３０は、サーバー１２３０に局所的な情報を格納するのに使用することができる１つ又は複数の（複数の）サーバーデータ記憶装置１２４０に動作可能に接続される。
【００５７】
例えば、プログラムを、クライアント１２１０及び／又はサーバー１２３０を介して他クライアント１２１０上の実行のために分散された１台のクライアント１２１０上において、開発することができる。更に、クライアント上で実行するプログラム開発環境が、遠隔サーバー１２３０との相互作用が通信フレームワーク１２５０を用いて可能であり、例えばスキーマ等のメタデータを獲得して、例えばメンバーの識別等の関連する補助の提供準備を可能にする。同様にして、ランク付けのアルゴリズム等を、通信フレームワーク１２５０を介してサーバー１２３０又は他のクライアント１２１０からダウンロードすることができ、提供される補助の方法及び／又は型を変えることができる。
【００５８】
上述したことは、主張される主題の側面の実施例を含む。当然として、主張される主題を説明する目的に対して、コンポーネント又は手順について、考えられる全ての組合せを説明することはできないが、当業者は、開示される主題の更に多くの組合せ及び並べ替えが可能であることを承知するであろう。従って、開示される主題は、添付されるクレームの精神及び範囲内にある上記の全ての代替、変更及び変形を含むことを意図される。更に、詳細な説明又はクレームの何れかにおいて、用語「含む」、「有する」若しくは「有している」又はそれらの形の変形を使用する範囲に対して、上記の用語は、クレームにおける暫定的な用語として使用される場合には、用語「備えた（comprising）」と同様の方法において「備えた（comprising）」を解釈するとして含むことを意図される。
【図１】
2010530590.tif 000003
【図２】
2010530590.tif 000004
【図３】
2010530590.tif 000005
【図４】
2010530590.tif 000006
【図５】
2010530590.tif 000007
【図６】
2010530590.tif 000008
【図７】
2010530590.tif 000009
【図８】
2010530590.tif 000010
【図９】
2010530590.tif 000011
【図１０】
2010530590.tif 000012
【図１１】
2010530590.tif 000013
【図１２】
2010530590.tif 000014
【国際調査報告】
2010530590.tif 000015
2010530590.tif 000016