特許第6122493号(P6122493)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト コーポレーションの特許一覧

<>
  • 特許6122493-適応的に移植性を有したライブラリ 図000002
  • 特許6122493-適応的に移植性を有したライブラリ 図000003
  • 特許6122493-適応的に移植性を有したライブラリ 図000004
  • 特許6122493-適応的に移植性を有したライブラリ 図000005
  • 特許6122493-適応的に移植性を有したライブラリ 図000006
  • 特許6122493-適応的に移植性を有したライブラリ 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6122493
(24)【登録日】2017年4月7日
(45)【発行日】2017年4月26日
(54)【発明の名称】適応的に移植性を有したライブラリ
(51)【国際特許分類】
   G06F 9/445 20060101AFI20170417BHJP
【FI】
   G06F9/06 650B
【請求項の数】10
【全頁数】14
(21)【出願番号】特願2015-518415(P2015-518415)
(86)(22)【出願日】2013年5月28日
(65)【公表番号】特表2015-524126(P2015-524126A)
(43)【公表日】2015年8月20日
(86)【国際出願番号】US2013042791
(87)【国際公開番号】WO2013191852
(87)【国際公開日】20131227
【審査請求日】2016年5月11日
(31)【優先権主張番号】13/525,356
(32)【優先日】2012年6月18日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】500046438
【氏名又は名称】マイクロソフト コーポレーション
(74)【代理人】
【識別番号】100140109
【弁理士】
【氏名又は名称】小野 新次郎
(74)【代理人】
【識別番号】100075270
【弁理士】
【氏名又は名称】小林 泰
(74)【代理人】
【識別番号】100101373
【弁理士】
【氏名又は名称】竹内 茂雄
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100138759
【弁理士】
【氏名又は名称】大房 直樹
(72)【発明者】
【氏名】トロフィン,ミルチャ
(72)【発明者】
【氏名】ツファリナ,クシシュトフ
(72)【発明者】
【氏名】デュスッド,パトリック・エイチ
【審査官】 坂庭 剛史
(56)【参考文献】
【文献】 米国特許出願公開第2009/0249277(US,A1)
【文献】 特開2000−347875(JP,A)
【文献】 特開平09−190355(JP,A)
【文献】 千種菊里,深遠なるMacの世界を探求する Mac解体新書,月刊アスキードットテクノロジーズ ,日本,株式会社アスキー・メディアワークス,2009年11月 1日,第14巻,第11号(通巻163号),pp.170-177
【文献】 安東一真,LinuxReport 開発ツール Androidアプリを手軽に開発 ブラウザだけで作成可能 新しい開発ツールが続々,日経Linux ,日本,日経BP社,2011年 8月 8日,第13巻,第9号(通巻144号),pp.7-8,ISSN:1345-0182
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/445
(57)【特許請求の範囲】
【請求項1】
コンピューティングデバイスの少なくとも1つのプロセッサーと、
前記コンピューティングデバイスの前記少なくとも1つのプロセッサーに通信可能に結合されたメモリと、
前記メモリにロードされる少なくとも1つのモジュールであって、前記少なくとも1つのプロセッサーが、
ソースコードのプラットフォーム非依存部分を受け取り、
異なるプラットフォームに対する、前記ソースコードの複数のプラットフォーム特有部分を受け取り、
前記ソースコードのプラットフォーム非依存部分と前記ソースコードの複数のプラットフォーム特有部分を単一実行可能ファイルにコンパイルし、前記ソースコードの複数のプラットフォーム特有部分は、前記コンパイルによって前記単一実行可能ファイルの非コード部分の一部となり
前記単一実行可能ファイルを複数の異なるプラットフォームへ配置する、
ようにさせる少なくとも1つのモジュールと、
を備えるシステム。
【請求項2】
前記コンピューティングデバイスは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、又はノートブックである、請求項1に記載のシステム。
【請求項3】
前記メモリにロードされた時に、前記少なくとも1つのプロセッサーが、インターフェイスを含んだプラットフォーム特有抽象化レイヤーを生成するようにさせる少なくとも1つのモジュールを更に備える、請求項1に記載のシステム。
【請求項4】
前記ソースコードの複数のプラットフォーム特有部分のうちの1つのプラットフォーム特有部分は、ソフトウェアのバージョンを含む、請求項1に記載のシステム。
【請求項5】
前記ソースコード中の注釈が、前記ソースコードの前記プラットフォーム非依存部分と前記ソースコードの前記複数のプラットフォーム特有部分を前記単一実行可能ファイルにコンパイルするコンパイラーを決定する、請求項1に記載のシステム。
【請求項6】
コンピューティングデバイスのプロセッサーによって、プラットフォーム非依存部分と複数のプラットフォーム特有部分とを含む単一実行可能ファイルを受け取るステップであって、前記複数のプラットフォーム特有部分は、第1のプラットフォーム向けのプラットフォーム特有部分と第2のプラットフォーム向けのプラットフォーム特有部分とを含み、前記複数のプラットフォーム特有部分は、前記単一実行可能ファイルの非コード部分の一部である、ステップと、
前記コンピューティングデバイスの前記プロセッサーのプラットフォームを決定するステップであって、前記プロセッサーの前記プラットフォームは、前記第1のプラットフォームを含む、ステップと、
前記単一実行可能ファイルの前記複数のプラットフォーム特有部分から前記第1のプラットフォーム向けの前記プラットフォーム特有部分を抽出するステップと、
前記第1のプラットフォーム向けの前記プラットフォーム特有部分をバイナリの前記プラットフォーム非依存部分に結合するステップと、
前記結合されたバイナリをロードするステップと、
を含む方法。
【請求項7】
前記第1のプラットフォームは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、又はノートブックを含む、請求項6に記載の方法。
【請求項8】
複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分を含む前記単一実行可能ファイルを受け取るステップであって、前記複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分は、前記第1のプラットフォーム向けのプラットフォーム特有のプラットフォーム抽象化レイヤーと前記第2のプラットフォーム向けのプラットフォーム特有のプラットフォーム抽象化レイヤーとを含む、ステップを更に含む、請求項6に記載の方法。
【請求項9】
前記単一実行可能ファイルの前記複数のプラットフォーム特有のプラットフォーム抽象化レイヤー部分から前記第1のプラットフォーム向けの前記プラットフォーム特有のプラットフォーム抽象化レイヤーを抽出するステップと、
前記第1のプラットフォーム向けの前記プラットフォーム特有のプラットフォーム抽象化レイヤー部分をバイナリの前記プラットフォーム非依存部分に結合するステップと、
前記結合されたバイナリをロードするステップと、
を更に含む、請求項6に記載の方法。
【請求項10】
少なくとも1つのプロセッサーとメモリとを備えるデバイスであって、
前記少なくとも1つのプロセッサーは、
コンピューティングデバイスのプロセッサーによって、コード部分と非コード部分を含む単一実行可能ファイルを受け取り、前記単一実行可能ファイルは、前記コード部分にプラットフォーム非依存部分と、前記非コード部分に複数のプラットフォーム特有部分とを含み、前記複数のプラットフォーム特有部分は、第1のプラットフォーム向けのプラットフォーム特有部分と第2のプラットフォーム向けのプラットフォーム特有部分とを含み、
前記コンピューティングデバイスのプラットフォームを決定し、前記コンピューティングデバイスの前記プラットフォームは、前記第1のプラットフォームを含み、
前記単一実行可能ファイルの前記複数のプラットフォーム特有部分から前記第1のプラットフォーム向けの前記プラットフォーム特有部分を抽出し、
前記第1のプラットフォーム向けの前記プラットフォーム特有部分をバイナリの前記プラットフォーム非依存部分に結合し、
前記結合されたバイナリをロードする、
ように構成される、デバイス。
【発明の詳細な説明】
【背景技術】
【0001】
[0001] コンピューターサイエンスにおいて用いられる「移植性」という用語は、同じソフトウェアを異なるコンピューティング環境で使用する能力を意味する。プラットフォーム特有でないコードを意味するために、「移植性のあるコード」という用語が用いられる場合がある。即ち、まさに同一のソフトウェアが、任意のプラットフォーム上で、又は少なくとも複数のプラットフォーム上で動作することが可能である。「移植性のあるコード」という用語は、ゼロからソフトウェアを書くよりもコスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられることもある。当該用語のこれらの異なった使用方法を区別するため、任意のプラットフォーム上で動作することが可能なプラットフォーム非依存型のコードを意味するのに「ユニバーサルに移植性のあるコード」という用語が用いられるだろう。「移植性のあるコード」という用語は、コスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられるだろう。
【0002】
[0002] 異なるプラットフォーム上で動作する異なるバージョンのコードを作成する1つの方法は、条件付きコンパイルによるものである。条件付きコンパイルは、コンパイラーが、コードを複数回コンパイルすることによって複数の異なるプラットフォームに関連した複数の異なる実行可能ファイルを生成することを可能にする。コンパイラーは、第1のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの1つのセットによって動作し、第2のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの別のセットによって動作し、以下同様である。
【発明の概要】
【0003】
[0003] ソースコードのプラットフォーム非依存部分が、異なるプラットフォーム及び/又はソフトウェアのバージョンのために注釈を付された1又は複数の部分を含むように拡張されることが可能である。プラットフォーム非依存部分とプラットフォーム特有部分及び/又はバージョン特有部分との両方を含んだソースコードが、一度コンパイルされて、複数のデバイスのプラットフォーム及び/又は1又は複数のプラットフォームの複数のバージョンへ配布されそれらの上で動作することの可能な、単一実行可能ファイルを作成することが可能である。開発環境のプラットフォーム特有の属性は、コンパイラーがプラットフォーム特有の自動補完と型検査を提供することを可能にすることができる。プラットフォーム特有又はバージョン特有の実行可能ファイル(例えば、アセンブリ、バイナリ等)が、リソース(例えばデータ)としてユニバーサルに移植性のある(プラットフォーム非依存の)実行可能ファイルに埋め込まれることが可能である。プラットフォーム特有抽象化レイヤー及び/又はバージョン特有インターフェイスが作成されることもでき、リソース又はデータとしてユニバーサルに移植性のある実行可能ファイルに埋め込まれることができる。プラットフォーム特有抽象化レイヤーは、対応するプラットフォーム特有実行可能ファイルによる実行時に実装されることが可能である。実行可能ファイルが特定のデバイス上で実行される時にその実行可能ファイルが正しく実行するように、開発ツール、例えばIDE(統合開発環境)が実行可能ファイルを設定することが可能である。コンパイルされたコードがデバイス上で実行される時、プログラム実行マネージャー(例えばランタイム)が、その実行可能ファイルが動作しているデバイスに対応するプラットフォーム特有データを抽出し、抽出されたデータを実行可能ファイルに結合し、実行可能ファイルをロードして実行することが可能である。したがって、同一のバイナリが、そのバイナリが動作しているプラットフォームの能力に応じて異なる結果又は機能性を生じさせることが可能である。
【0004】
[0004] この概要は、詳細な説明において更に後述される概念からの選抜を簡略な形で導入するために提供される。この概要は、請求された主題の主要な特徴又は本質的な特徴を特定することを意図したものではなく、また、請求された主題の有効範囲を限定するのに用いられることを意図したものでもない。
【図面の簡単な説明】
【0005】
図1a図1aは、移植性のあるコードを条件付きでコンパイルする当該技術分野において知られているシステム100の一例を示す。
図1b図1bは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム109の一例を示す。
図1c図1cは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム121の一例を示す。
図2図2は、本明細書で開示される主題の態様による単一実行可能ファイルを生成しその生成された実行可能ファイルを実行するための方法200の一例を示す。
図3図3は、本明細書で開示される主題の態様によるコンピューティング環境の一例のブロック図である。
図4図4は、本明細書で開示される主題の態様による統合開発環境(IDE)の一例のブロック図である。
【発明を実施するための形態】
【0006】
<概要>
[0006] 図1aは、当該技術分野において知られているユニバーサルに移植性のあるコードを生成するためのシステムを示す。従来、ターゲットデバイス上で動作するように、条件付きコンパイルのディレクティブを有したソースコード(例えばソースコード101)がコンパイルされる。例えば、ソースコードが、スマートフォンなどのターゲットデバイス上で動作するように一度目にコンパイラー102上でコンパイルされて、スマートフォン用バイナリ104aなどのスマートフォン用バイナリを生成する。異なるディレクティブを有したソースコードが、二度目にコンパイルされて、タブレット上で動作することが可能なバイナリ(例えばタブレット用バイナリ104b)を生成することができる。更に異なるディレクティブを有したソースコードが、再びコンパイルされて、ゲーム機上で動作することが可能なバイナリ(例えばゲーム機用バイナリ104c)、デスクトップ上で動作することが可能なバイナリ(例えばデスクトップ用バイナリ104d)、又は他のデバイス上で動作することが可能なバイナリ(例えばデバイスn用バイナリ104n)を生成することができる。こうして、移植性のあるコードが、複数回コンパイルされて、それぞれが特定のプラットフォーム上で動作するようにデザインされた複数のバイナリを生成する。
【0007】
[0007] このような設計の1つの帰結は、ソフトウェアがデバイスへの配置のためにパッケージ化される場合に、適切なバイナリがそのデバイスのために選択されなければならないということである。例えば、スマートフォンへはスマートフォン用バイナリ104aが配置される必要があり、するとスマートフォンのランタイム106aが、バイナリ104aを実行してある実行結果a 108aを生成するだろう。同様に、タブレットへはタブレット用バイナリ104bが配置される必要があり、するとタブレットのランタイム106bが、バイナリ104bを実行して、実行結果a 108aとは異なるある実行結果b 108bを生成するだろう。同様に、ゲーム機へはゲーム機用バイナリ104cが配置される必要があり、するとゲーム機のランタイム106cが、バイナリ104cを実行して、実行結果a 108aや実行結果b 108bとは異なるある実行結果c 108cを生成するだろう。デスクトップへはデスクトップ用バイナリ104dが配置される必要があり、するとデスクトップのランタイム106dが、バイナリ104dを実行して、他のデバイスの実行結果とは異なるある実行結果d 108dを生成するだろう。即ち、デバイス特有のバイナリ104nが、それに対応するデバイスへ配置される必要があり、するとそのデバイスのランタイム106nが、バイナリ104nを実行して特定の結果108nを生成するだろう。もしコードが再利用されるならば、コードは、デバイス特有部分を変更するように修正されなければならない。
【0008】
[0008] 図1bは、本明細書で説明される主題の態様による(リファレンスライブラリと呼ばれることもある)単一バイナリを生成するシステム109を示す。本明細書で説明される主題の態様によれば、ソースコード110などのソースコードが、変形コンパイラー112によって一度コンパイルされて、複数のターゲットプラットフォーム上で動作することが可能な単一バイナリ(例えばバイナリ115)を生成することができる。当該技術分野において知られているバイナリは、コード部分と、リソース又はデータを表す非コード部分とを含むことが可能である。バイナリ115は、バージョン非依存型コード及び/又はプラットフォーム非依存型コードを含んだバージョン非依存部分及び/又はプラットフォーム非依存部分114などの1又は複数の部分と、バージョン特有及び/又はプラットフォーム特有である1又は複数の部分(例えば、スマートフォン特有部分116a、タブレット特有部分116b、ゲーム機特有部分116c、デスクトップ特有部分116d、又は任意のデバイス特有部分n 116n)とを含むことが可能である。プラットフォーム特有部分は、リソース又はデータとしてラベル付けされることができる。単一バイナリ115は、複数の異なるプラットフォームへ配置されることが可能である。
【0009】
[0009] 実行時にバイナリ115は、限定ではないがランタイム(例えば、スマートフォン用ランタイム118a、タブレット用ランタイム118b、ゲーム機用ランタイム118c、デスクトップ用ランタイム118d、及び一般にデバイスn用ランタイム118n)などのプログラム実行マネージャーによって実行されることができる。ランタイムは、当該バイナリの適切な(適合した)バージョン特有部分及び/又はプラットフォーム特有部分を(例えばリソース又はデータとしてラベル付けされたバイナリの部分から)抽出し、抽出されたバイナリのバージョン特有部分及び/又はプラットフォーム特有部分を、当該バイナリのバージョン非依存部分及び/又はプラットフォーム非依存部分に結合することが可能である。即ち、例えば、スマートフォンのランタイム118aは、バイナリのスマートフォン特有部分116aをプラットフォーム非依存部分114に結合することが可能であり、それを実行してスマートフォンのために実行結果a 120aを生成することが可能である。同様に、タブレットのランタイム118bは、バイナリのタブレット特有部分116bをプラットフォーム非依存部分114に結合することが可能であり、それを実行してタブレットのために実行結果b 120bを生成することが可能である。ゲーム機のランタイム118cは、バイナリのゲーム機特有部分116cをプラットフォーム非依存部分114に結合することが可能であり、それを実行してゲーム機のために実行結果c 120cを生成することが可能である。デスクトップのランタイム118dは、バイナリのデスクトップ特有部分116dをプラットフォーム非依存部分114に結合することが可能であり、それを実行してデスクトップのために実行結果d 120dを生成することが可能である。同様に、特定のデバイスのランタイム118nは、バイナリのデバイス特有部分116nをプラットフォーム非依存部分114に結合することが可能であり、それを実行してデバイスのために実行結果n 120nを生成することが可能である。
【0010】
[0010] 同様に、バージョン特有及び/又はプラットフォーム特有なプラットフォーム抽象化レイヤー(図1bには不図示)が、バイナリのデータ部分から抽出されることができ、バージョン非依存部分及び/又はプラットフォーム非依存部分114に結合されることができる。本明細書で説明される主題のいくつかの態様によれば、単一バイナリ115は、コードの1又は複数のバージョン特有部分及び/又はプラットフォーム特有部分が再利用の標準ユニットとしてランタイムによって理解されるような方法で、生成される(例えば、バイナリはランタイムが認識するフォーマットで作成される)。
【0011】
<適応的に移植性を有したライブラリ>
[0011] 図1cは、本明細書で開示される主題の態様による移植性のある単一の実行可能ファイルを生成するシステム121のブロック図を示す。図1cはまた、本明細書で説明される主題の態様による当該移植性のある実行可能ファイルの実行も示す。システム121の全て又は一部分は、図3に関して後述されるコンピューターなどの1又は複数のコンピューター若しくはコンピューティングデバイス上に存在することができる。システム121又はその一部分は、スタンドアロンのシステムとして、又はプラグイン若しくはアドインとして提供されることができる。システム121は、全体として、又は部分的に、図4に関して説明されるソフトウェア開発コンピューターなどのソフトウェア開発コンピューター上で実行することができる。システム121の全て又は一部分の上で、開発ツールが動作することができる。例えば、システム121の全て又は一部分は、例えば図4に関してより完全に説明されるIDE125などの、統合開発環境(IDE)内で実行することができ、又はIDEの外で実行することが可能である。
【0012】
[0012] システム121は、コンピューティングデバイス122などの1又は複数のコンピューティングデバイス又はコンピューターを含むことができる。コンピューティングデバイス122は、プロセッサー142等のような1又は複数のプロセッサー、メモリ144などのメモリ、及び、単一のユニバーサルに移植性のある実行可能ファイルを生成するモジュール123などの1又は複数のモジュールを含むことが可能である。モジュール123によって代表された1又は複数のモジュールは、コンパイルチェーン124の一部分を構成することが可能である。モジュール123は、コンパイラー、コンパイラーのプリプロセッサー、コンパイラーのポストプロセッサー、又はそれらの任意の組み合わせの一部分であってよい。モジュール123等のような1又は複数のモジュールは、メモリ144にロードされて、プロセッサー142等のような1又は複数のプロセッサーに、モジュール123に起因する動作を実施させることが可能である、ということが認識されるだろう。
【0013】
[0013] システム121は、限定ではないがスマートフォン、タブレット、デスクトップコンピューター、ゲーム機、又は任意の種類のコンピューティングデバイスを含む、1又は複数の他のコンピューター又はコンピューティングデバイスを含むことができる。これらのコンピューティングデバイスのそれぞれは、1又は複数のプロセッサー(不図示)、メモリ(不図示)、及び当該技術分野においてよく知られている他のコンポーネントを含むことができる。
【0014】
[0014] ソースコードファイル134などのソースコードファイルは、プラットフォーム非依存型コード130などのプラットフォーム非依存型コードの1又は複数の部分を含むことができる。ソースコードファイル134はまた、プラットフォーム特有コード132等のようなプラットフォーム特有コードの1又は複数の部分も含むことができる。プラットフォーム特有コードの1又は複数の部分は、デバイス1 135、デバイス2 137、…デバイスn 139等のようなデバイス上で動作するように特化したコードを含むことが可能である。デバイス1 135、デバイス2 137、…デバイスn 139などのデバイスは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、又は、現在知られており若しくは将来生み出される任意の他のコンピューティングデバイスなどのデバイスを含むことが可能である。バージョン特有コード及び/又はプラットフォーム特有コードの1又は複数の部分は、特化した対象のデバイスのバージョン及び/又は種類を示す識別注釈を付されることが可能である。例えば、第1の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、スマートフォン又はスマートフォン用のあるバージョンのソフトウェアに特化していることを表すことができる。第2の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、タブレット又はタブレット用のあるバージョンのソフトウェア等に特化していることを表すことができる。使用されている特定の注釈は、バイナリを作成するのにどのコンパイラー又はどのバージョンのコンパイラーが用いられるかを制御することができる。
【0015】
[0015] モジュール123は、ソースコードファイル134を受け取ることができ、コンパイルチェーン124の他のコンポーネントと協力して、プラットフォーム非依存型バイナリ126などのバージョン非依存型コード及び/又はプラットフォーム非依存型コードの1又は複数の部分と、例えばプラットフォーム特有バイナリ128等のようなバージョン特有コード及び/又はプラットフォーム特有コードの1又は複数の部分とを含む、単一バイナリ129を作成することが可能である。バージョン特有及び/又はプラットフォーム特有バイナリ128は、「ライトアップコード」を含むことが可能である。ライトアップコードは、あるプラットフォーム又はバージョンには存在するが別のプラットフォーム又はバージョンには存在しない1又は複数の機能を含むことができ、したがって、あるプラットフォーム又はバージョンのユーザーインターフェイスにおいて「ライトアップ」するが、別のプラットフォーム又はバージョンのユーザーインターフェイスにおいては「ライトアップ」しない。例えばプラットフォーム特有バイナリ128等のようなバージョン特有及び/又はプラットフォーム特有バイナリは、プラットフォーム非依存型バイナリ126に関連したデータなどのリソースとして指定されることが可能である。モジュール123等はまた、遭遇したそれぞれの種類のプラットフォーム特有コードの部分に対して、そのプラットフォームに関連したコードに基づいて抽象化レイヤー(例えばプラットフォーム特有インターフェイス)を生成することもできる。例えば、プラットフォーム特有バイナリ128などの第1のプラットフォーム特有バイナリが、抽象化レイヤー128aなどの第1のプラットフォーム特有抽象化レイヤーと関連付けられることができ、以下同様である。あるいはまた、標準的な条件付きコンパイル手法を用いてソースコードが複数回コンパイルされて、単一のマルチプラットフォームのバイナリを作成するようにポストコンパイル演算において結合されることの可能な、複数のプラットフォーム特有バイナリを生成することができる。
【0016】
[0016] 同一のバイナリ、例えばバイナリ129が、複数の異なるプラットフォームへ配置されることが可能である。バイナリの配置先のデバイス上でソフトウェアが実行される時、当該デバイスのランタイム(例えば、ランタイム136、ランタイム138、又はランタイム140等)は、適切なプラットフォーム特有バイナリを使用し、それをプラットフォーム非依存型バイナリに結合して当該デバイス上で動作する実行可能ファイルを作成することが可能である。例えば、プラットフォーム非依存型バイナリ、バイナリAが、プラットフォーム特有バイナリ、バイナリBを使用すると想定されたい。実行時に、デバイスに適切なプラットフォーム特有バイナリBが、バイナリAと結合するためにランタイムによって選択されることができ、その結果得られる実行可能ファイルが、その後実行されることが可能である。異なるプラットフォームに加えて、異なるバージョンが同様に適応することができる、ということが認識されるだろう。結合時に選択されたプラットフォーム特有コードに基づいて、そのプラットフォームの適切なプラットフォーム抽象化レイヤーがランタイムによって実装されることが可能である。仮想マシン環境におけるマネージ言語(managed language)の文脈の中で説明されたが、本明細書に記載される概念はネイティブコード環境において適用されることが可能である、ということが認識されるだろう。ネイティブコード環境では、プラットフォーム非依存型コードは、作成するのがより難しい場合がある。
【0017】
[0017] 図2は、複数の異なるプラットフォーム上で動作可能な単一バイナリを作成することができる方法200を示す。当該バイナリは、1又は複数の異なるプラットフォームへ配置されることが可能である。バイナリが実行される時、そのバイナリが配置されたデバイスのランタイムは、適切なプラットフォーム特有バイナリを決定して抽出し、それを結合してそのデバイス向けのプラットフォーム特有バイナリを生成することが可能である。したがって、同一のバイナリが、異なるデバイス上で動作した時に異なる結果を生じさせることが可能である。図2で説明される方法は、限定ではないが、図1b及び1cに関して説明されたようなシステムによって実施されることができる。方法200はあるシーケンスで実施される一連の処理を記載しているが、方法200は当該シーケンスの順序によっては限定されない、ということが理解されなければならない。例えば、いくつかの動作は、記載されたものとは異なる順序で行われてよい。加えて、ある動作が別の動作と同時に行われてよい。いくつかの実例では、全ての動作が実施されるのでなくてもよい。その上、異なるプラットフォームに関して説明されているが、以下に記載される処理は、異なるバージョンのソフトウェアの作成、生成、配置、及び実行に対しても同様に当てはまる、ということが認識されるだろう。
【0018】
[0018] 処理201において、プラットフォーム非依存型ソースコードが、IDEのソースコードエディター又は他のソフトウェアツールによって受け取られることが可能である。処理202において、注釈を付されたソースコードが受け取られることが可能である。プラットフォーム特有であるソースコードは、そのソースコードが意図された対象のプラットフォームを識別するために、注釈を付されることが可能である。処理204において、1又は複数のプラットフォーム非依存部分と1又は複数のプラットフォーム特有部分の両方を含むソースコードが、単一バイナリにコンパイルされることが可能である。処理206において、当該バイナリのプラットフォーム特有部分が、データ若しくは非コードのリソースとしてラベル付け又は指定されて、プラットフォーム非依存型バイナリに付加されることが可能である。処理208において、バイナリが1又は複数の異なるプラットフォームへ配置されることが可能である。処理210において、当該バイナリの配置先であるデバイスのうちの1つのランタイムが、そのバイナリを実行する要求を受け取ることが可能である。ランタイムは、プラットフォーム非依存型バイナリに結合すべき適切なプラットフォーム特有部分を決定し抽出することが可能である。処理212において、抽出されたプラットフォーム特有部分が、プラットフォーム非依存型バイナリに結合されることが可能である。処理214において、バイナリがロードされることが可能であり、216において、バイナリが実行されることが可能である。
【0019】
<適切なコンピューティング環境の例>
[0019] 本明細書で開示される主題の様々な態様のための文脈を提供するために、図3及び以下の議論は、本明細書で開示される主題の様々な実施態様が実装されることができる適切なコンピューティング環境510の簡潔で概略的な説明を提供するよう意図されている。本明細書で開示される主題は、1又は複数のコンピューター若しくは他のコンピューティングデバイスによって実行されるプログラムモジュールなどのコンピューター実行可能命令の一般的な文脈で説明されているが、当業者は、本明細書で開示される主題の一部分が、他のプログラムモジュール及び/又はハードウェアとソフトウェアの組み合わせと協力して実装されることも可能である、ということを認識するだろう。一般的に、プログラムモジュールは、特定のタスクを実施し又は特定のデータ型を実現するルーチン、プログラム、オブジェクト、物理的人工物、データ構造等を含む。通常、プログラムモジュールの機能性は、様々な実施態様において望まれるとおりに結合され又は分散されることができる。コンピューティング環境510は、適切な動作環境の一例に過ぎず、本明細書で開示される主題の使用又は機能性の範囲を限定するよう意図されてはいない。
【0020】
[0020] 図3を参照して、コンピューター512の形態のコンピューティングデバイスが説明される。コンピューター512は、少なくとも1つの処理装置514、システムメモリ516、及びシステムバス518を含むことができる。少なくとも1つの処理装置514は、限定ではないがシステムメモリ516などのメモリに格納されている命令を実行することが可能である。処理装置514は、様々な利用可能なプロセッサーのいずれであってもよい。例えば、処理装置514は、グラフィックス処理装置(GPU)であってよい。命令は、上で論じられた1又は複数のコンポーネント又はモジュールによって実行される機能性を実現するための命令、又は、上で説明された方法の1又は複数を実現するための命令であってよい。デュアルマイクロプロセッサーや他のマルチプロセッサーのアーキテクチャが、処理装置514として利用されることも可能である。コンピューター512は、ディスプレイ画面上にグラフィックスを描画することをサポートするシステムにおいて用いられることができる。別の例では、コンピューティングデバイスの少なくとも一部分が、グラフィックス処理装置を備えたシステムにおいて用いられることが可能である。システムメモリ516は、揮発性メモリ520と不揮発性メモリ522を含むことができる。不揮発性メモリ522は、読み取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラム可能ROM(EPROM)、又はフラッシュメモリを含むことが可能である。揮発性メモリ520は、外部キャッシュメモリとして働くことができるランダムアクセスメモリ(RAM)を含んでよい。システムバス518は、システムメモリ516を含むシステムの物理的人工物を処理装置514に結合する。システムバス518は、メモリバス、メモリコントローラー、周辺機器バス、外部バス、又はローカルバスを含むいくつかの種類のうちのいずれであってもよく、また任意の様々な利用可能なバスアーキテクチャを用いることができる。コンピューター512は、システムバス518を経由して処理装置514によってアクセス可能なデータ記憶装置を含んでよい。データ記憶装置は、グラフィックスの描画のための実行可能命令、3Dモデル、素材、テクスチャ等を含むことができる。
【0021】
[0021] コンピューター512は通常、揮発性及び不揮発性媒体、リムーバブル及び非リムーバブル媒体などの様々なコンピューター可読媒体を含む。コンピューター可読媒体は、コンピューター可読命令、データ構造、プログラムモジュール、若しくは他のデータなどの情報の記憶のための任意の方法又は技術で実現されることができる。コンピューター可読媒体は、(コンピューター記憶媒体とも称される)コンピューター可読記憶媒体と通信媒体とを含む。コンピューター記憶媒体は、限定ではないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CDROM、デジタル多用途ディスク(DVD)又は他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶デバイスなどの、所望のデータを格納することが可能でありコンピューター512によってアクセスされることが可能な物理的な(有形の)媒体を含む。通信媒体は、限定ではないが、通信信号、変調搬送波、又は任意の他の一時的媒体などの、所望の情報を伝達するのに使用されることが可能でありコンピューター512によってアクセスされることが可能な一時的媒体を含む。
【0022】
[0022] 図3は、ユーザーとコンピューターリソースとの間の仲介手段として働くことが可能なソフトウェアを説明するものであることが認識されるだろう。このソフトウェアは、ディスク記憶装置524に格納されることが可能でありコンピューター512のリソースを割り当てることが可能なオペレーティングシステム528を含むことができる。ディスク記憶装置524は、インターフェイス526などの非リムーバブルメモリインターフェイスを通じてシステムバス518に接続されたハードディスクドライブであってよい。システムアプリケーション530は、システムメモリ516又はディスク記憶装置524のいずれかに格納されたプログラムモジュール532とプログラムデータ534を通じて、オペレーティングシステム528によるリソースの管理を利用する。コンピューターは、様々なオペレーティングシステム又はオペレーティングシステムの組み合わせを用いて実装されることが可能である、ということが認識されるだろう。
【0023】
[0023] ユーザーは、入力デバイス536を通じてコンピューター512にコマンド又は情報を入力することが可能である。入力デバイス536は、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイク、音声認識及びジェスチャ認識システム等のようなポインティングデバイスを含むが、これに限定はされない。これらの及び他の入力デバイスは、インターフェイスポート538を介しシステムバス518を通じて処理装置514に接続する。インターフェイスポート538は、シリアルポート、パラレルポート、ユニバーサルシリアルバス(USB)等を表すことができる。出力デバイス540は、入力デバイスと同じ種類のポートを使用することができる。出力アダプター542は、モニター、スピーカー、及びプリンターのような特定のアダプターを必要とするいくつかの出力デバイス540が存在することを示すために提供されている。出力アダプター542は、限定ではないが、出力デバイス540とシステムバス518との間の接続を提供するビデオカード及びサウンドカードを含む。他のデバイス及び/又はシステム、又はリモートコンピューター544などのデバイスは、入力と出力の両方の能力を提供することができる。
【0024】
[0024] コンピューター512は、リモートコンピューター544などの1又は複数のリモートコンピューターへの論理的接続を用いて、ネットワーク環境で動作することが可能である。リモートコンピューター544は、パーソナルコンピューター、サーバー、ルーター、ネットワークPC、ピアデバイス、又は他の一般によくあるネットワークノードであってよく、図3にはメモリ記憶デバイス546のみが示されているが、典型的には、コンピューター512に関連して上述された要素の多く又は全てを含む。リモートコンピューター544は、通信接続550を介して論理的に接続されることが可能である。ネットワークインターフェイス548は、ローカルエリアネットワーク(LAN)及びワイドエリアネットワーク(WAN)などの通信ネットワークを包含するが、他のネットワークを含んでもよい。通信接続550は、ネットワークインターフェイス548をバス518に接続するために利用されるハードウェア/ソフトウェアを指す。通信接続550は、コンピューター512の内部にあっても外部にあってもよく、モデム(電話、ケーブル、DSL、及び無線)、ISDNアダプター、イーサネット(登録商標)カード等のような内部及び外部技術を含む。
【0025】
[0025] 示されたネットワーク接続は単なる例であり、コンピューター間に通信リンクを確立する他の手段が用いられてよい、ということが認識されるだろう。当業者は、コンピューター512又は他のクライアントデバイスがコンピューターネットワークの一部として配備されることが可能である、ということを認識することができる。これに関して、本明細書で開示される主題は、任意の数のメモリ又は記憶装置、並びに任意の数の記憶装置又はボリュームにわたって生じる任意の数のアプリケーション及びプロセスを有する、任意のコンピューターシステムに関連することができる。本明細書で開示される主題の態様は、リモート又はローカル記憶装置を有しネットワーク環境に配備されたサーバーコンピューターとクライアントコンピューターを備えた環境に適用されることができる。本明細書で開示される主題の態様はまた、プログラミング言語の機能性、解釈、及び実行能力を有するスタンドアロンのコンピューティングデバイスに適用されることもできる。
【0026】
[0026] 図4は、統合開発環境(IDE)600及び共通言語ランタイム環境602を示す。IDE600は、ユーザー(例えば、開発者、プログラマー、デザイナー、コーディング者)がコンピューターシステムにおいてプログラム、プログラムのセット、ウェブサイト、ウェブアプリケーション、及びウェブサービスをデザインし、コーディングし、コンパイルし、テストし、実行し、編集し、デバッグし、又はビルドすることを可能にすることができる。ソフトウェアプログラムは、1又は複数のソースコード言語(例えば、Visual Basic、Visual J#、C++、C#、J#、Java Script(登録商標)、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)で作成されたソースコード(コンポーネント610)を含むことが可能である。IDE600は、ネイティブコードの開発環境を提供することができ、又は仮想マシン上で動作するマネージコードの開発環境を提供することができ、又はそれらの組み合わせを提供することができる。IDE600は、Microsoft .NET(商標)フレームワークを用いてマネージコードの開発環境を提供することができる。モデリングツール652及びモデルストア653を使用する言語特有ソースコンパイラー620を用いて、ソースコードコンポーネント610とネイティブコードコンポーネント611から中間言語コンポーネント650が作成されることができ、アプリケーションが実行される時に、中間言語コンパイラー660(例えば実行時(JIT)コンパイラー)を用いて、中間言語コンポーネント650からネイティブコードコンポーネント611(例えばマシン実行可能命令)が作成される。即ち、中間言語(IL)アプリケーションが実行される時に、中間言語アプリケーションは実行されながらそれが実行されているプラットフォーム用の適切な機械語にコンパイルされて、それにより、コードがいくつかのプラットフォームにわたって移植性のあるものとなる。代替的に、他の実施態様では、プログラムはそれの意図されたプラットフォームに適切なネイティブコードの機械語(不図示)にコンパイルされることができる。
【0027】
[0027] ユーザーは、IDE600のユーザーインターフェイス640とソースコードエディター651を介して、既知のソフトウェアプログラミング手法並びに特定のソース言語に関連した特有の論理的規則及び構文規則に従ってソースコードコンポーネントを作成及び/又は編集することが可能である。その後に、ソースコードコンポーネント610はソースコンパイラー620によってコンパイルされることが可能であり、それにより、アセンブリ630のようなプログラムの中間言語表現が作成されることができる。アセンブリ630は、中間言語コンポーネント650とメタデータ642を含むことができる。アプリケーションのデザインは、配備の前に検証されることが可能であってよい。
【0028】
[0028] 本明細書で説明される様々な手法は、ハードウェア若しくはソフトウェアに関連して、又は、適切である場合には両者の組み合わせに関連して実装されることができる。したがって、本明細書で説明される方法及び装置、又は、それらのある態様若しくはある一部分は、フロッピーディスク(登録商標)、CD−ROM、ハードドライブ、又は任意の他の機械可読記憶媒体などの有形媒体に具現化されたプログラムコード(即ち命令)の形態をとることができ、このプログラムコードがコンピューターなどの機械にロードされてそれによって実行される時、当該機械は、本明細書で開示される主題の態様を実行するための装置となる。本明細書で用いられる際、「機械可読記憶媒体」という用語は、どんな形態であれ伝搬信号を提供(即ち、格納及び/又は伝送)するあらゆるメカニズムを排除するように解されなければならない。プログラム可能なコンピューター上におけるプログラムコードの実行の場合、コンピューティングデバイスは、一般に、プロセッサー、(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)当該プロセッサーによって読み取り可能な記憶媒体、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含むだろう。ドメイン固有プログラミングモデル態様の作成及び/又は実装を例えばデータ処理API等を通じて利用することのできる1又は複数のプログラムは、コンピューターシステムとやり取りするための高水準の手続き的又はオブジェクト指向のプログラミング言語で実装されることができる。しかしながら、このプログラムは、もし望まれるならば、アセンブリ言語又は機械語で実装されることが可能である。いずれにせよ、その言語は、コンパイル言語又は解釈言語であってよく、またハードウェア実装と組み合わせられてよい。
【0029】
[0029] 構造的な特徴及び/又は方法論的行為に特有の言い回しで主題が説明されてきたが、添付された特許請求の範囲において定義される主題は必ずしも上述された特有の特徴又は行為に限定されるものではない、ということは理解されなければならない。それどころか、上述された当該特有の特徴及び行為は、特許請求の範囲を具体化する例示的な形として開示されているのである。
図1a
図1b
図1c
図2
図3
図4