(57)【要約】  プラットフォーム非依存のソースコードが、異なるプラットフォーム及び／又はバージョンのために注釈を付されたソースコードの１又は複数の部分を用いて拡張されることが可能である。プラットフォーム非依存部分とプラットフォーム特有部分及び／又はバージョン特有部分との両方を含んだソースコードが、一度コンパイルされて、複数のデバイスのプラットフォーム及び／又は１又は複数のプラットフォームの複数のバージョンへ配布されそれらの上で動作することの可能な、単一実行可能ファイルを作成することが可能である。プラットフォーム特有又はバージョン特有の実行可能ファイル（例えば、アセンブリ、バイナリ等）が、リソース（例えばデータ）としてバイナリ又は実行可能ファイルに埋め込まれることが可能である。コンパイルされたコードがデバイス上で実行される時、ランタイムが、その実行可能ファイルが動作しているデバイスに対応するプラットフォーム特有部分を抽出し、抽出された部分を実行可能ファイルに結合し、実行可能ファイルをロードして実行することが可能である。したがって、同一のバイナリが、そのバイナリが動作しているプラットフォームの能力に応じて異なる結果又は機能性を生じさせることが可能である。【選択図】図１ｂ
2015524126.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスの少なくとも１つのプロセッサーと、
前記コンピューティングデバイスの前記少なくとも１つのプロセッサーに通信可能に結合されたメモリと、
前記メモリにロードされる少なくとも１つのモジュールであって、前記少なくとも１つのプロセッサーが、
ソースコードのプラットフォーム非依存部分を受け取り、
リソースとして指定された、ソースコードの複数のプラットフォーム特有部分を受け取り、
前記ソースコードのプラットフォーム非依存部分と前記ソースコードの複数のプラットフォーム特有部分を単一実行可能ファイルにコンパイルし、
ユニバーサルに移植性のある前記単一実行可能ファイルを複数の異なるプラットフォームへ配置する、
ようにさせる少なくとも１つのモジュールと、
を備えるシステム。
【請求項２】
前記コンピューティングデバイスは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、又はノートブックである、請求項１に記載のシステム。
【請求項３】
前記メモリにロードされた時に、前記少なくとも１つのプロセッサーが、インターフェイスを含んだプラットフォーム特有抽象化レイヤーを生成するようにさせる少なくとも１つのモジュールを更に備える、請求項１に記載のシステム。
【請求項４】
前記ソースコードの複数のプラットフォーム特有部分のうちの１つのプラットフォーム特有部分は、ソフトウェアのバージョンを含む、請求項１に記載のシステム。
【請求項５】
前記ソースコード中の注釈が、前記ソースコードの前記プラットフォーム非依存部分と前記ソースコードの前記複数のプラットフォーム特有部分を前記単一実行可能ファイルにコンパイルするコンパイラーを決定する、請求項１に記載のシステム。
【請求項６】
コンピューティングデバイスのプロセッサーによって、プラットフォーム非依存部分と複数のプラットフォーム特有部分とを含む単一実行可能ファイルを受け取るステップであって、前記複数のプラットフォーム特有部分は、第１のプラットフォーム向けのプラットフォーム特有部分と第２のプラットフォーム向けのプラットフォーム特有部分とを含む、ステップと、
前記コンピューティングデバイスの前記プロセッサーのプラットフォームを決定するステップであって、前記プロセッサーの前記プラットフォームは、前記第１のプラットフォームを含む、ステップと、
前記単一実行可能ファイルの前記複数のプラットフォーム特有部分から前記第１のプラットフォーム向けの前記プラットフォーム特有部分を抽出するステップと、
前記第１のプラットフォーム向けの前記プラットフォーム特有部分をバイナリの前記プラットフォーム非依存部分に結合するステップと、
前記結合されたバイナリをロードするステップと、
を含む方法。
【請求項７】
前記第１のプラットフォームは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、又はノートブックを含む、請求項６に記載の方法。
【請求項８】
複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分を含む前記単一実行可能ファイルを受け取るステップであって、前記複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分は、前記第１のプラットフォーム向けのプラットフォーム特有のプラットフォーム抽象化レイヤーと前記第２のプラットフォーム向けのプラットフォーム特有のプラットフォーム抽象化レイヤーとを含む、ステップを更に含む、請求項６に記載の方法。
【請求項９】
前記単一実行可能ファイルの前記複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分から前記第１のプラットフォーム向けの前記プラットフォーム特有のプラットフォーム抽象化レイヤーを抽出するステップと、
前記第１のプラットフォーム向けの前記プラットフォーム特有のプラットフォーム抽象化レイヤー部分をバイナリの前記プラットフォーム非依存部分に結合するステップと、
前記結合されたバイナリをロードするステップと、
を更に含む、請求項６に記載の方法。
【請求項１０】
コンピューター実行可能命令を備えるコンピューター可読記憶媒体であって、前記コンピューター実行可能命令は、実行された時に、コンピューティングデバイスの少なくとも１つのプロセッサーが、
コンピューティングデバイスのプロセッサーによって、コード部分と非コード部分を含む単一実行可能ファイルを受け取り、前記単一実行可能ファイルは、前記コード部分にプラットフォーム非依存部分と、前記非コード部分に複数のプラットフォーム特有部分とを含み、前記複数のプラットフォーム特有部分は、第１のプラットフォーム向けのプラットフォーム特有部分と第２のプラットフォーム向けのプラットフォーム特有部分とを含み、
前記コンピューティングデバイスのプラットフォームを決定し、前記コンピューティングデバイスの前記プラットフォームは、前記第１のプラットフォームを含み、
前記単一実行可能ファイルの前記複数のプラットフォーム特有部分から前記第１のプラットフォーム向けの前記プラットフォーム特有部分を抽出し、
前記第１のプラットフォーム向けの前記プラットフォーム特有部分をバイナリの前記プラットフォーム非依存部分に結合し、
前記結合されたバイナリをロードする、
ようにさせる、コンピューター可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  コンピューターサイエンスにおいて用いられる「移植性」という用語は、同じソフトウェアを異なるコンピューティング環境で使用する能力を意味する。プラットフォーム特有でないコードを意味するために、「移植性のあるコード」という用語が用いられる場合がある。即ち、まさに同一のソフトウェアが、任意のプラットフォーム上で、又は少なくとも複数のプラットフォーム上で動作することが可能である。「移植性のあるコード」という用語は、ゼロからソフトウェアを書くよりもコスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられることもある。当該用語のこれらの異なった使用方法を区別するため、任意のプラットフォーム上で動作することが可能なプラットフォーム非依存型のコードを意味するのに「ユニバーサルに移植性のあるコード」という用語が用いられるだろう。「移植性のあるコード」という用語は、コスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられるだろう。
【０００２】
[0002]  異なるプラットフォーム上で動作する異なるバージョンのコードを作成する１つの方法は、条件付きコンパイルによるものである。条件付きコンパイルは、コンパイラーが、コードを複数回コンパイルすることによって複数の異なるプラットフォームに関連した複数の異なる実行可能ファイルを生成することを可能にする。コンパイラーは、第１のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの１つのセットによって動作し、第２のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの別のセットによって動作し、以下同様である。
【発明の概要】
【０００３】
[0003]  ソースコードのプラットフォーム非依存部分が、異なるプラットフォーム及び／又はソフトウェアのバージョンのために注釈を付された１又は複数の部分を含むように拡張されることが可能である。プラットフォーム非依存部分とプラットフォーム特有部分及び／又はバージョン特有部分との両方を含んだソースコードが、一度コンパイルされて、複数のデバイスのプラットフォーム及び／又は１又は複数のプラットフォームの複数のバージョンへ配布されそれらの上で動作することの可能な、単一実行可能ファイルを作成することが可能である。開発環境のプラットフォーム特有の属性は、コンパイラーがプラットフォーム特有の自動補完と型検査を提供することを可能にすることができる。プラットフォーム特有又はバージョン特有の実行可能ファイル（例えば、アセンブリ、バイナリ等）が、リソース（例えばデータ）としてユニバーサルに移植性のある（プラットフォーム非依存の）実行可能ファイルに埋め込まれることが可能である。プラットフォーム特有抽象化レイヤー及び／又はバージョン特有インターフェイスが作成されることもでき、リソース又はデータとしてユニバーサルに移植性のある実行可能ファイルに埋め込まれることができる。プラットフォーム特有抽象化レイヤーは、対応するプラットフォーム特有実行可能ファイルによる実行時に実装されることが可能である。実行可能ファイルが特定のデバイス上で実行される時にその実行可能ファイルが正しく実行するように、開発ツール、例えばＩＤＥ（統合開発環境）が実行可能ファイルを設定することが可能である。コンパイルされたコードがデバイス上で実行される時、プログラム実行マネージャー（例えばランタイム）が、その実行可能ファイルが動作しているデバイスに対応するプラットフォーム特有データを抽出し、抽出されたデータを実行可能ファイルに結合し、実行可能ファイルをロードして実行することが可能である。したがって、同一のバイナリが、そのバイナリが動作しているプラットフォームの能力に応じて異なる結果又は機能性を生じさせることが可能である。
【０００４】
[0004]  この概要は、詳細な説明において更に後述される概念からの選抜を簡略な形で導入するために提供される。この概要は、請求された主題の主要な特徴又は本質的な特徴を特定することを意図したものではなく、また、請求された主題の有効範囲を限定するのに用いられることを意図したものでもない。
【図面の簡単な説明】
【０００５】
【図１ａ】図１ａは、移植性のあるコードを条件付きでコンパイルする当該技術分野において知られているシステム１００の一例を示す。
【図１ｂ】図１ｂは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム１０９の一例を示す。
【図１ｃ】図１ｃは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム１２１の一例を示す。
【図２】図２は、本明細書で開示される主題の態様による単一実行可能ファイルを生成しその生成された実行可能ファイルを実行するための方法２００の一例を示す。
【図３】図３は、本明細書で開示される主題の態様によるコンピューティング環境の一例のブロック図である。
【図４】図４は、本明細書で開示される主題の態様による統合開発環境（ＩＤＥ）の一例のブロック図である。
【発明を実施するための形態】
【０００６】
＜概要＞
[0006]  図１ａは、当該技術分野において知られているユニバーサルに移植性のあるコードを生成するためのシステムを示す。従来、ターゲットデバイス上で動作するように、条件付きコンパイルのディレクティブを有したソースコード（例えばソースコード１０１）がコンパイルされる。例えば、ソースコードが、スマートフォンなどのターゲットデバイス上で動作するように一度目にコンパイラー１０２上でコンパイルされて、スマートフォン用バイナリ１０４ａなどのスマートフォン用バイナリを生成する。異なるディレクティブを有したソースコードが、二度目にコンパイルされて、タブレット上で動作することが可能なバイナリ（例えばタブレット用バイナリ１０４ｂ）を生成することができる。更に異なるディレクティブを有したソースコードが、再びコンパイルされて、ゲーム機上で動作することが可能なバイナリ（例えばゲーム機用バイナリ１０４ｃ）、デスクトップ上で動作することが可能なバイナリ（例えばデスクトップ用バイナリ１０４ｄ）、又は他のデバイス上で動作することが可能なバイナリ（例えばデバイスｎ用バイナリ１０４ｎ）を生成することができる。こうして、移植性のあるコードが、複数回コンパイルされて、それぞれが特定のプラットフォーム上で動作するようにデザインされた複数のバイナリを生成する。
【０００７】
[0007]  このような設計の１つの帰結は、ソフトウェアがデバイスへの配置のためにパッケージ化される場合に、適切なバイナリがそのデバイスのために選択されなければならないということである。例えば、スマートフォンへはスマートフォン用バイナリ１０４ａが配置される必要があり、するとスマートフォンのランタイム１０６ａが、バイナリ１０４ａを実行してある実行結果ａ  １０８ａを生成するだろう。同様に、タブレットへはタブレット用バイナリ１０４ｂが配置される必要があり、するとタブレットのランタイム１０６ｂが、バイナリ１０４ｂを実行して、実行結果ａ  １０８ａとは異なるある実行結果ｂ  １０８ｂを生成するだろう。同様に、ゲーム機へはゲーム機用バイナリ１０４ｃが配置される必要があり、するとゲーム機のランタイム１０６ｃが、バイナリ１０４ｃを実行して、実行結果ａ  １０８ａや実行結果ｂ  １０８ｂとは異なるある実行結果ｃ  １０８ｃを生成するだろう。デスクトップへはデスクトップ用バイナリ１０４ｄが配置される必要があり、するとデスクトップのランタイム１０６ｄが、バイナリ１０４ｄを実行して、他のデバイスの実行結果とは異なるある実行結果ｄ  １０８ｄを生成するだろう。即ち、デバイス特有のバイナリ１０４ｎが、それに対応するデバイスへ配置される必要があり、するとそのデバイスのランタイム１０６ｎが、バイナリ１０４ｎを実行して特定の結果１０８ｎを生成するだろう。もしコードが再利用されるならば、コードは、デバイス特有部分を変更するように修正されなければならない。
【０００８】
[0008]  図１ｂは、本明細書で説明される主題の態様による（リファレンスライブラリと呼ばれることもある）単一バイナリを生成するシステム１０９を示す。本明細書で説明される主題の態様によれば、ソースコード１１０などのソースコードが、変形コンパイラー１１２によって一度コンパイルされて、複数のターゲットプラットフォーム上で動作することが可能な単一バイナリ（例えばバイナリ１１５）を生成することができる。当該技術分野において知られているバイナリは、コード部分と、リソース又はデータを表す非コード部分とを含むことが可能である。バイナリ１１５は、バージョン非依存型コード及び／又はプラットフォーム非依存型コードを含んだバージョン非依存部分及び／又はプラットフォーム非依存部分１１４などの１又は複数の部分と、バージョン特有及び／又はプラットフォーム特有である１又は複数の部分（例えば、スマートフォン特有部分１１６ａ、タブレット特有部分１１６ｂ、ゲーム機特有部分１１６ｃ、デスクトップ特有部分１１６ｄ、又は任意のデバイス特有部分ｎ  １１６ｎ）とを含むことが可能である。プラットフォーム特有部分は、リソース又はデータとしてラベル付けされることができる。単一バイナリ１１５は、複数の異なるプラットフォームへ配置されることが可能である。
【０００９】
[0009]  実行時にバイナリ１１５は、限定ではないがランタイム（例えば、スマートフォン用ランタイム１１８ａ、タブレット用ランタイム１１８ｂ、ゲーム機用ランタイム１１８ｃ、デスクトップ用ランタイム１１８ｄ、及び一般にデバイスｎ用ランタイム１１８ｎ）などのプログラム実行マネージャーによって実行されることができる。ランタイムは、当該バイナリの適切な（適合した）バージョン特有部分及び／又はプラットフォーム特有部分を（例えばリソース又はデータとしてラベル付けされたバイナリの部分から）抽出し、抽出されたバイナリのバージョン特有部分及び／又はプラットフォーム特有部分を、当該バイナリのバージョン非依存部分及び／又はプラットフォーム非依存部分に結合することが可能である。即ち、例えば、スマートフォンのランタイム１１８ａは、バイナリのスマートフォン特有部分１１６ａをプラットフォーム非依存部分１１４に結合することが可能であり、それを実行してスマートフォンのために実行結果ａ  １２０ａを生成することが可能である。同様に、タブレットのランタイム１１８ｂは、バイナリのタブレット特有部分１１６ｂをプラットフォーム非依存部分１１４に結合することが可能であり、それを実行してタブレットのために実行結果ｂ  １２０ｂを生成することが可能である。ゲーム機のランタイム１１８ｃは、バイナリのゲーム機特有部分１１６ｃをプラットフォーム非依存部分１１４に結合することが可能であり、それを実行してゲーム機のために実行結果ｃ  １２０ｃを生成することが可能である。デスクトップのランタイム１１８ｄは、バイナリのデスクトップ特有部分１１６ｄをプラットフォーム非依存部分１１４に結合することが可能であり、それを実行してデスクトップのために実行結果ｄ  １２０ｄを生成することが可能である。同様に、特定のデバイスのランタイム１１８ｎは、バイナリのデバイス特有部分１１６ｎをプラットフォーム非依存部分１１４に結合することが可能であり、それを実行してデバイスのために実行結果ｎ  １２０ｎを生成することが可能である。
【００１０】
[0010]  同様に、バージョン特有及び／又はプラットフォーム特有なプラットフォーム抽象化レイヤー（図１ｂには不図示）が、バイナリのデータ部分から抽出されることができ、バージョン非依存部分及び／又はプラットフォーム非依存部分１１４に結合されることができる。本明細書で説明される主題のいくつかの態様によれば、単一バイナリ１１５は、コードの１又は複数のバージョン特有部分及び／又はプラットフォーム特有部分が再利用の標準ユニットとしてランタイムによって理解されるような方法で、生成される（例えば、バイナリはランタイムが認識するフォーマットで作成される）。
【００１１】
＜適応的に移植性を有したライブラリ＞
[0011]  図１ｃは、本明細書で開示される主題の態様による移植性のある単一の実行可能ファイルを生成するシステム１２１のブロック図を示す。図１ｃはまた、本明細書で説明される主題の態様による当該移植性のある実行可能ファイルの実行も示す。システム１２１の全て又は一部分は、図３に関して後述されるコンピューターなどの１又は複数のコンピューター若しくはコンピューティングデバイス上に存在することができる。システム１２１又はその一部分は、スタンドアロンのシステムとして、又はプラグイン若しくはアドインとして提供されることができる。システム１２１は、全体として、又は部分的に、図４に関して説明されるソフトウェア開発コンピューターなどのソフトウェア開発コンピューター上で実行することができる。システム１２１の全て又は一部分の上で、開発ツールが動作することができる。例えば、システム１２１の全て又は一部分は、例えば図４に関してより完全に説明されるＩＤＥ１２５などの、統合開発環境（ＩＤＥ）内で実行することができ、又はＩＤＥの外で実行することが可能である。
【００１２】
[0012]  システム１２１は、コンピューティングデバイス１２２などの１又は複数のコンピューティングデバイス又はコンピューターを含むことができる。コンピューティングデバイス１２２は、プロセッサー１４２等のような１又は複数のプロセッサー、メモリ１４４などのメモリ、及び、単一のユニバーサルに移植性のある実行可能ファイルを生成するモジュール１２３などの１又は複数のモジュールを含むことが可能である。モジュール１２３によって代表された１又は複数のモジュールは、コンパイルチェーン１２４の一部分を構成することが可能である。モジュール１２３は、コンパイラー、コンパイラーのプリプロセッサー、コンパイラーのポストプロセッサー、又はそれらの任意の組み合わせの一部分であってよい。モジュール１２３等のような１又は複数のモジュールは、メモリ１４４にロードされて、プロセッサー１４２等のような１又は複数のプロセッサーに、モジュール１２３に起因する動作を実施させることが可能である、ということが認識されるだろう。
【００１３】
[0013]  システム１２１は、限定ではないがスマートフォン、タブレット、デスクトップコンピューター、ゲーム機、又は任意の種類のコンピューティングデバイスを含む、１又は複数の他のコンピューター又はコンピューティングデバイスを含むことができる。これらのコンピューティングデバイスのそれぞれは、１又は複数のプロセッサー（不図示）、メモリ（不図示）、及び当該技術分野においてよく知られている他のコンポーネントを含むことができる。
【００１４】
[0014]  ソースコードファイル１３４などのソースコードファイルは、プラットフォーム非依存型コード１３０などのプラットフォーム非依存型コードの１又は複数の部分を含むことができる。ソースコードファイル１３４はまた、プラットフォーム特有コード１３２等のようなプラットフォーム特有コードの１又は複数の部分も含むことができる。プラットフォーム特有コードの１又は複数の部分は、デバイス１  １３５、デバイス２  １３７、…デバイスｎ  １３９等のようなデバイス上で動作するように特化したコードを含むことが可能である。デバイス１  １３５、デバイス２  １３７、…デバイスｎ  １３９などのデバイスは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、又は、現在知られており若しくは将来生み出される任意の他のコンピューティングデバイスなどのデバイスを含むことが可能である。バージョン特有コード及び／又はプラットフォーム特有コードの１又は複数の部分は、特化した対象のデバイスのバージョン及び／又は種類を示す識別注釈を付されることが可能である。例えば、第１の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、スマートフォン又はスマートフォン用のあるバージョンのソフトウェアに特化していることを表すことができる。第２の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、タブレット又はタブレット用のあるバージョンのソフトウェア等に特化していることを表すことができる。使用されている特定の注釈は、バイナリを作成するのにどのコンパイラー又はどのバージョンのコンパイラーが用いられるかを制御することができる。
【００１５】
[0015]  モジュール１２３は、ソースコードファイル１３４を受け取ることができ、コンパイルチェーン１２４の他のコンポーネントと協力して、プラットフォーム非依存型バイナリ１２６などのバージョン非依存型コード及び／又はプラットフォーム非依存型コードの１又は複数の部分と、例えばプラットフォーム特有バイナリ１２８等のようなバージョン特有コード及び／又はプラットフォーム特有コードの１又は複数の部分とを含む、単一バイナリ１２９を作成することが可能である。バージョン特有及び／又はプラットフォーム特有バイナリ１２８は、「ライトアップコード」を含むことが可能である。ライトアップコードは、あるプラットフォーム又はバージョンには存在するが別のプラットフォーム又はバージョンには存在しない１又は複数の機能を含むことができ、したがって、あるプラットフォーム又はバージョンのユーザーインターフェイスにおいて「ライトアップ」するが、別のプラットフォーム又はバージョンのユーザーインターフェイスにおいては「ライトアップ」しない。例えばプラットフォーム特有バイナリ１２８等のようなバージョン特有及び／又はプラットフォーム特有バイナリは、プラットフォーム非依存型バイナリ１２６に関連したデータなどのリソースとして指定されることが可能である。モジュール１２３等はまた、遭遇したそれぞれの種類のプラットフォーム特有コードの部分に対して、そのプラットフォームに関連したコードに基づいて抽象化レイヤー（例えばプラットフォーム特有インターフェイス）を生成することもできる。例えば、プラットフォーム特有バイナリ１２８などの第１のプラットフォーム特有バイナリが、抽象化レイヤー１２８ａなどの第１のプラットフォーム特有抽象化レイヤーと関連付けられることができ、以下同様である。あるいはまた、標準的な条件付きコンパイル手法を用いてソースコードが複数回コンパイルされて、単一のマルチプラットフォームのバイナリを作成するようにポストコンパイル演算において結合されることの可能な、複数のプラットフォーム特有バイナリを生成することができる。
【００１６】
[0016]  同一のバイナリ、例えばバイナリ１２９が、複数の異なるプラットフォームへ配置されることが可能である。バイナリの配置先のデバイス上でソフトウェアが実行される時、当該デバイスのランタイム（例えば、ランタイム１３６、ランタイム１３８、又はランタイム１４０等）は、適切なプラットフォーム特有バイナリを使用し、それをプラットフォーム非依存型バイナリに結合して当該デバイス上で動作する実行可能ファイルを作成することが可能である。例えば、プラットフォーム非依存型バイナリ、バイナリＡが、プラットフォーム特有バイナリ、バイナリＢを使用すると想定されたい。実行時に、デバイスに適切なプラットフォーム特有バイナリＢが、バイナリＡと結合するためにランタイムによって選択されることができ、その結果得られる実行可能ファイルが、その後実行されることが可能である。異なるプラットフォームに加えて、異なるバージョンが同様に適応することができる、ということが認識されるだろう。結合時に選択されたプラットフォーム特有コードに基づいて、そのプラットフォームの適切なプラットフォーム抽象化レイヤーがランタイムによって実装されることが可能である。仮想マシン環境におけるマネージ言語（managed language）の文脈の中で説明されたが、本明細書に記載される概念はネイティブコード環境において適用されることが可能である、ということが認識されるだろう。ネイティブコード環境では、プラットフォーム非依存型コードは、作成するのがより難しい場合がある。
【００１７】
[0017]  図２は、複数の異なるプラットフォーム上で動作可能な単一バイナリを作成することができる方法２００を示す。当該バイナリは、１又は複数の異なるプラットフォームへ配置されることが可能である。バイナリが実行される時、そのバイナリが配置されたデバイスのランタイムは、適切なプラットフォーム特有バイナリを決定して抽出し、それを結合してそのデバイス向けのプラットフォーム特有バイナリを生成することが可能である。したがって、同一のバイナリが、異なるデバイス上で動作した時に異なる結果を生じさせることが可能である。図２で説明される方法は、限定ではないが、図１ｂ及び１ｃに関して説明されたようなシステムによって実施されることができる。方法２００はあるシーケンスで実施される一連の処理を記載しているが、方法２００は当該シーケンスの順序によっては限定されない、ということが理解されなければならない。例えば、いくつかの動作は、記載されたものとは異なる順序で行われてよい。加えて、ある動作が別の動作と同時に行われてよい。いくつかの実例では、全ての動作が実施されるのでなくてもよい。その上、異なるプラットフォームに関して説明されているが、以下に記載される処理は、異なるバージョンのソフトウェアの作成、生成、配置、及び実行に対しても同様に当てはまる、ということが認識されるだろう。
【００１８】
[0018]  処理２０１において、プラットフォーム非依存型ソースコードが、ＩＤＥのソースコードエディター又は他のソフトウェアツールによって受け取られることが可能である。処理２０２において、注釈を付されたソースコードが受け取られることが可能である。プラットフォーム特有であるソースコードは、そのソースコードが意図された対象のプラットフォームを識別するために、注釈を付されることが可能である。処理２０４において、１又は複数のプラットフォーム非依存部分と１又は複数のプラットフォーム特有部分の両方を含むソースコードが、単一バイナリにコンパイルされることが可能である。処理２０６において、当該バイナリのプラットフォーム特有部分が、データ若しくは非コードのリソースとしてラベル付け又は指定されて、プラットフォーム非依存型バイナリに付加されることが可能である。処理２０８において、バイナリが１又は複数の異なるプラットフォームへ配置されることが可能である。処理２１０において、当該バイナリの配置先であるデバイスのうちの１つのランタイムが、そのバイナリを実行する要求を受け取ることが可能である。ランタイムは、プラットフォーム非依存型バイナリに結合すべき適切なプラットフォーム特有部分を決定し抽出することが可能である。処理２１２において、抽出されたプラットフォーム特有部分が、プラットフォーム非依存型バイナリに結合されることが可能である。処理２１４において、バイナリがロードされることが可能であり、２１６において、バイナリが実行されることが可能である。
【００１９】
＜適切なコンピューティング環境の例＞
[0019]  本明細書で開示される主題の様々な態様のための文脈を提供するために、図３及び以下の議論は、本明細書で開示される主題の様々な実施態様が実装されることができる適切なコンピューティング環境５１０の簡潔で概略的な説明を提供するよう意図されている。本明細書で開示される主題は、１又は複数のコンピューター若しくは他のコンピューティングデバイスによって実行されるプログラムモジュールなどのコンピューター実行可能命令の一般的な文脈で説明されているが、当業者は、本明細書で開示される主題の一部分が、他のプログラムモジュール及び／又はハードウェアとソフトウェアの組み合わせと協力して実装されることも可能である、ということを認識するだろう。一般的に、プログラムモジュールは、特定のタスクを実施し又は特定のデータ型を実現するルーチン、プログラム、オブジェクト、物理的人工物、データ構造等を含む。通常、プログラムモジュールの機能性は、様々な実施態様において望まれるとおりに結合され又は分散されることができる。コンピューティング環境５１０は、適切な動作環境の一例に過ぎず、本明細書で開示される主題の使用又は機能性の範囲を限定するよう意図されてはいない。
【００２０】
[0020]  図３を参照して、コンピューター５１２の形態のコンピューティングデバイスが説明される。コンピューター５１２は、少なくとも１つの処理装置５１４、システムメモリ５１６、及びシステムバス５１８を含むことができる。少なくとも１つの処理装置５１４は、限定ではないがシステムメモリ５１６などのメモリに格納されている命令を実行することが可能である。処理装置５１４は、様々な利用可能なプロセッサーのいずれであってもよい。例えば、処理装置５１４は、グラフィックス処理装置（ＧＰＵ）であってよい。命令は、上で論じられた１又は複数のコンポーネント又はモジュールによって実行される機能性を実現するための命令、又は、上で説明された方法の１又は複数を実現するための命令であってよい。デュアルマイクロプロセッサーや他のマルチプロセッサーのアーキテクチャが、処理装置５１４として利用されることも可能である。コンピューター５１２は、ディスプレイ画面上にグラフィックスを描画することをサポートするシステムにおいて用いられることができる。別の例では、コンピューティングデバイスの少なくとも一部分が、グラフィックス処理装置を備えたシステムにおいて用いられることが可能である。システムメモリ５１６は、揮発性メモリ５２０と不揮発性メモリ５２２を含むことができる。不揮発性メモリ５２２は、読み取り専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、電気的プログラム可能ＲＯＭ（ＥＰＲＯＭ）、又はフラッシュメモリを含むことが可能である。揮発性メモリ５２０は、外部キャッシュメモリとして働くことができるランダムアクセスメモリ（ＲＡＭ）を含んでよい。システムバス５１８は、システムメモリ５１６を含むシステムの物理的人工物を処理装置５１４に結合する。システムバス５１８は、メモリバス、メモリコントローラー、周辺機器バス、外部バス、又はローカルバスを含むいくつかの種類のうちのいずれであってもよく、また任意の様々な利用可能なバスアーキテクチャを用いることができる。コンピューター５１２は、システムバス５１８を経由して処理装置５１４によってアクセス可能なデータ記憶装置を含んでよい。データ記憶装置は、グラフィックスの描画のための実行可能命令、３Ｄモデル、素材、テクスチャ等を含むことができる。
【００２１】
[0021]  コンピューター５１２は通常、揮発性及び不揮発性媒体、リムーバブル及び非リムーバブル媒体などの様々なコンピューター可読媒体を含む。コンピューター可読媒体は、コンピューター可読命令、データ構造、プログラムモジュール、若しくは他のデータなどの情報の記憶のための任意の方法又は技術で実現されることができる。コンピューター可読媒体は、（コンピューター記憶媒体とも称される）コンピューター可読記憶媒体と通信媒体とを含む。コンピューター記憶媒体は、限定ではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又は他のメモリ技術、ＣＤＲＯＭ、デジタル多用途ディスク（ＤＶＤ）又は他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶デバイスなどの、所望のデータを格納することが可能でありコンピューター５１２によってアクセスされることが可能な物理的な（有形の）媒体を含む。通信媒体は、限定ではないが、通信信号、変調搬送波、又は任意の他の一時的媒体などの、所望の情報を伝達するのに使用されることが可能でありコンピューター５１２によってアクセスされることが可能な一時的媒体を含む。
【００２２】
[0022]  図３は、ユーザーとコンピューターリソースとの間の仲介手段として働くことが可能なソフトウェアを説明するものであることが認識されるだろう。このソフトウェアは、ディスク記憶装置５２４に格納されることが可能でありコンピューター５１２のリソースを割り当てることが可能なオペレーティングシステム５２８を含むことができる。ディスク記憶装置５２４は、インターフェイス５２６などの非リムーバブルメモリインターフェイスを通じてシステムバス５１８に接続されたハードディスクドライブであってよい。システムアプリケーション５３０は、システムメモリ５１６又はディスク記憶装置５２４のいずれかに格納されたプログラムモジュール５３２とプログラムデータ５３４を通じて、オペレーティングシステム５２８によるリソースの管理を利用する。コンピューターは、様々なオペレーティングシステム又はオペレーティングシステムの組み合わせを用いて実装されることが可能である、ということが認識されるだろう。
【００２３】
[0023]  ユーザーは、入力デバイス５３６を通じてコンピューター５１２にコマンド又は情報を入力することが可能である。入力デバイス５３６は、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイク、音声認識及びジェスチャ認識システム等のようなポインティングデバイスを含むが、これに限定はされない。これらの及び他の入力デバイスは、インターフェイスポート５３８を介しシステムバス５１８を通じて処理装置５１４に接続する。インターフェイスポート５３８は、シリアルポート、パラレルポート、ユニバーサルシリアルバス（ＵＳＢ）等を表すことができる。出力デバイス５４０は、入力デバイスと同じ種類のポートを使用することができる。出力アダプター５４２は、モニター、スピーカー、及びプリンターのような特定のアダプターを必要とするいくつかの出力デバイス５４０が存在することを示すために提供されている。出力アダプター５４２は、限定ではないが、出力デバイス５４０とシステムバス５１８との間の接続を提供するビデオカード及びサウンドカードを含む。他のデバイス及び／又はシステム、又はリモートコンピューター５４４などのデバイスは、入力と出力の両方の能力を提供することができる。
【００２４】
[0024]  コンピューター５１２は、リモートコンピューター５４４などの１又は複数のリモートコンピューターへの論理的接続を用いて、ネットワーク環境で動作することが可能である。リモートコンピューター５４４は、パーソナルコンピューター、サーバー、ルーター、ネットワークＰＣ、ピアデバイス、又は他の一般によくあるネットワークノードであってよく、図３にはメモリ記憶デバイス５４６のみが示されているが、典型的には、コンピューター５１２に関連して上述された要素の多く又は全てを含む。リモートコンピューター５４４は、通信接続５５０を介して論理的に接続されることが可能である。ネットワークインターフェイス５４８は、ローカルエリアネットワーク（ＬＡＮ）及びワイドエリアネットワーク（ＷＡＮ）などの通信ネットワークを包含するが、他のネットワークを含んでもよい。通信接続５５０は、ネットワークインターフェイス５４８をバス５１８に接続するために利用されるハードウェア／ソフトウェアを指す。通信接続５５０は、コンピューター５１２の内部にあっても外部にあってもよく、モデム（電話、ケーブル、ＤＳＬ、及び無線）、ＩＳＤＮアダプター、イーサネット（登録商標）カード等のような内部及び外部技術を含む。
【００２５】
[0025]  示されたネットワーク接続は単なる例であり、コンピューター間に通信リンクを確立する他の手段が用いられてよい、ということが認識されるだろう。当業者は、コンピューター５１２又は他のクライアントデバイスがコンピューターネットワークの一部として配備されることが可能である、ということを認識することができる。これに関して、本明細書で開示される主題は、任意の数のメモリ又は記憶装置、並びに任意の数の記憶装置又はボリュームにわたって生じる任意の数のアプリケーション及びプロセスを有する、任意のコンピューターシステムに関連することができる。本明細書で開示される主題の態様は、リモート又はローカル記憶装置を有しネットワーク環境に配備されたサーバーコンピューターとクライアントコンピューターを備えた環境に適用されることができる。本明細書で開示される主題の態様はまた、プログラミング言語の機能性、解釈、及び実行能力を有するスタンドアロンのコンピューティングデバイスに適用されることもできる。
【００２６】
[0026]  図４は、統合開発環境（ＩＤＥ）６００及び共通言語ランタイム環境６０２を示す。ＩＤＥ６００は、ユーザー（例えば、開発者、プログラマー、デザイナー、コーディング者）がコンピューターシステムにおいてプログラム、プログラムのセット、ウェブサイト、ウェブアプリケーション、及びウェブサービスをデザインし、コーディングし、コンパイルし、テストし、実行し、編集し、デバッグし、又はビルドすることを可能にすることができる。ソフトウェアプログラムは、１又は複数のソースコード言語（例えば、Ｖｉｓｕａｌ  Ｂａｓｉｃ、Ｖｉｓｕａｌ  Ｊ＃、Ｃ＋＋、Ｃ＃、Ｊ＃、Ｊａｖａ  Ｓｃｒｉｐｔ（登録商標）、ＡＰＬ、ＣＯＢＯＬ、Ｐａｓｃａｌ、Ｅｉｆｆｅｌ、Ｈａｓｋｅｌｌ、ＭＬ、Ｏｂｅｒｏｎ、Ｐｅｒｌ、Ｐｙｔｈｏｎ、Ｓｃｈｅｍｅ、Ｓｍａｌｌｔａｌｋ等）で作成されたソースコード（コンポーネント６１０）を含むことが可能である。ＩＤＥ６００は、ネイティブコードの開発環境を提供することができ、又は仮想マシン上で動作するマネージコードの開発環境を提供することができ、又はそれらの組み合わせを提供することができる。ＩＤＥ６００は、Ｍｉｃｒｏｓｏｆｔ  ．ＮＥＴ（商標）フレームワークを用いてマネージコードの開発環境を提供することができる。モデリングツール６５２及びモデルストア６５３を使用する言語特有ソースコンパイラー６２０を用いて、ソースコードコンポーネント６１０とネイティブコードコンポーネント６１１から中間言語コンポーネント６５０が作成されることができ、アプリケーションが実行される時に、中間言語コンパイラー６６０（例えば実行時（ＪＩＴ）コンパイラー）を用いて、中間言語コンポーネント６５０からネイティブコードコンポーネント６１１（例えばマシン実行可能命令）が作成される。即ち、中間言語（ＩＬ）アプリケーションが実行される時に、中間言語アプリケーションは実行されながらそれが実行されているプラットフォーム用の適切な機械語にコンパイルされて、それにより、コードがいくつかのプラットフォームにわたって移植性のあるものとなる。代替的に、他の実施態様では、プログラムはそれの意図されたプラットフォームに適切なネイティブコードの機械語（不図示）にコンパイルされることができる。
【００２７】
[0027]  ユーザーは、ＩＤＥ６００のユーザーインターフェイス６４０とソースコードエディター６５１を介して、既知のソフトウェアプログラミング手法並びに特定のソース言語に関連した特有の論理的規則及び構文規則に従ってソースコードコンポーネントを作成及び／又は編集することが可能である。その後に、ソースコードコンポーネント６１０はソースコンパイラー６２０によってコンパイルされることが可能であり、それにより、アセンブリ６３０のようなプログラムの中間言語表現が作成されることができる。アセンブリ６３０は、中間言語コンポーネント６５０とメタデータ６４２を含むことができる。アプリケーションのデザインは、配備の前に検証されることが可能であってよい。
【００２８】
[0028]  本明細書で説明される様々な手法は、ハードウェア若しくはソフトウェアに関連して、又は、適切である場合には両者の組み合わせに関連して実装されることができる。したがって、本明細書で説明される方法及び装置、又は、それらのある態様若しくはある一部分は、フロッピーディスク（登録商標）、ＣＤ−ＲＯＭ、ハードドライブ、又は任意の他の機械可読記憶媒体などの有形媒体に具現化されたプログラムコード（即ち命令）の形態をとることができ、このプログラムコードがコンピューターなどの機械にロードされてそれによって実行される時、当該機械は、本明細書で開示される主題の態様を実行するための装置となる。本明細書で用いられる際、「機械可読記憶媒体」という用語は、どんな形態であれ伝搬信号を提供（即ち、格納及び／又は伝送）するあらゆるメカニズムを排除するように解されなければならない。プログラム可能なコンピューター上におけるプログラムコードの実行の場合、コンピューティングデバイスは、一般に、プロセッサー、（揮発性及び不揮発性のメモリ及び／又は記憶素子を含む）当該プロセッサーによって読み取り可能な記憶媒体、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを含むだろう。ドメイン固有プログラミングモデル態様の作成及び／又は実装を例えばデータ処理ＡＰＩ等を通じて利用することのできる１又は複数のプログラムは、コンピューターシステムとやり取りするための高水準の手続き的又はオブジェクト指向のプログラミング言語で実装されることができる。しかしながら、このプログラムは、もし望まれるならば、アセンブリ言語又は機械語で実装されることが可能である。いずれにせよ、その言語は、コンパイル言語又は解釈言語であってよく、またハードウェア実装と組み合わせられてよい。
【００２９】
[0029]  構造的な特徴及び／又は方法論的行為に特有の言い回しで主題が説明されてきたが、添付された特許請求の範囲において定義される主題は必ずしも上述された特有の特徴又は行為に限定されるものではない、ということは理解されなければならない。それどころか、上述された当該特有の特徴及び行為は、特許請求の範囲を具体化する例示的な形として開示されているのである。
【図１ａ】
2015524126.tif 000003
【図１ｂ】
2015524126.tif 000004
【図１ｃ】
2015524126.tif 000005
【図２】
2015524126.tif 000006
【図３】
2015524126.tif 000007
【図４】
2015524126.tif 000008
【国際調査報告】
2015524126.tif 000009
2015524126.tif 000010
2015524126.tif 000011