(57)【要約】複数のデーター・ソースに対して同じソース・コードを使用することによって、ローカル、クラスター、およびクラウド実行間の移植を補助する。ソース・コードにおいて言明されるデーター・ソース識別子が、異なる実行ターゲットにおいてデーター・ソースにマッピングする。解決ＡＰＩを使用して、開発者のソース・コードを変更することなく、連続ターゲット専用に作られた実行可能コードが生成される。編集可能なデーター・ソース・マッピングは、プロジェクト毎であり、ファイルまたはプロジェクト・プロパティに維持され、実行可能コードと共に分散可能ソフトウェア・パッケージに置かれる。開発者が彼らのソース・コードにおいて実行ターゲットを決定しソース・コードにおいて異なる実行位置を明示的に扱う負担が軽減される。ソース・コードは、絶対パス・データー・ソース識別子、または実行位置を検出するコードをなくすることができる。ソース−ソース間変換は、フォルダー、ファイル、またはクラウド・コンテナを作るコールを注入する。データー・ソース解決は、データー・ソース識別子を根源とする相対パスに基づくことができる。【選択図】図１
2014529832.tif 000002
【特許請求の範囲】
【請求項１】
ソース・コードと複数の代替計算データー・ソースとを連携して管理するプロセスであって、
特定のデーター・ソース識別子がそれぞれの実行ターゲットにおいて複数のデーター・ソースにマッピングされるデーター・ソース・マッピングを得るステップと、
前記データー・ソース識別子をデーター・ソースとして言明する開発者ソース・コードを受けるステップと、
第１実行ターゲットを特定するステップと、
前記開発者ソース・コードから第１実行可能コードを自動的に生成するステップであって、前記第１実行可能コードが、前記第１実行ターゲットにおいて実行すると、前記第１実行可能ターゲットのマッピングされたデーター・ソースを、前記データー・ソース識別子によって特定される前記データー・ソースとして動作する、ステップと、
前記第１実行ターゲットとは異なるデーター・ソースを有する第２実行ターゲットを特定するステップと、
前記同じソース・コードから第２実行可能コードを自動的に生成するステップであって、前記第２実行可能コードが、前記第２実行ターゲットにおいて実行すると、前記第２実行ターゲットのマッピングされたデーター・ソースを前記第１実行ターゲットのデーター・ソースの代わりに、特定されたデーター・ソースとして動作する、ステップと、
を含む、プロセス。
【請求項２】
請求項１記載のプロセスにおいて、前記実行ターゲットを特定するステップが、ローカル実行ターゲット、クラスター実行ターゲット、クラウド実行ターゲットの内少なくとも２つを特定する、プロセス。
【請求項３】
請求項１記載のプロセスにおいて、前記同じ開発者ソース・コードから第２実行可能コードを自動的に生成するステップが、フォルダー作成コール、クラウド・コンテナ作成コール、ファイル作成コールの内少なくとも１つを注入するソース−ソース間変換を実行するステップを含む、プロセス。
【請求項４】
データーおよび命令が構成される(configure)コンピューター読み取り可能非一時的記憶媒体であって、前記命令が少なくとも１つのプロセッサーによって実行されると、前記プロセッサー（１つまたは複数）に、開発者によって使用するためのプロセスを実行させ、前記プロセスが、
特定のデーター・ソース識別子がそれぞれの実行ターゲットにおいて複数のデーター・ソースにマッピングされるデーター・ソース・マッピングを得るステップと、
前記データー・ソース・マッピングおよびソース・コードから、それぞれの異なる実行ターゲットに対して、少なくとも２つの異なるデーター・ソース解決を、前記開発者によるソース・コードに対する変更を必要とせずに、自動的に生成するステップと、
を含む、コンピューター読み取り可能非一時的記憶媒体。
【請求項５】
請求項４記載の構成媒体であって、前記生成するステップが、ユニバーサル・リソース識別子を含むデーター・ソース解決と、前記データー・ソース識別子を根源とする相対パスに基づくデーター・ソース解決の内少なくとも１つを生成する、構成媒体。
【請求項６】
請求項４記載の構成媒体において、前記生成するステップが、物理記憶位置識別ストリングの単なる置き換えを超えるものを含む、構成媒体。
【請求項７】
請求項４記載の構成媒体において、前記プロセスが、更に、前記開発者から前記実行ターゲットの仕様を受け入れるステップを含み、前記実行ターゲットの内少なくとも１つが、複数の計算デバイスを含み、前記実行ターゲットに対してマッピングされるデーター・ソースが、少なくとも１テラバイトのデーターを含む、構成媒体。
【請求項８】
コンピューター・システムであって、
論理プロセッサーと、
前記論理プロセッサーと動作可能に通信するメモリーと、
前記メモリー内に存在し、それぞれの異なる実行ターゲットにおいて複数の異なるデーター・ソースにマッピングされる特定のデーター・ソース識別子を有するデーター・ソース・マッピングと、
前記メモリー内に存在し、前記開発者ソース・コード内におけるデーター・ソースとして明言される前記データー・ソース識別子を有する開発者ソース・コードと、
前記メモリー内に存在し、命令を有する実行可能コード・プロデューサーであって、実行すると、異なる時点において同じ開発者ソース・コードから、複数の異なる実行可能コードを生成し、各実行可能コードが前記データー・ソースの内異なる１つに対する参照を行う、実行可能コード・プロデューサーと、
を含む、コンピューター・システム。
【請求項９】
請求項８記載のシステムにおいて、前記開発者ソース・コードには、実行位置を検出するコードがなく、前記開発者ソース・コードも絶対パス・データー・ソース識別子がない、システム。
【請求項１０】
請求項８記載のシステムにおいて、前記データー・ソース・マッピングが、テキスト構成ファイル、非テキスト・プロジェクト・プロパティ、プロジェクト特定構造、ユーザー特定構造の内少なくとも１つに存在する、システム。
【発明の詳細な説明】
【従来技術】
【０００１】
[0001]  １つの装置(machine)において実行するように個別製作された(tailor)コンピューター・プログラムは、追加の処理パワーおよび／または追加のメモリーを利用するために、代わりに複数の装置において実行するように、開発者によって変更できる場合がある。例えば、開発者が、本来１つのデスクトップ・コンピューターにおいて実行するように書かれたプログラムを取り上げ、計算クラスター、または計算クラウドというような１群のコンピューターにおいて代わりに実行させることを望む場合がある。更に一般的には、開発者が、特定の処理ロジックを適用して異なるデーター・ソースを処理することを望むが、各データー・ソースをそのロジックのパラメーターとして明示的に指定したくない場合もある。
【０００２】
[0002]  計算クラスターとは、高速ローカル・エリア・ネットワークまたは他の比較的高速な通信メカニズムを介して互いにリンクされた１群のコンピューターである。クラスター内のコンピューターは、このクラスターを外部から見たときに１つの強力なコンピューターとして挙動するように、互いに調整し合う。
【０００３】
[0003]  計算クラウドとは、構成設定変更可能な計算リソース（例えば、サーバー、ストレージ、アプリケーション、およびソフトウェア・サービス）をネットワーク化した共有プール(pool)である。クラウドのリソースは、ユーザーによる計算要求が増大または減少するにしたがって、素早くユーザーに利用可能にすることができ、そして容易に開放することができる。アプリケーションは、クラウド・サーバーによってブラウザに提供することができるので、アプリケーションのクライアント・コピーをローカルにインストールする必要はない。
【０００４】
[0004]  クラスターおよびクラウドについては種々の定義が使用されている。この説明に限って言えば、クラスターは、１０００個未満の処理コアを含み、および／または１つの建造物内に存在する。対照的に、計算クラウドは、１０００個以上のコアを含み、および／または２つ以上の建造物内に存在する。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
[0005]  プログラムをローカル実行コンテキストからクラスターまたはクラウド実行に移植する場合、煩わしくエラーが生じやすいコード変更を必要とする可能性があり、更に具体的には、そのプログラムにおいて使用されるデーター・ソースに対する参照を修正する（modify)変更(change)を必要とすることもある。非常に異なるサイズのデーター集合を対象にするプログラムを実行させることは、開発者にとって非常に意欲をかき立てることであり得る。本明細書において説明する実施形態は、１つのソース・コード・アルゴリズムを複数の代替計算データー・ソースによって自動的に管理する方法というような、広範囲のデーター集合にアクセスを与えるために、プログラム移植性を高める方法を提供する。
【課題を解決するための手段】
【０００６】
[0006]  例えば、データー・ソース・マッピングが存在するシナリオの中には、特定のデーター・ソース識別子が、それぞれの実行ターゲットにおいて実質的に異なるサイズの複数のデーター・ソースにマッピングされる。例えば、ローカル装置における数百ギガバイトに対してクラスターにおける数テラバイト、およびクラウドにおける数十または数百テラバイトにマッピングされることもある。一実施形態では、データー・ソース識別子をデーター・ソースとして言明する(recite)ソース・コードを受ける。第１実行ターゲットを特定した後、この実施形態は、ソース・コードから、第１実行ターゲット専用に作られる第１実行可能コードを自動的に生成する。即ち、第１実行ターゲットにおいて実行するとき、実行可能ファイル（executable）は、第１実行ターゲットのマッピングされたデーター・ソースを、データー・ソース識別子によって特定されるデーター・ソースとして動作する。第１実行ターゲットとは異なるデーター・ソースを有する第２実行ターゲットを特定した後、本実施形態は、自動的に、同じソース・コードから、第２実行ターゲット専用に作られた第２実行可能コードを生成する。即ち、第２実行ターゲットにおいて実行するとき、第２実行可能ファイルは、第１実行ターゲットのデーター・ソースを使用する代わりに、第２実行ターゲットのマッピングされたデーター・ソースを、特定されたデーター・ソースとして動作する。先に注記したように、この移植(port)は、開発者がソース・コードを編集する必要なく、行われる。
【０００７】
[0007]  実施形態の中には、データー・ソース・マッピングがテキスト構成ファイルにおいて維持される場合があり、そして実施形態の中には、非テキスト・プロジェクト・プロパティ、プロジェクト・ヘッダー、または他のプロジェクト特定構造から読み取られる場合がある。実施形態の中には、データー・ソース・マッピングが、分散可能なソフトウェア・パッケージの中に入れられることによって、どの実行位置（１つまたは複数）が現在パッケージにおける実行可能コードによってサポートされているかには関係なく、移植性が促進される。
【０００８】
[0008]  一実施形態では、ソース・コードにおいて実行ターゲットを決定し、ソース・コードにおいて明示的に異なる実行位置を扱う開発者の負担を低減または解消することができる。実施形態の中には、例えば、ソース・コードは絶対パス・データー・ソース識別子がない(free)場合もある。一実施形態では、開発者がソース・コード反復によって１つの装置におけるローカルな小さいデーターの部分集合と素早く作業し、次いで選択されたプログラム反復をクラウドまたはクラスターにおけるもっと大きなデーターに対して検査するのを補助する機敏さを提供することができる。
【０００９】
[0009]  実施形態の中には、コードを移植するために自動的なソース−ソース間変換メカニズム(source-to-source translation mechanism)を利用するものもある。データー・ソースの移植は、物理的記憶位置識別子ストリングの単なる交換を超えることを含む(encompass)こともある。例えば、実施形態の中には、第１実行可能ファイルが得られた(lead to)同じソース・コードからの第２実行可能コードの自動生成が、フォルダー作成コール、クラウド・コンテナ作成コール、またはファイル作成コールというような、ソースの開発者のバージョンにはなかったコールを注入するソース−ソース間変換を必要とするものもある。他のマッピングは、データーベース接続および単なるファイル・ベースのストレージには留まらないものを必要とすることもあり、例えば、ローカル、企業、クラウド・サーバー、または開発サーバーおよび製作サーバーというような、異なるデーター・ベース・サーバーをマッピングすることもある。ファイル・システム（例えば、Windows（登録商標）NTFS（商標）システム）およびクラウド・ストレージ（例えば、Windows（登録商標）Azure（商標）ストレージまたは他のクラウド・ストレージ）が、異なる記憶構造を有するのでもよく、実施形態の中には、これらの構造間でのマッピングに備えるものもある（Microsoft Corporationの商号(mark)）。
【００１０】
[0010]  開発者の観点から、実施形態は、特定のデーター・ソース識別子がそれぞれの実行ターゲットにおける複数のデーター・ソースにマッピングされるデーター・ソース・マッピングを得る。次いで、この実施形態は、開発者がソース・コードに対して全く変更する必要なく、データー・ソース・マッピングおよびソース・コードからデーター・ソース解決(resolution)を自動的に生成する。異なるデーター・ソース解決は、異なる実行ターゲットに対応し、例えば、ユニバーサル・リソース識別子を使用する特定のクラウド・データー・ソースまたは特定のクラスター・データー・ソースに対応する。実行ターゲットは、開発者によって指定されてもよく、またはデフォルトとして指定されてもよい。実施形態の中には、データー・ソース解決が、データー・ソース識別子を根源とする相対的パスに基づくことができるものもある。実施形態の中には、開発者からのデーター・ソース・マッピングの変更を受け入れるものもある。
【００１１】
[0011]  アーキテクチャー的観点からは、実施形態は、論理プロセッサーと、この論理プロセッサーと動作可能に通信するメモリーとを含む。データー・ソース・マッピングはメモリー内に存在し、特定のデーター・ソース識別子を有する。この識別子は、それぞれの異なる実行ターゲットにおける複数の異なるデーター・ソースにマッピングされる。データー・ソース・マッピングは、例えば、テキスト構成ファイル、非テキスト・プロジェクト・プロパティ、プロジェクト特定構造、および／またはユーザー特定構造内に存在まてゃあ存続することができる。また、ソース・コードはメモリーにも存在し、データー・ソース識別子は、ソース・コード内部のデーター・ソースとして言明される。メモリー内に存在する実行可能コード・プロデューサーは、命令を有し、これらの命令が実行されると、同じソース・コードから異なる時点において複数の異なる実行可能コードを自動的に生成し、各実行可能コードがデーター・ソースの内異なる１つに対する参照を行う。
【００１２】
[0012]  実施形態の中には、ソース・コードには実行位置を検出するためのコードがない場合もある。実施形態の中には、ソース・コードには絶対パス・データー・ソース識別子がない場合もある。実施形態の中には、実行可能コード・プロデューサーによって生成される実行可能コードを含むものもあり、この実行可能コードが、ソース・コード内にはない注入コード、例えば、フォルダー作成コール、クラウド・コンテナ作成コール、および／またはファイル作成コールを含む(contain)。
【００１３】
[0013]  実施形態の中には、実行可能コード・プロデューサーが解決ＡＰＩを含むものもある。解決ＡＰＩは、プロセッサーが実行すると、相対的パス(relative path)および実行ターゲットを解決し、物理的パスを含むデーター・ソース解決を得る。実施形態の中には、実行可能コード・プロデューサーがソース−ソース間トランスレーターを含む場合もある。異なる実施形態が１つ以上の全体的手法を採用するのでもよい。１つの手法では、ローカル装置において、ソース・コードが、指定された実行ターゲットに対する中間コード（ＩＣ）または実行可能コード（ＥＣ）に変換される。次いで、このＩＣまたはＥＣが展開され、実行ターゲットにおいて実行される。第２の手法では、ソース・コードが最初に実行ターゲットに変換する。この実行ターゲット用に設計されたプロデューサーが、該当するコードを変換する。第３の手法では、データーがコードに対してローカルであるかのように、ソース・コードが変換される。次いで、データーがリモート位置にある環境にこのコードが展開されると、プレタスク(pre-task)がデーターを最初にダウンロードするので、コードがローカル・データーにアクセスすることができる。
【００１４】
[0014]  以上に挙げた例は単なる例示に過ぎない。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。むしろ、この摘要は、詳細な説明において以下で更に説明する概念の一部を、簡略化した形態で、紹介するために設けられる。本発明は、特許請求の範囲によって定められ、この適用が特許請求の範囲と矛盾する場合には、特許請求の範囲が優先する。
【図面の簡単な説明】
【００１５】
[0015]  添付図面を参照して、更に特定的な説明を行う。これらの図面は、単に選択した形態を例示するに過ぎず、したがって適用範囲(coverage)または範囲を完全に決定するのではない。
【図１】図１は、複数のネットワーク・ノードにおいて一般に存在する動作環境における、少なくとも１つのプロセッサー、少なくとも１つのメモリー、ソース・コード、および他の品目を有するコンピューター・システムを示し、更に構成された記憶媒体実施形態も示すブロック図である。
【図２】図２は、アーキテクチャー例における変換コンテキスト・アウェア・データー・ソース管理を示すブロック図である。
【図３】図３は、プロセスおよび構成された記憶媒体実施形態のステップを示すフロー・チャートである。
【発明を実施するための形態】
【００１６】
全体像 
[0019]  データーの急増に直面している分野では、クラスターまたはクラウドにおける分散処理のように、大きく様々なデーター集合の一層高速で強力な処理を利用することが効果的になる。従前からのデスクトップおよび他の単一ノード・コンピューターは、大量のデーターを扱うには、処理パワーおよび容量が比較的限られているので、異なるソースからもっと大きなデーター集合を使用してクラスターまたはクラウドにおいて彼らのデスクトップ・アプリケーションを実行させることを望む開発者や技術者が増えつつある。例えば、開発者が小さいデーターの部分集合を使用してローカル・デスクトップにおいてアルゴリズムを開発し、次いで、この部分集合と同じフォーマットでデーター集合全体を収容するクラスターまたはクラウド用のプログラムにおいてそのアルゴリズムを実行することを望む場合がある。
【００１７】
[0020]  その結果生ずる課題の１つは、異なる実行環境間でどのように移行するかということである。技術者は、異なる実行環境毎に異なるデーター・ソースを使用することを望む場合もある。これは、各展開および実行の前に、複数のデーター参照を変更することを意味するはずである。所望のデーターが異なる実行環境毎に異なる物理的ストレージに格納されている場合、技術者がソース・コードを変更することを要求されることもある。何故なら、異なるデーター・プロバイダーは異なるアクセス方法を使用することが頻繁にあるからである。しかし、バージョンの激増(proliferation)および頻繁な変更が、コードの保守を難しくし、クラスターまたはクラウド採用(adoption)に対する障壁となる。
【００１８】
[0021]  幸い、本明細書において記載する実施形態は、１つのソース・コードを、異なる実行コンテキストに対する複数のデーター・ソースと調和する(coordinate)ツールおよび技法を提供する。実施形態では、コンテキスト・アウェア・データー・ソース／データー・プロバイダー抽象化メカニズムが、ローカル・ファイル・システム、ファイル・シェア、クラウド・ストレージ、ＦＴＰアドレス、特定のデーターベース、特定のデーター・ストリーム等のような、物理的データー・ソースに対する明示参照(express reference)を埋め込むことをユーザーが回避することを可能にする。プロジェクトが、実行位置（例えば、ローカル、クラスター、クラウド）に依存して、仮想参照を特定のデーター・ソースに自動的にリディレクトすることができる。同様に、ユーザーがデーター・アクセスのためにデーター・プロバイダーを仮想化することができる。次いで、プロジェクトは、所望のデーター・ストレージに依存して、実行可能コードを自動的に個別作成することができる。
【００１９】
[0022]  実施形態は、物理的データー・ソースおよびその下位層構造の仮想化を提供する。実施形態は、異なるデーター・アクセス方法の仮想化を提供する。実施形態は、実行位置毎に仮想参照と物理的データー・ソースとの間でマッピングする。実施形態は、実行位置に依存して、自動的にデーター参照をリディレクトし、データー・アクセス方法を更新する。
【００２０】
[0023]  状況によっては、１つの装置において開発されたプログラムを、この１つの装置の記憶容量を遙かに超える大規模なデーター集合に対してどのように実行するかということが、開発者が直面する主要な課題となる。本明細書において説明する実施形態は、開発者が異なるサイズに作られたデーター集合と共にコンピューター・プログラムを使用してアルゴリズムを調査するのに役立ち、例えば、最初に１つの装置において小さな部分集合に対してプログラムを実行し、次いで、同じ開発ソース・コードを使用し、シームレスなやり方でデーター集合全体に移る。その結果、コードを短縮し明瞭にすることができる。何故なら、開発者は実行位置を検出するためにコードを書くことを回避することができ、データーにアクセスするために相対パス(relative path)を使用することができるからである。ソース・コードの保守が一層容易になることができる。これは、複数の実行位置が使用されても、ソース・コードの１つのコピーのみが開発者によって追跡されるからである。実施形態の中には、データー・ソース・マッピングにおいて、物理ソースが１つの場所で特定／更新される場合がある。実行位置を切り替える毎のデーター・ソース変更を回避することによって、実行位置間における移行を一層円滑に行うことができる。
【００２１】
[0024]  本明細書において記載する実施形態には、もっと広いコンテキストにおいて見ることができるものもある。例えば、ソース・コード、実行可能コード、実行ターゲット、データー・ソース、およびマッピングというような概念は、特定の実施形態に関連があることもある。しかし、それでは、発明の独占権が、本明細書では抽象的な考えに求められる広い文脈の利用から得られない。発明の独占権は、抽象的な考えではない。むしろ、本開示は、しかるべく具体的な実施形態を提供することに重点を置いている。他の媒体、システム、ならびにソース・コード、実行可能コード、実行ターゲット、データー・ソース、および／またはマッピングを伴うメソッドは、本発明の範囲外である。したがって、曖昧さおよび付随する証明問題も、本開示の適切な理解の下では回避される。
【００２２】
[0025]  これより図面に例示するような実施形態例に言及するが、本明細書では特定の用語を同じ説明に使用する。しかし、本明細書で例示する機能の改変および他の変更、ならびに本明細書で例示する原理の更なる応用は、 関連技術（１つまたは複数）において本開示を入手する当業者には想起されようが、 これらも特許請求の範囲の範囲に該当すると見なされてしかるべきである。
【００２３】
[0026]  用語の意味が本開示で明確化されるので、これらの明確化に十分注意しながら特許請求の範囲を読解してしかるべきである。特定の例が与えられるが、他の例が、使用される用語の意味に該当することもあり、１つ以上の請求項の範囲に該当することもあることは、関連技術（１つまたは複数複数）の当業者には理解されよう。本明細書では、用語は、一般的な用法、特定の産業の用法、あるいは特定の辞書または１組の辞書における場合と必ずしも同じ意味であるとは限らない。用語の意味の幅を示すのに役立つように、種々の表現法によって参照番号を使用することもある。参照番号が所与の文章から省略されていても、図面の内容がその文章で説明されていないことを必ずしも意味するのではない。本発明者は、自身で辞書編集する自分の権利を主張して行使する。用語は、本明細書の詳細な説明および／または出願書類(application file)のいずれかの場所で明示的または暗示的に定められるであろう。
【００２４】
[0027]  本明細書で使用する場合、「コンピューター・システム」は、例えば、１つ以上のサーバー、マザーボード、処理ノード、パーソナル・コンピューター（携帯用またはそれ以外）、パーソナル・ディジタル・アシスタント、セル・フォンまたは移動体電話機、および／または少なくとも部分的に命令によって制御される１つ以上のプロセッサーを設ける他のデバイス（１つまたは複数）を含んでよい。命令は、ファームウェアの形態、あるいはメモリーおよび／または特殊回路内の他のソフトウェアの形態であってよい。具体的には、多くの実施形態がワークステーションまたはラップトップ・コンピューターにおいて実行することが想起されるかもしれないが、他の実施形態が他の計算デバイスにおいて実行してもよく、そのような任意のデバイスの１つ以上が、所与の実施形態の一部であってもよい。
【００２５】
[0028]  「マルチスレッド」コンピューター・システムは、複数の実行スレッドをサポートするコンピューター・システムである。「スレッド」という用語は、スケジューリングすることができるまたはスケジューリング（そして恐らくは同期）に従う任意のコードを含むことは理解されてしかるべきであり、例えば、「タスク」、「処理」、または「コルーチン」(coroutine)というような他の名称でも分かるであろう。スレッドは、並列に、逐次的に、または並列実行（例えば、多重処理）と逐次実行（例えば、時間スライス）とを組み合わせて実行することができる。マルチスレッド環境は、種々の構成で設計されてきた。実行スレッドは、並列に実行してよく、または実行スレッドは、並列実行に合わせて編成されてもよいが、実際には順番に逐次実行する。マルチスレッディングは、例えば、多重処理環境において異なるスレッドを異なるコア上で実行することによって、異なるスレッドを単一のプロセッサー・コア上で時間スライスすることによって、または時間スライスとマルチプロセッサー・スレッディングとをいくつか組み合わせることによって実現することができる。スレッド・コンテキストの切り替えは、例えば、カーネルのスレッド・スケジューラーによって、ユーザー空間信号によって、またはユーザー空間の動作とカーネルの動作との組み合わせによって開始することができる。スレッドは、例えば、順番に共有データーを処理することができ、または各スレッドが、例えば、それ自体のデーターを処理することもできる。
【００２６】
[0029]  「論理プロセッサー」または「プロセッサー」は、同時マルチスレッディング実現例におけるコアのような、１つの独立したハードウェア・スレッド処理ユニットである。他の例として、１コア当たり２スレッドを実行するハイパースレッド・クアド・コア・チップは、８つの論理プロセッサーを有する。プロセッサーは、汎用であってよいし、またはグラフィック処理、信号処理、浮動小数点算術演算、暗号化、Ｉ／Ｏ処理等の、特定の使用に対して個別に作ることもできる。
【００２７】
[0030]  「マルチプロセッサー」コンピューター・システムは、複数の論理プロセッサーを有するコンピューター・システムである。マルチプロセッサー環境は、種々の構成で見られる。所与の構成では、すべてのプロセッサーが機能的に同等であることもあれば、別の構成では、一部プロセッサーが異なるハードウェア能力、異なるソフトウェア割り当て、またはその両方を有することによって他のプロセッサーとは異なることもある。構成に依存して、プロセッサー同士が１つのバスにおいて互いに密結合されてもよいし、またはこれらが疎結合されてもよい。構成によっては、プロセッサーが中央メモリーを共有することもあり、ある構成では、プロセッサーがそれぞれ自身のローカル・メモリーを有することもあり、更にある構成では、共有メモリーおよびローカル・メモリーの両方が存在することもある。
【００２８】
[0031]  「カーネル」は、オペレーティング・システム、ハイパーバイザー、仮想装置(virtual machine)、ＢＩＯＳコード、および同様のハードウェア・インタフェース・ソフトウェアを含む。
【００２９】
[0032]  「実行可能コード」は、プログラミング言語以外の形態とした、プロセッサー命令、データー（定数、編集、およびデーター構造を含む）、または命令およびデーターの双方を意味する。
【００３０】
[0033]  「ソース・コード」は、任意に宣言および／またはデーターを伴う、ステートメントを意味し、コンピューター・プログラミング言語で書かれ、自動的に実行可能コードを生成するために使用されるように設計される。
【００３１】
[0034]  「プログラム」は、本明細書では広義に使用され、アプリケーション、カーネル、ドライバー、割り込みハンドラー、ライブラリー、およびプログラマ（開発者とも呼ぶ）によって書き込まれる他のコードを含む。
【００３２】
[0035]  「自動的に」は、自動化していないものとは対照的に、自動化（例えば、本明細書で説明する特定の動作のために、ソフトウェアによって構成される汎用計算ハードウェア）の使用を意味する。具体的には、「自動的に」実行されるステップは、手で紙の上に実行されるのでも、人の考えの中で実行されるのではなく、これらのステップは装置によって実行される。しかしながら、「自動的に」は、必ずしも「直ちに」を意味する訳ではない。
【００３３】
[0036]  本文書全体を通じて、任意の複数形の使用（「(s)」、「(es)」、(ies)」）は、示された特徴のうちの１つ以上が存在することを意味する。例えば、「データー・ソース（１つまたは複数）」は、「１つ以上のデーター・ソース」または等価に「少なくとも１つのデーター・ソース」を意味する。
【００３４】
[0037]  本文書全体を通じて、明示的に別段述べた場合を除き、プロセスにおけるステップに言及するときはいつでも、そのステップが、当事者によって直接実行される、および／または仲介メカニズムおよび／または仲介エンティティを介して当事者によって間接的に実行されるのでもよく、それでもなおそのステップの範囲に該当することを想定する。即ち、当事者がステップを直接実行することは、直接の実行が明示的に述べられた要件でない限り、要求されない。例えば、受け入れる、収容する、検出する、実行する、生成する、有する、特定する、含む、注入する、マッピングする、得る、動作する、実行する、置く、生成する、読む、受ける、存在する、解決する、交換する、変換する(transform)、または変換する(translate)（または、受け入れる、受け入れられる、収容する、収容される、検出する、検出される等）というような、宛先あるいは他の対象(subject）に関する当事者による行為を伴うステップは、転送する、コピーする、アップロードする、ダウンロードする、エンコードする、デコードする、圧縮する、解凍する、暗号化する、解読する、認証する、呼び出す等というような、他のある者による仲介行為を伴うのであってもよく、それでも当事者によって直接実行されると解釈することができる。
【００３５】
[0038]  データーまたは命令に言及するときはいつも、それらの品目は、コンピューター読み取り可能メモリーを構成し、それよって、例えば、単に紙上に存在するもの、誰かの考えによるもの、またはワイヤにおける一時的な信号とは対照的に、そのメモリーを特定の品目(article)に変換することが理解されよう。コンピューター読み取り可能メモリーまたは媒体は、特に別段述べられていなければ、非一時的であると想定される。
動作環境
[0039]  図１を参照すると、実施形態の動作環境１００は、コンピューター・システム１０２を含む。コンピューター・システム１０２は、マルチプロセッサー・コンピューター・システムであってもよく、またはそうでなくてもよい。動作環境は、所与のコンピューター・システム内に１つ以上の装置を含むことができ、そのコンピューター・システムは、クラスター、クライアント−サーバー・ネットワーク、および／またはピア・ツー・ピア・ネットワークであってもよい。個々の装置がコンピューター・システムであり、協働する装置の一群もコンピューター・システムである。所与のコンピューター・システム１０２は、エンド・ユーザーのために、例えば、アプリケーションを使用して構成することができ、アドミニストレータのために、サーバーとして、分散型処理ノードとして、および／または他の方法で構成することもできる。
【００３６】
[0040]  人間ユーザー１０４は、ディスプレイ、キーボード、および他の周辺機器１０６を使用することによってコンピューター・システム１０２と対話処理することができる。システム・アドミニストレーター、開発者、技術者、およびエンド・ユーザーは、各々が特定のタイプのユーザー１０４である。ひとり以上の人間の代わりに動作する自動化エージェントもユーザー１０４であってよい。実施形態の中には、記憶デバイスおよび／またはネットワーク・デバイスを周辺機器と見なしてもよい場合がある。図１に示していない他のコンピューター・システムが、コンピューター・システム１０２と対話処理することもでき、または、例えば、ネットワーク・インターフェース機器を介して、ネットワーク１０８に対する１つ以上の接続を使用して、別のシステム実施形態と対話処理することもできる。
【００３７】
[0041]  コンピューター・システム１０２は、少なくとも１つの論理プロセッサー１１０を含む。コンピューター・システム１０２は、他の適したシステムのように、１つ以上のコンピューター読み取り可能な非一時的記憶媒体１１２も含む。媒体１１２は、異なる物理的タイプであってよい。媒体１１２は、揮発性メモリー、不揮発性メモリー、位置が固定されている媒体、リムーバブル媒体、磁気媒体、光媒体、および／または他のタイプの非一時的媒体（単に信号を伝搬するワイヤのような一時的媒体とは対照的である）であるとよい。具体的に、ＣＤ、ＤＶＤ、メモリー・スティック等の構成媒体（configured medium）１１４、または他のリムーバブル不揮発性メモリー媒体は、挿入あるいはインストールされた時にコンピューター・システムの機能的部分になり、その内容がプロセッサー１１０によって使用されるようにアクセス可能にすることができる。リムーバブル構成媒体１１４は、コンピューター読み取り可能記憶媒体１１２の一例である。コンピューター読み取り可能記憶媒体１１２のその他の例には、内蔵ＲＡＭ、ＲＯＭ、ハード・ディスク、およびユーザー１０４によって容易に取り外すことができない他の記憶デバイスを含む。
【００３８】
[0042]  媒体１１４には、プロセッサー１１０によって実行可能である命令１１６が構成される。「実行可能ファイル」は、本明細書では、例えば、マシン・コード、解釈可能コード、および仮想マシンで実行するコードを含む広い意味で使用される。また、媒体１１４には、データー１１８も構成され、そのデーターは、命令１１６の実行によって作成され、変更され、参照され、および／あるいはそれ以外で使用される。命令１１６およびデーター１１８は、それらが存在する媒体１１４を構成する。そのメモリーが所与のコンピューター・システムの機能部分である場合、命令１１６およびデーター１１８は、そのコンピューター・システムも構成する。実施形態の中には、データー１１８の一部が、製品特性、在庫、物理的測定値、設定値、画像、読み取り値、ターゲット、ボリューム等の、現実世界の項目を表す場合がある。また、このようなデーターは、本明細書で説明するように、例えば、注入、変換、解決、結合、展開、実行、変更、表示、作成、装填(loading)、および／または他の動作によっても変換される(transform)。
【００３９】
[0043]  ソース・コード１２２および実行可能コード１２４を含むコード・ベース１２０、コンパイラー１２８、デバッガー１３０、および構成ファイル１３２というような開発ツール、他のソフトウェア、ローカル・データー・ソース１３４（データー・ソースは全体的に１３６で示す）、ならびに図に示すおよび／または本文において説明する他の項目は、部分的にまたは全体的に１つ以上の媒体１１２内に存在することができ、それによってこれらの媒体を構成する。
【００４０】
[0044]  プロセッサー（１つまたは複数）およびメモリー１１２に加えて、動作環境は、例えば、ディスプレイ１３８、バス、電源、およびアクセレレーターというような他のハードウェアも含むことができる。
【００４１】
[0045]  デバイス１０２は、ネットワーク１０８を介して、１つ以上の計算クラスター１４０、および／または１つ以上の計算クラウド１４２と通信することができる。クラスター１４０および／または計算クラウド１４２は、各々、これら自体のそれぞれのデーター・ソース１４４、１４６、ならびにそれら自体のプロセッサー（１つまたは複数）、メモリー、およびソフトウェアを有することができる。環境の中には、クラスターおよびクラウドにおけるデーター・ソースが、ローカル・データー集合よりも遙かに大きなデーター集合のためのものである場合もある。実際、クラスターまたはクラウド・データーベースに対する格納要件は、ローカル・データー・ソースのデーター記憶ボリュームの容量を遙かに超える可能性がある。
【００４２】
[0046]  所与の動作環境１００は、ソフトウェア開発プロジェクト１５０のために１組の調整されたソフトウェア開発ツールを開発者に提供する、統合開発環境（ＩＤＥ）１４８または他のソフトウェアを含むことができる。具体的には、一部の実施形態に適した動作環境の一部は、プログラム開発をサポートするように構成された Microsoft（登録商標）VisualStudio（登録商標）開発環境（Microsoft Corporation（マイクロソフト社）の標識(mark)）を含むまたはその作成に役立つ。適した動作環境には、Java（登録商標）環境（Oracle America, Inc.（オラクル・アメリカ社）の標識）を含むものがあり、更に適した動作環境には、Ｃ＋＋またはＣ＃（「Ｃシャープ」）等の、言語を利用する環境を含むものもある。しかし、本明細書における教示は、多種多様のプログラミング言語、プログラミングモデル、およびプログラムに適用可能であり、更にクラスター計算、クラウド計算、または双方を使用するソフトウェア開発自体の分野以外の試み(endeavor)にも適用可能である。
【００４３】
[0047]  １つ以上の品目は、これらが図示される動作環境の必ず必要な部分ではないことを強調するために、図１では概略形態で示されているが、本明細書によって説明する動作環境における品目と相互動作することができる。とは言え、いずれの図またはいずれの実施形態においても、概略形態にされていない品目が必ず必要とされるという訳ではない。
【００４４】
[0048]  図２のシステムは、実施形態とともに使用するのに適したアーキテクチャーを示す。データー・ソース・マッピング２０２は、ソース・コード１２２において使用されるデーター・ソース識別子２０４を、ローカル・データー・ソース１３４、クラスター・データー・ソース１４４、および／またはクラウド・データー・ソース１４６というような、それぞれのデーター・ソース１３６にマッピングする。これについては、以下で更に説明する。実行可能コード・プロデューサー２０６は、ソース・コード１２２およびデーター・ソース・マッピング２０２を使用して実行可能コード１２４を生成する。実行可能コード１２４は、特定のデーター・ソースおよびこれらへのアクセスに関して、特定の実行ターゲット２０８（例えば、ローカル、クラスター、またはクラウド）に対して専用に作られる。異なるデーター実行ターゲットは、同一にフォーマットされたデーターの異なる量というような、異なるデーター集合サイズを含む場合もある。例えば、データー集合のサイズは、そのデーター集合内のデーターが表す時間期間に依存する場合もある。例えば、ローカル・ディスクにおける１ヶ月分のデーターは、数百ギガバイトを占めるかもしれず、一方クラウド／クラスター・ストレージにおける数年分のデーターは、１００テラバイトのストレージを占めるかもしれない。他の例として、データー・ソース識別子にマッピングされたデーター・ソースの１つが、１０ギガバイト未満のデーターを含む可能性があり、一方同じデーター・ソース識別子にマッピングされたデーター・ソースの内他のものは、少なくとも１００ギガバイトのデーターを含む。２つを挙げるに留めるが、１００ギガバイト、またはテラバイトというような他の閾値を使用することもできる。このような状況では、一実施形態は、一方が比較的小さく他方が比較的大きいというような、複数のデーター集合に対して同一の開発ソース・コードを開発者が検査し易くすることができる。
【００４５】
[0049]  実行可能コード・プロデューサーは、コンパイル(compilation)およびリンキング(linking)を行うために、よく使われる命令に加えて、専用に作られる実行可能ファイルの生成を促進する命令２１０を含む。例えば、実施形態の中には、プロデューサー２０６が、データー・ソース識別子２０４を解決して物理位置（解決２１４）を得るＡＰＩ２１２を含む場合がある。実施形態の中には、プロデューサー２０６がソース−ソース間トランスレーター２１６を含む場合がある。ソース−ソース間トランスレーター２１６は、コール、宣言、および／または他のコードを開発者のソース・コード１２２に注入して、中間ソースを得て、次いでこの中間コードをコンパイルして、実行ターゲット専用に作られる実行可能コード１２４にする。
【００４６】
[0050]  本明細書ではローカル、クラスター、およびクラウド・ターゲット２０８が例として使用されるが、開発者１０４は異なる実行ターゲット２０８の仕様２１８（例えば、名称、アドレス、または他の詳細による）を提供するのでもよい。例えば、実施形態の中には、複数のクラスター１４０を指定できる場合があり、更に実施形態の中にはクラウド１４２を指定できない場合がある。
【００４７】
[0051]  実施形態の中には、１つ以上のデーター・ソース識別子２０４に対するデーター・ソース・マッピング２０２が、プロジェクト・プロパティ２２０（これも属性と呼ぶことがある）にというように、プロジェクト特定構造に格納される場合がある。
【００４８】
[0052]  実施形態の中には、１つ以上のデーター・ソース識別子２０４に対するデーター・ソース・マッピング２０２が、実行可能コード１２４と共にソフトウェア・パッケージ２２２に、プロパティ２２０の形態で、または構成ファイル１３２のような、他の形態で格納される場合がある。
【００４９】
[0053]  図１から図３を参照すると、実施形態は論理プロセッサー１１０およびメモリー媒体１１２を有するコンピューター・システム１０２を提供する。これらは、回路、ファームウェア、および／またはソフトウェアによって構成され、開発環境を変換する(transform)。更に具体的には、本明細書において説明するように、１つのソース・コードを複数の実行ターゲット・データー・ソースと調整することによって、ソース・コードを変換する。
【００５０】
[0054]  例えば、実施形態は、論理プロセッサー１１０、この論理プロセッサーと動作可能に通信するメモリー１１２、およびメモリー１１２を構成する品目を含む。メモリー１１２に存在する（したがって、メモリー１１２を構成する）データー・ソース・マッピング２０２は、それぞれの異なる実行ターゲット２０８において複数の異なるデーター・ソース１３６にマッピングされる少なくとも１つのデーター・ソース識別子２０４を有する。実施形態の中には、データー・ソース・マッピングが、メモリー１１２内において、例えば、テキスト構成ファイル、非テキスト・プロジェクト・プロパティ２２０、他のプロジェクト特定構造、および／またはユーザー特定構造内に存在する場合がある。メモリー１１２内に存在するソース・コード１１２（開発者１０４によって提供されるので、開発者ソース・コードとも呼ぶ）が、データー・ソース識別子２０４をデーター・ソース１３６として言明する。
【００５１】
[0055]  メモリー１１２内に存在する実行可能コード・プロデューサー２０６は、命令２１０、１１６を有する。命令２１０、１１６は、実行すると、同じ開発者ソース・コード１２２から、異なる時点において複数の異なる実行可能コード１２４を自動的に生成する。これらの実行可能コードの各々は他の実行可能コードと同じソースから自動的に生成されたのであっても、これらの実行可能コード１２４の各々は、データー・ソースの内異なる１つに対して参照を行う。
【００５２】
[0056]  このように、開発者は、開発者のソース・コード１２２内における異なる実行ターゲットの詳細を管理する負担を回避する。例えば、開発者のソース・コード１２２は、実行位置を検出するコードをなくすることができ、更に絶対パス３４６のデーター・ソース識別子をなくすることができる。特定のターゲット２０８に対して実行可能ファイルを専用に作るために必要とされるコードは、例えば、後続のコンパイルのために中間ソース３４４を作るため、および／または開発者のソース１２２から生成された実行可能コードに対するパッチとして、プロデューサー２０６によって注入することができる。注入に関して、実施形態の中には、フォルダー作成コール、クラウド・コンテナ作成コール、ファイル作成コールというような、開発者ソース・コードには存在しないコール３１８を含む中間ソース・コード３４４を使用する場合がある。
【００５３】
[0057]  実施形態の中には、実行可能コード・プロデューサー２０６が、解決ＡＰＩ２１２を含む場合がある。解決ＡＰＩ２１２１は、命令２１０を含む。命令２１０は、プロセッサーによって実行すると、相対パス３３４および実行ターゲット２０８を解決して、物理パス３４６を含むデーター・ソース解決２１４を得る。実施形態の中には、実行可能コード・プロデューサー２０６が、中間ソース・コード３４４を作るソース−ソース間トランスレーター２１６を含む場合がある。
【００５４】
[0058]  実施形態の中には、人間ユーザーＩ／Ｏデバイス（画面、キーボード、マウス、タブレット、マイクロフォン、スピーカー、動きセンサ等）というような周辺機器１０６が、１つ以上のプロセッサー１１０およびメモリーと動作可能に通信できる状態で存在する場合がある。しかしながら、人間のユーザー１０４が直接実施形態と対話処理しないように、実施形態がシステムの奥深くに埋め込まれてもよい。ソフトウェア・プロセスがユーザー１０４であってもよい。
【００５５】
[0059]  実施形態の中には、本システムが、ネットワークによって接続された複数のコンピューターを含む場合がある。ネットワーキング・インターフェース機器は、例えば、パケット交換ネットワーク・インターフェース・カード、ワイヤレス・トランシーバー、または電話ネットワーク・インターフェースというような、コンポーネントを使用して、ネットワーク１０８へのアクセスを与えることができる。これらのコンポーネントは、コンピューター・システム内に存在する。しかしながら、実施形態が、直接メモリー・アクセス、リムーバブル不揮発性媒体、あるいは他の情報格納−引き出しおよび／または送信手法によって通信するのであってもよく、あるいはコンピューター・システムにおける一実施形態が、他のコンピューター・システムと通信せずに動作するのでもよい。
プロセス
[0060]  図３は、フローチャート３００において、あるプロセス実施形態を示す。図に示すプロセスは、実施形態によっては、例えば、ＩＤＥ１４８内部にある実行可能コード・プロデューサー２０６によって、スクリプトの制御の下で、あるいは同時ユーザー入力を殆どまたは全く必要とせずに、自動的に実行することができる。また、特に別段指示がなければ、プロセスは、部分的に自動的にそして部分的に手動で実行されてもよい。所与の実施形態では、図示されるプロセスのステップの内０個以上を繰り返し、恐らくは異なるパラメーターまたはデーターに対して動作することができる。また、一実施形態におけるステップは、図３に並べられた上下の順序とは異なる順序で実行してもよい。ステップは、直列に、並列に重複するように、または完全に並列に実行されてもよい。プロセスの間に実行されるステップを示すためにフローチャート３００を辿る順序は、プロセスの実行毎に変化してもよい。また、フローチャートを辿る順序は、プロセスの実施形態毎に変化してもよい。また、実行されるプロセスが動作可能であり、少なくとも１つの請求項に沿うのであれば、図示するフローからステップを省略する、組み合わせる、名称変更する、分類し直す、またはそれ以外で逸れることもできる。
【００５６】
[0061]  ここで、本技術の態様を例示するのに役立てるために例を示すが、本文書内において示される例は、全ての可能な実施形態を説明する訳ではない。実施形態は、本明細書において示される具体的な実現例、構成、表示、特徴、手法、またはシナリオには限定されない。所与の実施形態が、例えば、追加のまたは異なる特徴、メカニズム、および／またはデーター構造を含んでもよく、それ以外で本明細書において示す例から逸れてもよい。
【００５７】
[0062]  マッピングを得るステップ３０２の間、実施形態はデーター・ソース・マッピング２０２を得る。ステップ３０２は、ファイルまたはプロパティ集合からマッピング２０２を読み取ることによって、および／または、例えば、他のメカニズムによって行うこともできる。
【００５８】
[0063]  ソース・コードを受けるステップ３０４の間、実施形態は、ファイルからコードを読み取ることによって、および／または、例えば、他のメカニズムによって、例えばＩＤＥ１４８エディターを介して開発者ソース・コード１２２を受ける。
【００５９】
[0064]  ターゲット特定ステップ３０６の間、実施形態は少なくとも１つの実行ターゲット２０８（「実行位置」または「実行コンテキスト」とも呼ぶ）を特定する。ステップ３０６は、例えば、組み込まれたデフォルトを使用することによって、および／またはユーザー１０４から仕様２１８を受け入れる（３２６）ことによって行うことができる。
【００６０】
[0065]  実行可能コード生成ステップ３０８の間、実施形態は、開発者ソース・コード１２２、データー・マッピング（１つまたは複数）２０２、およびターゲット２０８仕様（１つまたは複数）２１８から、実行可能コード１２４を自動的に生成する。よく知られているコンパイル、リンキング、および他の実行可能コード生成メカニズムを、データー・ソース識別子２０４、解決３３２、解決ＡＰＩ２１２、ソース−ソース間変換２１６、中間ソース・コード３４４、および／または開発者に１つのソース・コード１２２を使用することを許しつつ異なるターゲットにおいて複数のデーター・ソースを管理することをサポートするために本明細書において説明する他のメカニズムと連携して使用することができる。
【００６１】
[0066]  構成ファイル読み取りステップ３１０は、マッピングを得るステップ３０２の一部であってもよく、このステップ３１０の間、実施形態はデーター・ソース・マッピングを構成ファイル１３２から、ファイル・システム、ネットワーキング、および／または他のメカニズムを使用して読み取る。更に一般的には、ステップ３１０の間、実施形態は、例えば、構成ファイル、プロジェクト・プロパティ２２０、あるいはユーザー特定設定値または環境構造というような構造３１２から、データー・ソース・マッピング２０２を読み取る。
【００６２】
[0067]  変換実行ステップ３１４の間、実施形態は、ソース−ソース間変換を自動的に実行し、宣言、コール３１８、および／または特定の実行位置に対してコードを専用に作る他のコードを注入することによって、開発者によって提供されたソース・コード１２２から中間ソース・コード３４４を作る。よく知られているシンタックス・メカニズムを、本明細書において説明するように実行するように構成されたよく知られているセマンティック分析と共に使用することができる。
【００６３】
[0068]  コード注入ステップ２１６は、変換実行ステップ３１４の一部として行われてもよく、このステップ２１６の間、実施形態は自動的にコール３１８および／または他のソース・コードを開発者ソース・コード１２２に注入して、中間ソース・コード３４４を形成する。中間ソース・コード３４４は、データー・ソースのターゲット特定の詳細、およびそれらのアクセス・メカニズムを含む。適したコード変換について本明細書において説明し、例を示す。実施形態では、中間ソース・コード３４４が存在しても、ユーザーには中間ソース・コード３４４の詳細で煩わすことはない。
【００６４】
[0069]  マッピング配置ステップ３２０の間、実施形態は、データー・ソース・マッピング２０２を分散可能なソフトウェア・パッケージ２２２に置く（例えば、書く、関連付ける、追加する）。マッピング２０２は、例えば、プロパティ２２０、ヘッダー、あるいは構成または環境変数ファイルにデーター・ソース・マッピング２０２を置くように構成された、よく知られている書き込みメカニズムを使用して、置く（３２０）ことができる。
【００６５】
[0070]  解決生成ステップ３２２は、生成ステップ３０８の一部であってもよく、この解決生成ステップ３２２の間、実施形態は、データー・ソース解決３２２をデーター・ソース・マッピング２０２および開発者ソース・コード１２２から自動的に生成する。ステップ３３２は、マッピング２０２のデーター・ソース識別子２０４がソース・コード１２２において相対パス３３４と共に使用されるときには、解決ステップ３３２を含むこともできる。
【００６６】
[0071]  変更受け入れステップ３２４の間、実施形態はユーザー１０４からエディターまたはＩＤＥ（例えば）を介して、以前に得られた（３０２）データー・ソース・マッピングの変更を受け入れる。例えば、データー・ソース識別子２０４を追加、除去、または名称変更することができる。ターゲット２０８を追加または除去することができる。データー・ソース物理位置を変更することができる。ステップ３２４は、存在チェック（例えば、物理位置またはターゲットが存在するか否か）、シンタックス・チェック（例えば、データー・ソース識別子におけるＵＲＩまたは絶対パスの不在）、および／または変更が受け入れられる前における他の有効性検査を含むことができる。
【００６７】
[0072]  ターゲット仕様受け入れステップ３２６の間、実施形態は、ユーザー１０４からエディターまたはＩＤＥ（例えば）を介して、ターゲット（１つまたは複数）２０８における少なくとも１つの変更の仕様、例えば、ターゲットの追加、または以前に指定したターゲットの除去を受け入れる。
【００６８】
[0073]  マッピング・ステップ３２８の間、実施形態（または実施形態のユーザー操作の形態）は、例えば、データー・ソース・マッピング２０２を作るまたは変更することによって、識別子２０４を実行ターゲット・データー・ソース（１つまたは複数）１３６にマッピングする。
【００６９】
[0074]  言明するステップ３３０の間、実施形態（または実施形態のユーザー操作の形態）は、開発者ソース・コード１２２において、データー・ソース識別子２０４を言明する（例えば、読み取るまたは書き込む）。データー・ソース識別子２０４は、（ａ）データー・ソース１３６を識別し、（ｂ）個々の(particular)ターゲットのデーター・ソースに特定ではない識別子である。実際、データー・ソース識別子２０４は、実行中にそのまま使用することができず、マッピングされなければならない（３２８）。マッピングされていないデーター・ソース識別子２０４を使用しようとすると、データー・ソースの物理位置のような詳細がデーター・ソース識別子自体から失われるので、コンパイル時および／または実行時にエラーが発生する。
【００７０】
[0075]  解決生成ステップ３２２の一部であってもよい相対パス解決ステップ３３２の間、相対パス３３４を含むデーター・ソース識別子が解決されて、データー・ソース解決２１４が得られる。
【００７１】
[0076]  ソース変更回避ステップ３３６は、実行可能コード生成ステップ３０８の一部として見なすことができ、ソース・コードを受けるステップ３０４の一部として見なすことができ、および／または１つの受け取った（３０４）ソース・コード１２２から複数のターゲットに対するコードを生成するステップ（３０８）を含むプロセスの一部として見なすこともできる。このソース変更回避ステップ３３６の間、ユーザー（および実施形態）は、ソース・コード１２２のユーザーのコピーを変更することを回避する。つまり、ユーザーは、ターゲット特定のデーター・ソース実装(implementation)の詳細を提供するまたは理解する負担を回避する。
【００７２】
[0077]  絶対パス回避ステップ３３８は、実行可能コード生成ステップ３０８の一部として見なすことができ、ソース・コードを受けるステップ３０４の一部として見なすことができ、および／または１つの受け取った（３０４）ソース・コード１２２から複数のターゲットに対するコードを生成するステップ（３０８）を含むプロセスの一部として見なすこともできる。この絶対パス回避ステップ３３８の間、ユーザー（および実施形態）は、データー・ソース１３６にアクセスするために、ソース・コード１２２における絶対パスを使用することを回避する。つまり、つまり、ユーザーは、ターゲット特定のデーター・ソース実装(implementation)の詳細を提供するまたは理解する負担を回避する。
【００７３】
[0078]  位置検出コード回避ステップ３４０は、実行可能コード生成ステップ３０８の一部として見なすことができ、ソース・コード受信ステップ３０４の一部として見なすことができ、および／または１つの受け取った（３０４）ソース・コード１２２から複数のターゲットに対するコードを生成するステップ（３０８）を含むプロセスの一部として見なくこともできる。この位置検出コード回避ステップ３４０の間、ユーザー（および実施形態）は、所望のデーター・ソース１３６にアクセスするためにターゲット位置を検出しようとするまたはターゲット２０８間で区別しようとするソース・コード１２２を使用することを回避する。つまり、ユーザーは、 ターゲット特定のデーター・ソース実装の詳細を提供するまたは理解する負担を回避する。
【００７４】
[0079]  メモリー構成ステップ３４２の間、データー・ソース・マッピング２０２、解決ＡＰＩ２４、実行可能コード・プロデューサー２０６のデーター・ソース変換命令によって、および／またはそれ以外では、本明細書において説明するように、異なる実行位置においてデーター・ソースを仮想化するために１つのソース・コードおよびマッピングを使用することに関連して、 メモリー媒体１１２が構成される。
【００７５】
[0080]  以上のステップおよびそれらの相互関係について、種々の実施形態と関連付けて以下に更に詳細に説明する。
[0081]  実施形態は、ソース・コードおよび複数の代替計算データー・ソースを連携して管理するプロセスを提供する。このプロセスは、データー・ソース・マッピング２０２を得るステップ（２０２）を含み、このデーター・ソース・マッピング２０２では、特定のデーター・ソース識別子２０４が、それぞれの実行ターゲット２０８において複数のデーター・ソース１３６にマッピングされる。このプロセスは、開発者ソース・コードを受ける（３０４）。この開発者ソース・コードは、データー・ソース識別子をデーター・ソースとして明言し（３３０）、第１実行ターゲットを特定し（３０６）、開発者ソース・コードから第１実行可能コード１２４を自動的に生成する（３０８）。第１実行可能コードは、第１ターゲット専用に作られ、第１実行ターゲットにおいて実行すると、第１コード１２４が、第１実行ターゲットのマッピングされたデーター・ソースを、このソース１３６がソース・コード１２２において明示的に述べられていなくても、データー・ソース識別子２０４によって特定されたデーター・ソースとして動作する。第１実行ターゲットとは異なるデーター・ソースを有する第２実行ターゲットを特定した（３０６）後、本プロセスは、同じソース・コード１２２から、第２ターゲット専用に作られる第２実行可能コードを自動的に生成する（３０８）。即ち、第２実行ターゲットにおいて実行すると、第２コード１２４は、第２実行ターゲットのマッピングされたデーター・ソースを、第１実行ターゲットのデーター・ソースの代わりに、特定されたデーター・ソースとして、動作する。
【００７６】
[0082]  多くの変形が考えられる。実施形態の中には、テキスト構成ファイルを読み取ることによって、または非テキスト・プロジェクト・プロパティを読み取ることによって、データー・ソース・マッピングを得るステップ（３０２）を含むものもある。実施形態の中には、受けるステップが、絶対パス・データー・ソース識別子がない（即ち、回避する（３３８））開発者ソース・コード１２２を受ける（３０４）場合もある。実施形態の中には、実行可能ターゲット特定ステップが、以下の内少なくとも２つを特定する（３０６）場合もある。ローカル実行ターゲット、クラスター実行ターゲット、クラウド実行ターゲット。実施形態の中には、同じ開発者ソース・コードから第２実行可能コードを自動的に生成するステップ（３０８）が、以下のコール３１８の内少なくとも１つを注入する（３１６）ソース−ソース間変換を実行する（３１４）場合もある。フォルダー作成コール、クラウド・コンテナ作成コール、ファイル作成コール。実施形態の中には、分散可能なソフトウェア・パッケージ２２２にデーター・ソース・マッピング２０２を配するステップ（３２０）を含むものもある。
【００７７】
[0083]  開発者体験の観点から、実施形態の中には、特定のデーター・ソース識別子がそれぞれの実行ターゲットにおいて複数のデーター・ソースにマッピングされるデーター・ソース・マッピングを得るステップ（３０２）と、データー・ソース・マッピング２０２およびソース・コード１２２から、開発者によるソース・コード１２２へのいかなる変更も必要とせずに（即ち、回避して３３６）、それぞれの異なる実行ターゲットに対して少なくとも２つの異なるデーター・ソース解決２１４を自動的に生成するステップ（３２２）を含むものもある。
【００７８】
[0084]  この場合も、変形が考えられる。実施形態の中には、得るステップ３０２が、データー・ソース・マッピングをプロジェクト特定構造から読み取るステップ３１０を含むものもある。実施形態の中には、生成するステップが、ユニバーサル・リソース識別子（ＵＲＩ）を含む少なくとも１つのデーター・ソース解決２１４を生成する（３２２）場合もある。実施形態の中には、生成するステップが、データー・ソース識別子を根源とする相対パス３３４に基づいて、少なくとも１つのデーター・ソース解決を生成する（３２２，３３２）場合もある。実施形態の中には、生成するステップ３２２が、物理記憶位置識別子ストリングの単なる置き換えを超えることを含む(encompass)場合もある。例えば、コール３１８を注入する（３１６）のでもよい。
【００７９】
[0085]  実施形態の中には、本プロセスが更にデーター・ソース・マッピングの変更を開発者１０４から受け入れるステップ３２４を含むものもある。実施形態の中には、実行ターゲットの仕様を開発者から受け入れるステップ３２６を含むものもある。この場合、実行ターゲットの内少なくとも１つが、複数の計算デバイス、例えば、クラスターまたはクラウドをターゲットとして含むことができる。
INPUT TEMPの例
[0086]  非限定的な一例として、可能な実施形態を更に例示するために、以下のことを提示する。
【００８０】
[0087]  実施形態が、データー・ソース識別子２０４がそれぞれの実行位置（ターゲット２０８）において複数のデーター・ソース１３６にマッピングされる（３２８）データー・ソース・マッピング２０２を得る（３０２）と仮定する。例えば、以下のマッピング２０３では、INPUTおよびTEMPがデーター・ソース識別子であり、d:/MyData/Input/, \\fileshare\TeamFolder\MyInput\等がデーター・ソースであり、ローカル、クラスター、およびクラウドが実行位置である。
【００８１】
【表１】
2014529832.tif 000003
【００８２】
[0088]  ＵＳＰＴＯの慣例にしたがって、以上のアドレス、ならびに他の全ての文字の(literal)ＵＲＬ、ＵＲＩ、ディレクトリー・パス、見かけ上のハイパーリンク、および本特許文書における他のデーター・ソース・アドレスは、単なる例に過ぎないことを意図していることに注意すること。これらは、何らかの他の文書に達するという結果になることを意味するのではなく、これらは引用したことにより任意の情報が本文書にも含まれることを意味するのでもない。
【００８３】
[0089]  この例では、本実施形態は、データー・ソース識別子をデーター・ソースとして言明するソース・コードを受ける（３０４）。例えば、
【００８４】
【表２】
2014529832.tif 000004
【００８５】
[0090]  この例を続けると、本実施形態は第１実行位置、例えば、ローカルも特定する（３０６）。本実施形態は、ソース・コードから第１実行可能コードを自動的に生成する（３０８）。この第１実行可能コードは、第１実行位置において実行すると、例えば、実際に受け取られたソース・コードがあたかも代わりに以下の等価のソース・コードであったかのように、第１実行位置のマッピングされたソース・データーをデーター・ソースとして動作する。
【００８６】
【表３】
2014529832.tif 000005
【００８７】
[0091]  本実施形態は、第２実行位置、例えば、クラスターを特定し（３０６）、同じソース・コードから第２実行可能コードを自動的に生成する（３０８）。第２実行可能コードは、第２実行位置において実行すると、例えば、受け取られたソース・コードがあたかも代わりに以下の等価なソース・コードであったかのように、第２実行位置のマッピングされたデーター・ソースをデーター・ソースとして動作する。
【００８８】
【表４】
2014529832.tif 000006
【００８９】
[0092]  この例について検討するとき、ローカルの等価なソース・コードとクラスターの等価なソース・コードとの間にある唯一の相違が、第１ラインにおいて「new folder()」のパラメーターとして渡されるストリング値であると間違って捕らえることもあり得る。即ち、一見すると、TEMP_DATA_SOURCE="d:/MyData/Input/"と設定することによって、またはTEMP_DATA_SOURCE="\\fileshare\TeamFolder\MyInput\"と設定することによって、例えば、コマンド・ライン・パラメーターを使用することによって、グローバル・ストリング変数TEMP_DATA_SOURCEが同じ結果を得るために使用することができたように思われるかもしれない。しかしながら、更に吟味すると、単にストリングを設定するだけでは、new folder()を作るコードは生成されないことが明らかになる。加えて、ストリング変数は、クラスター実行に対して等価なソースの機能を与える程強力ではない。何故なら、これは異なるストリングを伴うだけでなく、フォルダーの代わりにブロブコンテナ(blobcontainer)を作りアクセスすることも伴うからである。
【００９０】
[0093]  以上のことを実現する１つの方法は、開発者のソースＳ−オリジナル（ソース・コード１２２）を実行−位置−依存ソースＳ−従属（中間ソース・コード３４４）に変換し、次いでこの変換したソースＳ−従属をコンパイルすることである。場合によっては、ブリプロセッサーをソース−ソース間トランスレーター２１６の一部として使用することができる。
構成媒体
[0094]  実施形態の中には、構成された(configured)コンピューター可読記憶媒体１１２を含むものがある。媒体１１２は、ディスク（磁気ディスク、光ディスク、またはその他）、ＲＡＭ、ＥＥＰＲＯＭまたは他のＲＯＭ、および／または、特に非一時的なコンピューター可読媒体（ワイヤまたは他の伝搬信号媒体とは対照的である）を含む、他の構成可能メモリーを含んでもよい。構成される記憶媒体は、特に、ＣＤ、ＤＶＤ、またはフラッシュ・メモリー等の、リムーバブル記憶媒体１１４であってもよい。汎用メモリーは、リムーバブルでも非リムーバブルでもよく、更に揮発性でも不揮発性でもよく、データー・ソース・マッピング２０２、実行可能コード・プロデューサー２０６、および解決ＡＰＩ２１２というような品目を使用して、データー１１８および命令１１６の形式で実施形態に構成することができる。データー１１８および命令１１６は、構成媒体を形成するために、リムーバブル媒体１１４および／またはネットワーク接続のような他のソースから読み取られる。構成媒体１１２は、本明細書において開示したようにデーター・ソース管理によってデーターを変換するプロセス・ステップを、コンピューター・システムに実行させることができる。このため、図１から図３は、構成記憶媒体の実施形態および処理の実施形態、ならびにシステムおよび処理の実施形態を例示するのに役立つ。具体的には、図３に例示した処理ステップ、または本明細書において教示した処理ステップのいずれも、構成媒体の実施形態を形成する記憶媒体を構成するのに役立つように使用することができる。
付加的な例
[0095]  付加的な詳細および設計の考察を以下に示す。本明細書の他の例と同様に、説明する機能は、所与の実施形態において、個々におよび／または組み合わせて使用されてもよいし、または全く使用されなくてもよい。
【００９１】
[0096]  実現例の詳細は、特定のＡＰＩおよび特定のサンプル・プログラム等の、特定のコードに関連する場合もあり、したがって、あらゆる実施形態で出てくる必要がないことは、当業者には理解されよう。また、詳細を論じるときに使用されるプログラム識別子および他の用語は、実現例に特定であり、したがって、あらゆる実施形態に関連する必要がないことも、当業者には理解されよう。これらの詳細は、必ずしもここで提示される必要がある訳ではないが、そのような詳細は、コンテキストを規定することによって読者に役立つことができるので、および／または本明細書において説明する技術の多くの可能な実現例の内少数を例示することができるので、提示されるのである。
【００９２】
[0097]  実施形態の中には、抽象化メカニズムを提供するものもある。 この抽象化メカニズムは、仮想化としても知られる。仮想化は、データー・マッピング２０２を含む、プロジェクト設定またはユーザー設定を含むこともできる。手法によっては、設定ファイルがプロジェクト１５０毎に自動的に作られ、既存のユーザー設定をそのファイルにインポートすることができる。設定ファイルは、任意の数の参照項目および様々な実行位置を含むことができる。参照項目毎に、設定ファイル・マッピング２０２は、このデーター参照を表すために名称（例えば、識別子２０４）と、実行位置毎に物理データー・ソース（例えば、絶対パス３４６）を有する。
【００９３】
[0098]  マッピングされたデーター・ソース１３６は、以上のINPUT TEMPの例におけると同様に、異なるデーター・プロバイダーから来ることもできる。符合化するとき、ユーザーは、名称、例えば、「INPUT」または「TEMP」を参照することによって、データーを読み取る／書き込む。データー・ソース１３６が階層を有する場合、ユーザーは、「INPUT/OrderData」のような相対パス３３４を使用してデーターを参照することができる。ユーザーがソースからの全てのデーターに対して動作を繰り返す必要がある場合、ユーザーは、場合に応じて、 "foreach (file f in TEMP) do_things(f);"または "foreach (file f in INPUT/OrderData) do_things(f);"というようなコード１２２を書き込むことによって、データー・ソース１３６全体を繰り返すことができる。
【００９４】
[0099]  プロジェクト１５０を構築するとき、ユーザーは、実行ターゲットから１つを選択する。次いで、構築システムは、設定ファイル・マッピング２０２にしたがって、異なるデーター・プロバイダー間におけるしかるべきマッピングによって、ソース・コードにおける名称を、対応する物理ソースに変換（マッピング、解決）する。
【００９５】
[00100]  例えば、以下のソース・コード１２２を仮定する。
【００９６】
【表５】
2014529832.tif 000007
【００９７】
[00101]  この同じソース１２２から、プロデューサー２０６は、指定されたターゲット２０８に基づいて、実行可能コード１２４を生成することもできる。つまり、ローカル・ターゲットに対して、この実行可能ファイルはこの中間ソース３４４に対応することができる。
【００９８】
【表６】
2014529832.tif 000008
【００９９】
[00102]  クラスター・ターゲットに対して、
【０１００】
【表７】
2014529832.tif 000009
【０１０１】
[00103]  クラウド・ターゲットに対して、
【０１０２】
【表８】
2014529832.tif 000010
【０１０３】
[00104]  以下の説明は、プロジェクト・データー・ライブラリー（ＰＤＬ）文書に由来する。プロジェクト・データー・ライブラリーとは、Microsoft Corporation（マイクロソフト社）によって設計されたソフトウェア・コンポーネントおよびサービスの集合体である。ＰＤＬソフトウェアおよび／または文書化の形態は、本明細書において記載する実施形態と一貫性があり、言い換えると、実施形態を例示する。しかしながら、ＰＤＬ文書化および／または実現例の選択肢は、必ずしもこのような実施形態の範囲を制約することはないことは言うまでもなく、同様に、ＰＤＬおよび／またはその文書化は、このような実施形態の範囲外になる特徴も当然含むことも言うまでもない。加えて、Microsoft（登録商標）のAzure（商標）クラウド技術が例において使用されるが、教示および実施形態はこの特定のクラウド技術（Microsoft Corporationの標識(mark)）には必ずしも限定されない。また、以下の説明は、部分的に、必ずしも当業者とは限らない読者に対して補助として提供されるのであり、したがって以下で言明することが、本開示をサポートするために厳格には必要とされない詳細を含むことおよび／または省略するもあることも言うまでもない。
【０１０４】
[00105]  プロジェクト・データー・ライブラリー（ＰＤＬ）の機構は、クライアント、クラウド・ストレージ、およびリモート計算ノードに跨がって、リモート実行に対するソース・コード変更を行うことなく、シームレスなデーター・アクセスを提供することを目的とする。これは、計算ノードにおけるローカル・ファイル・ストレージ、ステージング・ストレージ(staging storage)、およびファイル・ストレージ間における、データー参照のプロジェクト毎の抽象化（仮想化）を含む。ローカル・ボックスにおけるＰＤＬはローカルＰＤＬと呼ぶことができ、リモート計算ノードにおけるＰＤＬはリモートＰＤＬと呼ぶことができる。
【０１０５】
[00106]  Microsoft（登録商標）のWindows（登録商標）７オペレーティング・システム・ソフトウェアは、ユーザー・コンテンツを格納するために特定のフォルダーを含むライブラリー、例えば、「音楽ライブラリー」および「文書ライブラリー」（Microsoft Corporationの標識）を提供する。この場合、ライブラリー抽象化は、様々なフォルダーの論理集合体を表す（１つはデフォルトの書き込み位置である）。対照的に、ＰＤＬは、ローカル・ファイル・システム、クラウド・ストレージ、およびリモート計算ノードのファイル・システムというような、複数のストレージおよび実行環境に跨がるマッピングをサポートすることができる。
【０１０６】
[00107]  ＰＤＬは、ローカルＰＤＬにおける各ファイルを、Azure（商標）ブロブ・ストレージ（Microsoft Corporationの標識）における１つのコンテナにマッピングすることができる。例えば、ローカルＰＤＬを、プロジェクト空間下における物理フォルダーにマッピングすることができ、データー集合全体からダウンロードされた１つのファイルを含む。クラウドＰＤＬを、ユーザーのAzure（商標）ストレージ下のコンテナにマッピングすることができ、リモートＰＤＬをモデル展開ディレクトリー（「モデル」は、ここでは、コンピューター・プログラムを指す）下の物理フォルダーにマッピングすることができる。クライアント、クラウド、およびクラスターに跨がるＰＤＬ移行(transition)は、クラウド・ストレージの物理的性質(physical nature)をユーザーのビュー(view)から取り除き、ユーザーはデーターおよびモデリングに集中することができる。したがって、実行可能コードにおけるデーター参照は、絶対パスを全くハードコーディングすることなく、相対パスを使用することができる。これは、ローカル実行環境からリモート実行環境に移植されるときに、ソース・コード変更を行わずに、モデル・コードを実行することをサポートする。
【０１０７】
[00108]  手法の中には、データー参照マッピングがAzure（商標）ブロブの共有アクセスシグネチャー（ＳＡＳ）ＵＲＩをステージング・ストレージ・アドレスとしてサポートするものがある。手法の中には、ローカルＰＤＬとAzure（商標）ストレージとの間におけるマッピングが、Azure（商標）ストレージ・エンドにおけるコンテナおよびブロブを使用して単純になるように、ＰＤＬ内部において二レベル深度ディレクトリー構造を使用するものがある。例えば、ローカルＰＤＬ下のフォルダー名は、コンテナ名に対応し、フォルダー下のファイル名はブロブに対応する。手法の中には、フォルダー・レベルのデーター参照マッピングに注意を向け、即ち、ローカル・フォルダーを、プロジェクト・データー・ライブラリーに対するAzure（商標）ブロブ・ストレージにおけるコンテナ下の全コンテンツにマッピングし、ローカル・フォルダーとコンテナ内部の部分的コンテンツとの間ではマッピングを行わないものがある。したがって、１つのコンテナ下にあるファイルは全てマッピングに含まれる。手法の中には、プロジェクト・データー・ライブラリーが、装置規模のデーター・ライブラリーの代わりに、プロジェクト毎の実装(implementation)に注意を向けるものがある。Azure（商標）ブロブ・ストレージのバージョンの中には、二レベル深度のディレクトリー（コンテナ／ブロブ）しかサポートしないものがあるが、階層構造を模擬するためにブロブに「/」を使って名称を付けることによって、それを回避することができる（例えば、ブロブ名は、"folder/subfolder/name"）。ソース・コードが"INPUT/folder/subfolder/blob"を参照する場合、プロデューサーは、"INPUT"にマッピングされたコンテナにおいて、ブロブ"folder/subfolder/name"をマッピングする。
【０１０８】
[00109]  手法の中には、ユーザー１０４が、ＰＤＬに関連する物理フォルダーを名称変更する、動かす、および削除することの影響が分かっていると仮定するものがある。ＰＤＬ外部の変更は、自動的にＰＤＬと同期されない。これらのマッピングは、削除され再度作られる。
【０１０９】
[00110]  本明細書における設計は、もっと多くのストレージ・ターゲット（例えば、２つのＨＰＣクラスター）および複数のステージング・ストレージ（例えば、２つのAzure（商標）ストレージ・アカウント）に適合するために、３つを超えるデーター参照ターゲット２０８にも適用可能にすることができる。
【０１１０】
[00111]  手法の中には、リモート計算ノードに対するパス全体が、展開ディレクトリー(deployment directory)に依存するものがある。これは、プログラム・ランタイムを介して引き出され、マッピング２０２は、この展開ディレクトリー下における相対パスしか追跡しない。
【０１１１】
[00112]  手法の中には、マッピング２０２表における各行がデーター参照マッピングを表すものがある。ＰＤＬは、参照マッピングの連合体(union)を含み、異なる環境に跨がるデーター参照変換に備えるために、ＡＰＩを設ける。マッピング名は、ＰＤＬ下のデーター・フォルダーの表示名であり、デフォルトのフォルダー名である。
【０１１２】
[00113]  クラウド・ストレージでは、手法の中にはコンテナのＵＲＩ全体だけを追跡するものがあり、ストレージ・アカウント名およびキーはＰＤＬに格納されない。ストレージ・アカウント名およびキーは、クライアント側のユーザー設定に格納される。ＳＡＳポリシーがデーター参照マッピングにおけるAzure（商標）ブロブ・コンテナと関連付けられるとき、コンテナ名を超える特定のＳＡＳポリシーもマッピング情報に含まれる。
【０１１３】
[00114]  手法の中には、ＰＤＬに含まれる全てのデーター参照マッピング情報がプロジェクト・レベルで存続されるので、リモートＨＰＣクラスターにおいて実行されたときに、パッケージ２２２に含めることができる場合がある。ＰＤＬ情報は、コンフィギュ・ファイル(config file)１３２、例えば、全てのデーター参照マッピングを含むDataLib.pdlのようなＸＭＬとして、またはデーター参照マッピング毎に１つずつのファイルがある複数のコンフィギュ・ファイルとして、またはプロジェクト内部のプロジェクト・プロパティ２２０として存続することができる。データー参照マッピングがプロジェクト・システムまたはプロジェクト１５０の他の永続的ストレージに登録されるとき、プログラム・パッケージング・フェーズの間ビルド・コード(build code)によってアクセス可能でなければならない。したがって、クラウド・ステージング・ストレージおよびリモート計算ノード・データー・ダウンロードについての対応するデーター参照情報を、このパッケージに含めることができる。
【０１１４】
[00115]  手法の中には、ＰＤＬがＰＤＬ下の相対パスを想定して、物理パスを設けるために、データー参照解決を提供するものがある。データー参照解決をローカルに戻すと、ＰＤＬはマッピングにおけるルート・ディレクトリーのパス全体を把握する。したがって、パス全体に対する連結ストリング(concatenated string)を戻すことができる。
【０１１５】
[00116]  しかしながら、ＰＤＬはリモート・ルート・ディレクトリーが分からず、モデル（プログラム）展開ディレクトリー下のフォルダー名しか分からない。プログラム展開ディレクトリーは、プログラム・ランタイムでないと分からず、放出されるコードはコンパイル時にはそれが分からない。リモート・ノードではコンパイル(compilation)がないので、プログラム・ランタイムにリモート計算ノードにおいてパス全体を解決するために、種々の手法を使用することができる。例えば、マッピングのローカル・ターゲットのディレクトリー毎にファイルを、例えば、batsmapping. configに対して "C:\BATS"を作ることができ、このファイルは、実行load_csvのルート・ディレクトリー内にある。このファイルは、データーがマッピングのためにロードされるときに、リモート・ノードにおいて作られる。あるいは、マッピング毎にローカル・ターゲットに対するローカル・ルート・ディレクトリーに環境変数を登録することもできる。
【０１１６】
[00117]  手法の中には、異なる環境に跨がってデーター参照を解決するために以下のＡＰＩを使用するものがある。
【０１１７】
【表９】
2014529832.tif 000011
【０１１８】
[00118]  手法の中には、データー参照マッピングに以下のクラス設計を使用するものがある。これは、ローカルＰＤＬ、ステージング・ストレージ、およびリモートＰＤＬに跨がるマッピングを表す。尚、ExecutionTargetおよびVirtualPathクラスは、データー・アクセスＡＰＩとＰＤＬライブラリーとの間で共有されることを注記しておく。
【０１１９】
【表１０−１】
2014529832.tif 000012
【０１２０】
【表１０−２】
2014529832.tif 000013
【０１２１】
[00119]  コードを続ける前の余談として、ExecutionTargetおよびVirtualPathクラスは、データー・アクセスＡＰＩとＰＤＬライブラリーとの間で共有されることを注記しておく。
【０１２２】
[00120]  コードは以下のように続く。
【０１２３】
【表１１−１】
2014529832.tif 000014
【０１２４】
【表１１−２】
2014529832.tif 000015
【０１２５】
[00121]  何らかの手法によって、各ストレージ・ターゲットは、実行環境におけるストレージ参照、ステージング・データー・ターゲット、または結果永続ストレージ(result persistent storage)を表す。ストレージ・ターゲットに対するベース・クラスは、次の通りであり、ローカル・ファイル・システム・ターゲット、Azure（商標）ブロブ・ステージング・ストレージ、リモート・ターゲット、結果の永続ストレージというような、それぞれの特定のターゲットがある。
【０１２６】
【表１２】
2014529832.tif 000016
【０１２７】
[00122]  手法の中には、ＰＤＬ下でローカル・フォルダー（相対パス）を表すVirtualPathクラスも使用するものがある。
【０１２８】
【表１３】
2014529832.tif 000017
【０１２９】
[00123]  手法の中には、以下がＰＤＬに対するクラス設計であるものがあり、これは３Ｃ（即ち、クライアント、クラスター、およびクラウドを跨がる）を跨いで全てのデーター参照マッピングを維持する。
【０１３０】
【表１４】
2014529832.tif 000018
【０１３１】
[00124]  コードを続ける前に、余談として、本明細書におけるこのコード・リストおよび他のいくつかのコード・リストでは、リスト空間を凝縮するために、以下のようなタグが取り除かれていることを注記しておく。
【０１３２】
【表１５】
2014529832.tif 000019
【０１３３】
[00125]  また、リスト空間を凝縮するために、ホワイト・スペースも取り除かれている。コードは以下のように続く。
【０１３４】
【表１６−１】
2014529832.tif 000020
【０１３５】
【表１６−２】
2014529832.tif 000021
【０１３６】
[00126]  ＰＤＬ情報（例えば、マッピング２０２）をクライアント側で存続させるためには、様々な手法を使用することができる。ＰＤＬ情報を含ませ、コンフィギュ・ファイルをプロジェクト内に追加するために、ＸＭＬのようなコンフィギュ・ファイルを使用することができる。あるいは、ＰＤＬ情報をプロジェクト・プロパティ２２０として追加するために、プロジェクト管理システムを変更することができる。プロジェクト・プロパティ２２０は、プロジェクト・ファイルを右クリックし、プロパティを選択することによって、入力および編集することができる。他の選択肢には、クライアントのインフラストラクチャのIPropertyCollectionインターフェースを利用することが挙げられる。
【０１３７】
[00127]  手法の中には、データー参照マッピング２０２が、ＸＭＬファイルとして、例えば、DataLib.pdlファイルのようにセーブされるものがある。手法の中には、ユーザーがマッピングをこのファイルにおいて作って編集すること、およびＩＤＥ１４８を使用してこのファイルをプロジェクトに追加できることを仮定するものがある。ＰＤＬ  ＸＭＬは、DataContractSerializerを使用して生成することができ、対応するエレメント名が、Ｃ＃クラス定義において属性として追加される。
【０１３８】
【表１７】
2014529832.tif 000022
【０１３９】
[00128]  ローカルに実行することに関して、ユーザーがload_csv(dataref("BATS\a.csv"))というような、識別子２０４を言明するソース・コードを書くことを仮定する。手法の中には、datarefがプロジェクト・データー・ライブラリーにおいてローカルのデーター参照マッピング情報を探し、パスを変換し、次いでload_csv("c:\data\BatsData\a.csv")をコールするものがある。例えば、dataref("BATS\a.csv")を、以下のようにＰＤＬマッピング情報にアクセスする関数に変換することができる。このマッピングに対するローカル・ルート・ディレクトリーは、ローカル実行のために放出された関数においてインラインになる。
【０１４０】
【表１８】
2014529832.tif 000023
【０１４１】
[00129]  クラウドのためにパッケージングするとき、手法の中にはpdlファイルをパッケージ２２２にパックするものがある。Azure（商標）ストレージをステージング・ストレージとして使用するリモート計算ノード実行のためにパッケージングするとき、データー・セキュリティのためにＳＡＳ  ＵＲＬを含む他のpdlファイルを作ることもできる。ＳＡＳ生成は、例えば、MSBuild内部でトリガーされ、ユーザーには透過的である。このファイルを作るために、クラウド・ターゲットのパスをSASが生成したものと置き換え、ローカル・ターゲットのパスを、計算ノードにおいて予期されるデーターの位置と置き換える。どこでプログラムが抜き出される(unpackage)か分かっている場合、同じフォルダーの下でデーターはロードされ、分かっていない場合、フォルダーを作ることができる。新たなDataLib.pdlファイルを作ることができ、これがパッケージに含まれる。
【０１４２】
【表１９】
2014529832.tif 000024
【０１４３】
[0130]  このDataLib.pdlは、プログラム（別名ではモデル）と共にパッケージに入れられる。プログラム・ランタイムにおける抜き出しの間、DataLib_cloud.pdlを発見する。名称から、１つはクラウドからローカルにデーターを引き出すためのものであることがわかる。したがって、生成された各SASパスに行き、データーを対応するローカル・パスに引き出す。データー参照マッピングでは、フォルダー名は分かるが、名称全体は分からない。データー・ローディング（ＰＤＬ外部のコンポーネント）がルート展開ディレクトリーを引き出し、例えば、エクステンシビリティ・フレームワーク(extensibility framework)を使用して、データー宛先に対する経路全体を生成する。
【０１４４】
[00131]  リモートに実行することに関して、ユーザーが以上と同じコードload_csv(dataref("BATS\a.csv"))を書くと仮定する。datarefが、DataLib_cloud.pdlにおけるローカルに対するマッピング情報を探し、パスを変換し、次いでload_csv("c:\deploymentroot\\TradingStrategy\BATS\a.csv")をコールする。datarefの実行可能関数は、以前のデーター・ローディング・フェーズにおいて生成されたbitmapping.configを読み取って、ＢＡＴＳマッピングに対するルート・ディレクトリーを解決し、datarefは、ルート・ディレクトリーの連結、および引数から渡される仮想パスを戻す。したがって、a.csvに対するローカル・パスは、リモート計算ノードにおけるローカル・ファイル参照に基づいて解決することができる。
【０１４５】
[00132]  スレッドの安全性に関して、手法の中には、各プロジェクトが別個のＰＤＬを有し、ＰＤＬの上に次の動作を有するものがある。データー参照マッピングをメモリー内ＰＤＬに追加する、メモリー内ＰＤＬインスタンスをファイルにセーブする、ＰＤＬをファイルからメモリー内ＰＤＬインスタンスにロードする、物理パスを解決する、データー参照マッピングを入手する。プロジェクト毎に１つのメモリー内ＰＤＬデーター構造があり、複数のデーター参照マッピングを含む。また、永続ＸＭＬファイルもあり、ＰＤＬメモリー内構造にロードすることができる。手法の中には、ユーザーがマッピングをメモリー内のもの（クライアントにおいてのみ）に追加するために、データー・ライブラリー・エクスプローラー（ＤＬＥ）においてＰＤＬをコールするもの、メモリー内ＰＤＬからマッピングを得るためにMSBuildにおいてコールするもの、およびＰＤＬをロードし／マッピングを追加し／ＰＤＬをセーブする（リモートのみ）データー・ローディングのためにＰＤＬをコールするものがある。ＤＬＥおよびMSBuildは同時にＰＤＬを変更しないので、メモリー内ＰＤＬまたはＰＤＬファイルに対する競合はない。
【０１４６】
[00133]  手法の中には、次の機能制約を規定するものがある。データー・ライブラリーの作成、セーブ、およびロードに関して、データー・ライブラリーに対するマッピングおよび設定は、公開インターフェースを介して正しく作られ、セーブされ、ロードされなければならない。コンストラクター(constructor)から新たなデーター・ライブラリーを作成することをサポートしなければならない。データー・ライブラリーをファイルにセーブすることをサポートしなければならない。永続ストレージからデーター・ライブラリーをロードすることをサポートしなければならない。有効でないまたは存在しないパスへのセーブまたはこのパスからのロードを検出し回避しなければならない。
【０１４７】
[00134]  新たなエントリーをＰＤＬに追加することに関して、ユーザーは新たな一意のエントリーをＰＤＬに首尾良く登録することができ、新たな一意のマッピング・エントリーをＰＤＬに追加すること、複製マッピング・エントリーをＰＤＬに追加すること、同じAzure（商標）ストレージ・パスであるが異なるローカル・パスでエントリーを追加すること、および同じローカル・パスであるが異なるAzure（商標）ストレージで新たなエントリーを追加しようとすることに対して、サポートを設けることができる。
【０１４８】
[00135]  既存のＰＤＬを変更することに関して、ユーザーは既存のＰＤＬをロードし、何らかの変更を行い、それを再度セーブする、例えば、何らかの新たなエントリーを追加し、既存のエントリーを編集し、既存のエントリーを削除することができる。
【０１４９】
[00136]  データー・フォルダー、ストレージ、およびブロブの命名に関して、異なるターゲットが異なる命名規則および制約を有する場合があることは言うまでもない。データー・ライブラリーは、ファイル参照をチェックして、これらが有効であることを確認することができる。手法の中には、ユーザーのシナリオによって求められたときに、またはエラーに対してしかるべく対処するために、ライブラリーが正しいマッピング、解決されたリソース・アドレス、またはエラー（データー・ライブラリー内にない場合）を戻すことができる。また、リソースの検索および解決は、例えば、ローカル・ファイルを解決し、Azure（商標）ストレージ・リソースＵＲＩにマッピングし、リモート・ターゲットを解決し、例えば、二レベル・ディレクトリー内でリソースを解決する機能によって、反復可能であり明白である(definitive)と想定することができる。
結論
[00137]  本明細書では、 特定の実施形態を、処理として、構成媒体として、またはシステムとして明確に例示し説明したが、ある種類の実施形態の説明は、一般に他の種類の実施形態にまで及ぶことが認められよう。例えば、図３と関連したプロセスの説明は、構成媒体を説明するのにも役立ち、そして他の図面と関連して説明したようなシステムおよび製品の動作を説明するのにも役立つ。それは、一実施形態の限定が、必ずしも別の実施形態にも読み込まれるということではない。特に、プロセスは、システムまたは構成メモリー等の製品を説明する間に提示されたデーター構造および構成に必ずしも限定される訳ではない。
【０１５０】
[00138]  図面に示したすべての項目が、あらゆる実施形態にも存在するという訳ではない。逆に、実施形態が、図面に明確に示されていない品目（１つまたは複数）を含んでもよい。本明細書では具体的な例によって本文および図面において可能性が示されるが、実施形態はこれらの例から逸脱してもよい。例えば、一例の具体的な機構は、省略され、名称変更され、異なるグループに纏められ、繰り返され、ハードウェアおよび／またはソフトウェアに異なってインスタンス化され、あるいは例のうちの２つ以上に現れる機構の混合であってもよい。実施形態の中には、１つの位置で示された機能が、異なる位置に設けられてもよい。
【０１５１】
[00139]  図面に対する参照は、全体的に参照番号によって行われた。所与の参照番号と関連する言い回しにおいて、図面において、または文章において、明白な矛盾がある場合、そのいずれも、その番号によって参照されるものの範囲を単に広げたものとして理解してしかるべきである。
【０１５２】
[00140]  本明細書において使用する場合、「１つの」(a)または「その」(the)というような用語は、示された項目またはステップのうちの１つ以上を含むものとする。特に、特許請求の範囲において、ある項目に言及する場合、少なくとも１つのそのような項目が存在することを意味し、そしてステップに言及する場合、そのステップのうちの少なくとも１つのインスタンスが実行されることを意味する。
【０１５３】
[00141]  見出しは、単に便宜上のものに過ぎない。所与の論説(topic)についての情報が、見出しがその論説を示す節の外側で発見されることもある。
[00142]  提出される特許請求の範囲および要約書は全て、本明細書の一部である。
【０１５４】
[00143]  以上、実施形態例を図示し説明したが、本発明の原理および特許請求の範囲に記載した概念から逸脱せずに、複数の変更を行うことができること、そしてそのような変更は、抽象的概念全体を包含する必要がないことは、当業者には明白であろう。構造的特徴および／または手順的動作に特定の用語で主題について説明したが、添付した特許請求の範囲において定められる主題は、以上で説明した特定の特徴や動作に必ずしも限定される訳ではないことは言うまでもない。所与の定義または例で特定されたあらゆる手段または形態が、あらゆる実施形態において存在するまたは利用されることが必要な訳ではない。むしろ、説明した特定の特徴または動作は、特許請求の範囲を実現するときに考慮する例として開示されたまでである。
【０１５５】
[00144]  抽象的な考え全体を包み込むには達しないが特許請求の範囲の均等の意味および範囲に入る変更は全て、法によって許容される限りにおいて、その範囲内に含まれるものとする。 
【図１】
2014529832.tif 000025
【図２】
2014529832.tif 000026
【図３】
2014529832.tif 000027
【国際調査報告】
2014529832.tif 000028
2014529832.tif 000029
2014529832.tif 000030