(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6568605
(24)【登録日】2019年8月9日
(45)【発行日】2019年8月28日
(54)【発明の名称】大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー
(51)【国際特許分類】
G06F 8/36 20180101AFI20190819BHJP
G06F 8/41 20180101ALI20190819BHJP
【FI】
G06F8/36
G06F8/41 100
【請求項の数】13
【全頁数】11
(21)【出願番号】特願2017-564873(P2017-564873)
(86)(22)【出願日】2016年6月27日
(65)【公表番号】特表2018-519592(P2018-519592A)
(43)【公表日】2018年7月19日
(86)【国際出願番号】US2016039561
(87)【国際公開番号】WO2017011176
(87)【国際公開日】20170119
【審査請求日】2018年6月11日
(31)【優先権主張番号】14/796,695
(32)【優先日】2015年7月10日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】グルシュコ,カルミ
【審査官】
福西 章人
(56)【参考文献】
【文献】
特開平03−251929(JP,A)
【文献】
米国特許出願公開第2011/0035729(US,A1)
【文献】
韓国公開特許第2014−0016719(KR,A)
【文献】
デュースバリー ライアン RYAN DEWSBURY,Google Web Toolkitアプリケーション,日本,ブレンダン・デラハンティ,2008年12月25日,初版,p.137-155
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00−8/77
(57)【特許請求の範囲】
【請求項1】
コンパイルすべきソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するための、コンピュータによって実現される方法であって、
コンパイルすべきソースコードファイルを受信するステップを備え、前記ソースコードファイルは、対応する修飾名がコンパイラによって必要とされる少なくとも1つの単純名を含み、前記方法は、
前記ソースコードファイルをパースして前記ソースコードファイル内の前記単純名および前記修飾名を決定するステップと、
対応する修飾名が必要とされる前記少なくとも1つの単純名に関して、ソースコードグラフを検索して前記少なくとも1つの単純名に対応する、可能性のある候補修飾名を探索するステップと、
前記ソースコードグラフから可能性のある候補修飾名のリストを受信すると、追加情報を有する、前記可能性のある候補修飾名のリストのエンリッチメントを行なうステップとを備え、前記可能性のある候補修飾名のリストのエンリッチメントを行なうステップは、 前記可能性のある候補修飾名のリストに含まれる、可能性のある候補修飾名に対応する修飾名パッケージがビルドプロセスに追加する前記ソースコードをビルドする時間の増加を判断することと、
前記修飾名パッケージの名前を前記可能性のある候補修飾名のリストに追加することと、
前記リストを出力することとを含み、前記方法は、
修飾名が前記可能性のある候補修飾名のリストから選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定するステップと、
前記決定されたビルドディペンデンシーおよびビルドターゲットに基づいて前記ソースコードをコンパイルするステップと、
を備える、方法。
【請求項2】
前記リストのエンリッチメントを行なうステップは、前記リストの出力に先立って特定の種類の可能性のある候補修飾名が他のソースコードファイルによって使用された回数を含むように前記リストのエンリッチメントを行なうことを含む、請求項1に記載のコンピュータによって実現される方法。
【請求項3】
前記リストのエンリッチメントを行なうステップは、特定の可能性のある候補修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて前記リストのランク付けを行なうことを含む、請求項1に記載のコンピュータによって実現される方法。
【請求項4】
前記リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで前記修飾名を自動的に選択するステップをさらに備える、請求項1〜3のいずれかに記載のコンピュータによって実現される方法。
【請求項5】
インターフェースを提供して前記可能性のある候補修飾名のリストから修飾名の選択を受信するステップをさらに備える、請求項1〜4のいずれかに記載のコンピュータによって実現される方法。
【請求項6】
前記リストのエンリッチメントを行なうステップは、
修飾名パッケージが、前記修飾名パッケージに対応する可能性のある単純名が現在参照されている前記ソースコードファイルから可視であるかどうかを判断することと、
前記修飾名パッケージが前記ソースコードファイルから可視であるという判断に応じて、前記修飾名パッケージの名前を可能性のある候補修飾名として設けることと、
を含む、請求項1〜5のいずれかに記載のコンピュータによって実現される方法。
【請求項7】
コンパイルすべきソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するためのシステムであって、
1つ以上の処理装置と、
複数の命令を格納する1つ以上の記憶装置とを備え、前記複数の命令は、前記1つ以上の処理装置によって実行されると、前記1つ以上の処理装置に、
コンパイルすべきソースコードファイルを受信することを行なわせ、前記ソースコードファイルは対応する修飾名がコンパイラによって必要とされる少なくとも1つの単純名を含み、前記複数の命令は、さらに、前記1つ以上の処理装置によって実行されると、前記1つ以上の処理装置に、
前記ソースコードファイルをパースして前記ソースコードファイル内の前記単純名および修飾名を決定することと、
対応する修飾名が必要とされる前記少なくとも1つの単純名に関して、ソースコードグラフを検索して前記少なくとも1つの単純名に対応する、可能性のある修飾名を探索することと、
前記ソースコードグラフから可能性のある候補修飾名のリストを受信すると、追加情報を有する、可能性のある候補修飾名のリストのエンリッチメントを行なうこととを備え、前記可能性のある候補修飾名のリストのエンリッチメントを行なうことは、
前記可能性のある候補修飾名のリストに含まれる、可能性のある候補修飾名に対応する修飾名パッケージがビルドプロセスに追加する前記ソースコードをビルドする時間の増加を判断することと、
前記修飾名パッケージの名前を前記可能性のある候補修飾名のリストに追加することと、
前記リストを出力することと、
修飾名が前記可能性のある候補修飾名のリストから選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定することと、
前記決定されたビルドディペンデンシーおよびビルドターゲットに基づいて前記ソースコードをコンパイルすることと、
を行なわせる、システム。
【請求項8】
前記リストのエンリッチメントを行なうことは、前記リストの出力に先立って特定の種類の可能性のある候補修飾名が他のソースコードファイルによって使用された回数を含むように前記リストのエンリッチメントを行なうことを含む、請求項7に記載のシステム。
【請求項9】
前記リストのエンリッチメントを行なうことは、特定の可能性のある候補修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて前記リストのランク付けを行なうことを含む、請求項7に記載のシステム。
【請求項10】
前記リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで前記修飾名を自動的に選択することをさらに備える、請求項7〜9のいずれかに記載のシステム。
【請求項11】
インターフェースを提供して前記可能性のある候補修飾名のリストから修飾名の選択を受信することをさらに備える、請求項7〜10のいずれかに記載のシステム。
【請求項12】
前記リストのエンリッチメントを行なうことは、
修飾名パッケージが、前記修飾名パッケージに対応する可能性のある単純名が現在参照されている前記ソースコードファイルから可視であるかどうかを判断することと、
前記修飾名パッケージが前記ソースコードファイルから可視であるという判断に応じて、前記修飾名パッケージの名前を可能性のある候補修飾名として設けることと、を含む、請求項7〜11のいずれかに記載のシステム。
【請求項13】
コンピュータに請求項1〜6のいずれか1項に記載の方法を実行させるプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
開発者は、外部コードまたはライブラリを組み込んだ複雑なソフトウェアアプリケーションをビルドすることが多い。たとえば、開発者は、人のリストを自分のアプリケーションに含めようとすることがある。開発者は、自分自身のリストオブジェクトを定義する代わりに、外部パッケージからリストクラスを含めることがある。
図1に示すようなこの例では、開発者は、自分のコード内の標準ライブラリから、「java.util.List」などのリストを含めることがある。「java.util.List」は、java.utilパッケージを通じて公的に利用可能な、順序付けられたコレクションのクラスである。リストが開発者のソースコードファイルにインポートされると、開発者は、リストがインスタンス化されるまたは使用される場合はいつでも、完全修飾名「java.util.List」を用いる必要はなく、リストを単に単純名「List」で参照することが可能になる。たとえば、
図1の3行目で、コードは、修飾名「java.util.List」ではなく、ただ単に単純名「List」を参照する。
【発明の概要】
【発明が解決しようとする課題】
【0002】
パッケージ、ライブラリ、または修飾名を定義する外部コードをソースコードにインポートするプロセスは、標準統合開発環境(IDEs: integrated development environments)を用いた小規模なコードベースにとっては簡単であり得るが、大規模なコードベースは、標準的なIDEsが修飾名と呼ばれる適切な完全名、またはディペンデンシーに関して適切なビルドシステム構築物を効率的に探索するには、あまりに多くの外部ディペンデンシーを有している。
【0003】
従来のシステムは、全コードベースを眺めて適切なパッケージ、ライブラリ、または他の外部コードを決定しようとすることによって、リアルタイムで修飾名を探索しようとする。このプロセスは時間がかかる。大量のソースコードをこのアプローチを用いて妥当な時間で処理することはどうしてもできない。
【0004】
発明者によって認識されているように、ソースコードに存在する単純名の参照および修飾名を設けるビルドシステムディペンデンシーに関して適切なパッケージ、ライブラリ、または外部コードをインポートするために、修飾名の候補を素早く探索することが望ましいであろう。
【0005】
概要
本明細書は、ソースコードファイル、たとえばJava(登録商標)言語のソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索することに関する技術を説明する。
【課題を解決するための手段】
【0006】
一般に、本明細書で説明される主題の一態様は、ソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するためのシステムにおいて具体化できる。システムの例は、1つ以上の処理装置と、方法の例を実現する命令を格納する1つ以上の記憶装置とを備え得る。方法の例は、対応する修飾名が求められている少なくとも1つの単純名を有するソースコードファイルを受信するステップと、ソースコードファイルをパースしてファイル内の単純名およびファイル内の修飾名を決定するステップと、対応する修飾名が必要とされる少なくとも1つの単純名に関して、ソースコードグラフを検索して少なくとも1つの単純名に対応する、可能性のある修飾名を検索するステップと、ソースコードグラフから可能性のある候補修飾名のリストを受信すると、リストを出力するステップとを含み得る。
【0007】
これらおよび他の実施形態は、以下の特徴のうちの1つ以上を任意に含み得る。可能性のある候補修飾名のリストを、リストの出力に先立って、付加情報でフィルタリングまたはエンリッチメントし得る。修飾名が選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定し得る。リストの出力に先立って特定の種類の修飾名が他のソースコードファイルによって使用された回数に基づいて、可能性のある候補修飾名のリストのフィルタリングを行ない得る。特定の修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて、リストのランク付けを行ない得る。リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで当該名前を修飾名として自動的に選択し得る。ユーザが可能性のある候補修飾名のリストから修飾名の選択を受信するように、インターフェースを提供し得る。フィルタリングは、修飾名に対応する可能性のある単純名が現在参照されているソースコードファイルから修飾名パッケージが可視であるかどうかを判断することと、修飾名パッケージがソースコードファイルから可視であるという判断に応じて、修飾名パッケージの名前を可能性のある候補修飾名として設けることとを含み得る。フィルタリングは、ソースコードファイルのビルドのために、時間またはリソースの増加を含む、修飾名パッケージがビルドプロセスに追加し得るコンプリケーション量を判断することと、修飾名パッケージがビルドプロセスに追加したコンプリケーション量が適切な量であるという判断に応じて、修飾名パッケージの名前を可能性のある候補修飾名のリストに追加することとを含み得る。
【図面の簡単な説明】
【0008】
【
図1】修飾名と単純名とを含むソースコードの例を示す図である。
【
図2】ソースコードファイル内の単純名の修飾された名前を決定するシステムの例を示すブロック図である。
【
図3】コンピューティングデバイスの例を示すブロック図である。
【
図4】
ソフトウェアパッケージのホスティングおよびパブリッシングのために配置されたコンピュータの例を示すハイレベルブロック図である。
【発明を実施するための形態】
【0009】
詳細な説明
ある実施形態例によると、特定のソースコードリポジトリまたは複数のリポジトリについて全てのソースコードを示す分散システムには大規模グラフが存在する場合がある。ソースコードがインデックス化されてグラフを作成し得る。いくつかの実施態様では、このグラフは、グラフが個別の開発者のマシンで実行されず同時に複数の開発者によってアクセス可能になるように、開発者によってリモートアクセスされる1台または複数のマシン上に存在し得る。最もシンプルな形式において、グラフは2つの表であり得、1つの表は単純名を修飾名にマッピングし、もう1つの表は修飾名をビルドシステムディペンデンシーにマッピングする。分散システムまたはクラウド環境でグラフを作成することおよびグラフにアクセスすることによって、開発者の間で計算のキャッシュおよび再利用が可能である。他の実施形態では、グラフは開発者自身のマシン上に存在し得る。
【0010】
図2に示すように、ソースコードファイルの例(201)には、3行目の「Bar」と5行目の「Foo」という2つの単純名がある。「Bar」の修飾名は、1行目の「com.sourcecode.Bar」としてコードに設けられている。しかしながら、「Foo」の修飾名は設けられていない。
【0011】
システムのある例では、開発者のマシンで実行される統合開発環境(IDE)が、特定のソースコードファイルで使用される単純名のリストを設け得るパーサ(203)を有し得る。また、パーサ(203)は、ソースコードファイル内の修飾名のリストを設け得る。
図2に示すソースコードファイルの場合、単純名のリストは[Foo, Bar]となり得る。修飾名のリストは、[com.sourcecode.Bar]となり得る。図示するように、単純名に対応する修飾名は設けなくてもよい。修飾名、および対応した修飾名が設けられていないソースコード内の単純名の修飾名を設けるビルドシステム構築物を探索するために、ソースコードグラフ(205)に、単純名の修飾名への可能性のある拡張についてクエリし得る。示された例では、ソースコードグラフ(205)に、「Foo」の修飾名および「Foo」と関連付けられたビルドディペンデンシーについてクエリし得る。この例で修飾名が「Bar」などのインポートとして設けられる場合、ビルドシステムディペンデンシーは存在するかもしれず、または存在しないかもしれない。したがって、完全修飾名がソースコードに設けられている場合であっても、ソースコードグラフ(205)にビルドシステムディペンデンシーについてクエリすることもある。
【0012】
たとえば、「Foo」を探している場合、ソースコードグラフ(205)の検索は、名前「Foo」を含むクラスおよびビルドシステムアーティファクトに一致し得る。いくつかの実施形態では、結果は、単純名がコードにおいて使用される態様によってフィルタリングされる。たとえば、仮に「Foo」の特定の方法が呼び出されると、その方法を含まない完了に関する完全修飾の可能性のある候補が、可能性のある候補のリストからフィルタリングされ得る。その後、クエリは、インポートおよびビルドシステムディペンデンシーのリストを戻す。当業者によって理解されるように、このリストの順序付けおよびフィルタリングを行なうさまざまな方法が存在する。
【0013】
ソースコードグラフ(205)は、ファイルで探索された単純名に関するビルドシステムディペンデンシーなどの情報を得るようにトラバースされ得る。たとえば、ソースコードグラフは、ソースコードがオブジェクトファイルにコンパイル可能になるように、ディペンデンシーのターゲットを単純名「Foo」の修飾名に設けることが可能である。
【0014】
ソースコードグラフ(205)をトラバースすることによって得られる所与の単純名の可能性のある修飾名のリストを、他のデータでエンリッチし、さらにフィルタリングすることが可能である(213)。エンリッチメントデータは、(ランキングを可能にするために)修飾名がリポジトリにおいて使用される回数と、修飾名が推奨しないようにマークされたかどうか、仮にマークされた場合は、何という修飾名を代わりに使用するべきかと、修飾名パッケージが現在参照されているソースコードから可視かどうか(いくつかのクラスを、意図的に特定のソフトウェアパッケージに限定し得る)と、ソースコードのビルドのために、この修飾名が、時間および/またはリソースの増加を含む、ビルドプロセスに追加可能なコンプリケーションの量とを含み得る。リストは、たとえば、特定の種類の修飾名が他のソースコードファイルによって使用された回数に基づいてフィルタリング可能である。フィルタリングは、すべての非可視クラスを除去すること、または、コード内の特定のコンテキスト内に適合しないであろうすべてのクラスを除去することも含み得る。たとえば、「Foo」は、ソースコードファイル内の特定の方法を呼び出し得るため、この方法を有さないすべての一致する「Foo」ライブラリは、可能性のある候補リストからフィルタリングされ得る。完了およびディペンデンシーの可能性のある候補のリストを検討のためにユーザ(215)に戻す場合、システムの例が、特定の修飾名がソースコードリポジトリの他の部分において他の開発者によって使用された頻度に基づいて、戻された結果のランク付けを行ない得る。
【0015】
いくつかの実施形態では、頻繁に使用された修飾名が、開発者のソースコードファイルにおいて開発者によって最も使用される可能性のある名前である。また、他のランキングのうち、名前は、それらの使用が考慮されているソースコードファイルにとって可視であるかどうか、名前が示すクラスがソースコードファイルにおいて使用されている方法を有するかどうか、および、クラスが推奨しないものであるかどうかによって、ランク付けし得る。推奨しないクラスは、名前のランキングにおいて降格可能である。その後、ユーザ(215)に、コード内の特定の単純名の参照のために可能性のある修飾名候補の、エンリッチメントおよびフィルタリングされたリストを見せることが可能であり、ユーザは、単純名をつけられたオブジェクトに関する最も適切なパッケージ、ライブラリ、または他の外部コードソースを選択し得る。ユーザ(215)が修飾名の候補からソースコード内の単純名の適切な修飾名を選択すると、特定の修飾名に関するビルドルールディペンデンシーおよびビルドターゲットを操作するために、選択された修飾名がソースグラフ(205)に再び送信されてビルドシステムディペンデンシーに関する情報を取得し得る。いくつかの実施形態では、クエリが最も一致する可能性のあるインポートおよびビルドシステムディペンデンシーを戻すことしか行なわないように、完了およびビルドシステムディペンデンシーの可能性のある候補のリストをフィルタリングし得る。
【0016】
図2に示すように、固有の修飾名(207、209)がソースコードグラフ(205)で探索されると、または、ファイル自体からパースされて(203)ソースコードファイル(201)において使用される単純名と一致すると、これらの修飾名をファイル(201)内に追加/インポートし得る。ソースグラフは、どのクラス/ビルドディペンデンシーが最も頻繁に使用されるかを判断するために、周期的に再作成可能である。
【0017】
図3に示すような方法の例が、対応する修飾名が探索されるべき(または、要求される)少なくとも1つの単純名を有するソースコードファイルの受信と共に開始する(301)。その後、ソースコードファイルはパースされて、ファイル内で使用される単純名のリストおよびファイル内のすべての修飾名の別のリストを探索し得る(303)。対応する修飾名が探索されるべき少なくとも1つの単純名に関して、すべてのソースコードのグラフを検索して単純名の可能性のある候補修飾名を探索可能である(305)。いくつかの実施形態では、名前の候補リストを付加情報でフィルタリングまたはエンリッチメントし得る。このリストを、ユーザが所与の単純名の適切な修飾名を選択するためにユーザに提供し得る(309)。いくつかの実施形態では、1つの候補修飾名しかない場合、ユーザは修飾名を選択する必要がないこともあり、その修飾名が自動的に選択され得る。他の実施形態では、1つの候補修飾名しかない場合、ユーザは修飾名が単純名に適切に一致するものだと確かめるだけでよい。修飾名が選択されると、方法の例が特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定し得る。ソースコードファイル内の単純名に一致する修飾名を、ソースファイルに追加し得る。その後、ソースコードグラフは再作成されてもよく、単純名/修飾名/ビルドディペンデンシー頻度に関する情報を今後の分析において使用して、修飾名およびビルドディペンデンシーを探索可能である。
【0018】
図4は、ソフトウェアパッケージのホスティングおよびパブリッシングのために配置されたコンピュータの例(400)を示すハイレベルブロック図である。きわめて基本的な構成(401)において、コンピューティングデバイス(400)は、1つ以上のプロセッサ(410)とシステムメモリ(420)とを備えることが典型的である。メモリバス(430)を、プロセッサ(410)とシステムメモリ(420)との間の通信のために使用できる。
【0019】
所望の構成に応じて、プロセッサ(410)は、マイクロプロセッサ(μP)、マイクロコントローラ(μC)、デジタル信号プロセッサ(DSP)、またはこれらの任意の組合せを含む任意の種類であり得るが、これらに限定されない。プロセッサ(410)は、レベル1キャッシュ(411)およびレベル2キャッシュ(412)などの1つ以上のレベルのキャッシング、プロセッサコア(413)、およびレジスタ(414)を備え得る。プロセッサコア(413)は、算術論理演算装置(ALU)、浮動小数点演算ユニット(FPU)、デジタル信号処理コア(DSP Core)、またはそれらの任意の組合せを含み得る。メモリコントローラ(416)もプロセッサ(410)と共に使用可能であり、またはいくつかの実施態様では、メモリコントローラ(415)はプロセッサ(410)の内部部品であり得る。
【0020】
所望の構成に応じて、システムメモリ(420)は、揮発性メモリ(RAMなど)、不揮発性メモリ(ROM、フラッシュメモリなど)、またはこれらの任意の組合せを含むいかなる種類でもよいが、これらに限定されない。システムメモリ(420)は、オペレーティングシステム(421)、1つ以上のアプリケーション(422)、およびプログラムデータ(424)を含むことが典型的である。アプリケーション(422)は、ソフトウェアパッケージのホスティングおよびパブリッシングのための方法を含み得る。プログラムデータ(424)は、1つ以上の処理装置によって実行されると、ソフトウェアパッケージのホスティングおよびパブリッシングのための方法(423)を実行する命令の格納を含む。いくつかの実施形態では、アプリケーション(422)をオペレーティングシステム(421)上でプログラムデータ(424)と共に動作するように配置可能である。
【0021】
コンピューティングデバイス(400)は、付加的な特徴または機能、ならびに基本構成(401)と任意の必要とされるデバイスおよびインターフェースとの間の通信を容易にするように、付加的なインターフェースを有し得る。
【0022】
システムメモリ(420)は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置、または所望の情報の格納に使用可能でありコンピューティングデバイス400によってアクセス可能な他の媒体を含むが、これらに限定されない。そのようないかなるコンピュータ記憶媒体も、デバイス(400)の一部であり得る。
【0023】
コンピューティングデバイス(400)は、上述の機能のうちのいずれかを含む携帯電話、スマートフォン、携帯情報端末(PDA)、パーソナルメディアプレーヤデバイス、タブレット型コンピュータ(タブレット)、無線ウェブウォッチ(web-watch)デバイス、パーソナルヘッドセットデバイス、アプリケーション向けデバイス、またはハイブリッドデバイスなどの、スモールフォームファクタ携帯用(モバイル)電子デバイスの一部として実現可能である。また、コンピューティングデバイス(400)は、ラップトップコンピュータ構成とラップトップコンピュータでない構成との双方を備えるパーソナルコンピュータとして実現可能である。
【0024】
上記の詳細な説明は、ブロック図、フローチャートおよび/または例の使用を介してデバイスおよび/またはプロセスのさまざまな実施形態を記載した。そのようなブロック図、フローチャートおよび/または例が1つ以上の機能および/またはオペレーションを含んでいる限りにおいて、当業者は、そのようなブロック図、フローチャートまたは例における各機能および/またはオペレーションは、広範囲のハードウェア、ソフトウェア、ファームウェアまたはそれの実質的に任意の組合せによって個々におよび/または集合的に実現され得るということを理解するであろう。一実施形態では、本明細書において記載される主題のいくつかの部分は、特定用途向け集積回路(ASIC: Application Specific Integrated Circuit)、フィールドプログラマブルゲートアレイ(FPGA: Field Programmable Gate Array)、デジタル信号プロセッサ(DSP: digital signal processor)、他の集積フォーマットを介して、またはウェブサービスとして実現され得る。しかしながら、当業者は、本明細書において開示される実施形態のいくつかの局面が、全体的または部分的に、1つ以上のコンピュータ上で動作する1つ以上のコンピュータプログラムとして、1つ以上のプロセッサ上で動作する1つ以上のプログラムとして、ファームウェアとして、または、それの実質的に任意の組合せとして、集積回路において均等に実現され得るということと、回路を設計すること、ならびに/または、ソフトウェアおよび/もしくはファームウェアのためのコードを記述することがこの開示を考慮して当業者の技能の範囲内であるということとを認識するであろう。加えて、当業者は、本明細書において記載される主題のメカニズムは、さまざまな形態のプログラムプロダクトとして配布可能であり、この配布を実際に行なうために使用される特定のタイプの非一時的な信号担持媒体にかかわらず、本明細書において記載される主題の例示的な実施形態が適用されるということを認識するであろう。非一時的な信号担持媒体の例は、フロッピーディスク(登録商標)、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、デジタルテープ、コンピュータメモリなどといった記録可能なタイプの媒体と、(たとえば光ファイバケーブル、導波路、有線通信リンク、無線通信リンクなどといった)デジタルおよび/またはアナログ通信媒体のような伝送タイプの媒体とを含むが、これらに限定されない。
【0025】
実質的に本明細書における任意の複数および/または単数の用語の使用に関しては、当業者は、必要に応じて、複数から単数におよび/または単数から複数に、文脈および/または用途に合わせて変更可能である。さまざまな単数/複数の並べ替えは、理解しやすいように本明細書では明白に説明可能である。
【0026】
このように、主題の特定の実施形態について説明が行なわれた。他の実施形態は、以下の特許請求の範囲内にある。いくつかの場合において、請求項において記載される動作は、異なる順序で実行可能であり、なお望ましい結果を達成可能である。加えて、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順序または連続した順序を必ずしも必要としない。特定の実施態様において、マルチタスキングおよび並列処理が有利であり得る。