JP6122493B2 - 適応的に移植性を有したライブラリ - Google Patents

適応的に移植性を有したライブラリ Download PDF

Info

Publication number
JP6122493B2
JP6122493B2 JP2015518415A JP2015518415A JP6122493B2 JP 6122493 B2 JP6122493 B2 JP 6122493B2 JP 2015518415 A JP2015518415 A JP 2015518415A JP 2015518415 A JP2015518415 A JP 2015518415A JP 6122493 B2 JP6122493 B2 JP 6122493B2
Authority
JP
Japan
Prior art keywords
platform
specific
binary
code
executable file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015518415A
Other languages
English (en)
Other versions
JP2015524126A5 (ja
JP2015524126A (ja
Inventor
トロフィン,ミルチャ
ツファリナ,クシシュトフ
デュスッド,パトリック・エイチ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2015524126A publication Critical patent/JP2015524126A/ja
Publication of JP2015524126A5 publication Critical patent/JP2015524126A5/ja
Application granted granted Critical
Publication of JP6122493B2 publication Critical patent/JP6122493B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • G06F9/44542Retargetable
    • G06F9/44547Fat binaries

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

[0001] コンピューターサイエンスにおいて用いられる「移植性」という用語は、同じソフトウェアを異なるコンピューティング環境で使用する能力を意味する。プラットフォーム特有でないコードを意味するために、「移植性のあるコード」という用語が用いられる場合がある。即ち、まさに同一のソフトウェアが、任意のプラットフォーム上で、又は少なくとも複数のプラットフォーム上で動作することが可能である。「移植性のあるコード」という用語は、ゼロからソフトウェアを書くよりもコスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられることもある。当該用語のこれらの異なった使用方法を区別するため、任意のプラットフォーム上で動作することが可能なプラットフォーム非依存型のコードを意味するのに「ユニバーサルに移植性のあるコード」という用語が用いられるだろう。「移植性のあるコード」という用語は、コスト的に効率良く、異なるプラットフォーム上で動作するように変更することが可能なコードを意味するのに用いられるだろう。
[0002] 異なるプラットフォーム上で動作する異なるバージョンのコードを作成する1つの方法は、条件付きコンパイルによるものである。条件付きコンパイルは、コンパイラーが、コードを複数回コンパイルすることによって複数の異なるプラットフォームに関連した複数の異なる実行可能ファイルを生成することを可能にする。コンパイラーは、第1のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの1つのセットによって動作し、第2のプラットフォーム向けの実行可能ファイルを生成するためのパラメーター又はディレクティブの別のセットによって動作し、以下同様である。
[0003] ソースコードのプラットフォーム非依存部分が、異なるプラットフォーム及び/又はソフトウェアのバージョンのために注釈を付された1又は複数の部分を含むように拡張されることが可能である。プラットフォーム非依存部分とプラットフォーム特有部分及び/又はバージョン特有部分との両方を含んだソースコードが、一度コンパイルされて、複数のデバイスのプラットフォーム及び/又は1又は複数のプラットフォームの複数のバージョンへ配布されそれらの上で動作することの可能な、単一実行可能ファイルを作成することが可能である。開発環境のプラットフォーム特有の属性は、コンパイラーがプラットフォーム特有の自動補完と型検査を提供することを可能にすることができる。プラットフォーム特有又はバージョン特有の実行可能ファイル(例えば、アセンブリ、バイナリ等)が、リソース(例えばデータ)としてユニバーサルに移植性のある(プラットフォーム非依存の)実行可能ファイルに埋め込まれることが可能である。プラットフォーム特有抽象化レイヤー及び/又はバージョン特有インターフェイスが作成されることもでき、リソース又はデータとしてユニバーサルに移植性のある実行可能ファイルに埋め込まれることができる。プラットフォーム特有抽象化レイヤーは、対応するプラットフォーム特有実行可能ファイルによる実行時に実装されることが可能である。実行可能ファイルが特定のデバイス上で実行される時にその実行可能ファイルが正しく実行するように、開発ツール、例えばIDE(統合開発環境)が実行可能ファイルを設定することが可能である。コンパイルされたコードがデバイス上で実行される時、プログラム実行マネージャー(例えばランタイム)が、その実行可能ファイルが動作しているデバイスに対応するプラットフォーム特有データを抽出し、抽出されたデータを実行可能ファイルに結合し、実行可能ファイルをロードして実行することが可能である。したがって、同一のバイナリが、そのバイナリが動作しているプラットフォームの能力に応じて異なる結果又は機能性を生じさせることが可能である。
[0004] この概要は、詳細な説明において更に後述される概念からの選抜を簡略な形で導入するために提供される。この概要は、請求された主題の主要な特徴又は本質的な特徴を特定することを意図したものではなく、また、請求された主題の有効範囲を限定するのに用いられることを意図したものでもない。
図1aは、移植性のあるコードを条件付きでコンパイルする当該技術分野において知られているシステム100の一例を示す。 図1bは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム109の一例を示す。 図1cは、本明細書で開示される主題の態様による複数のプラットフォーム上で動作することが可能な単一実行可能ファイルを生成するシステム121の一例を示す。 図2は、本明細書で開示される主題の態様による単一実行可能ファイルを生成しその生成された実行可能ファイルを実行するための方法200の一例を示す。 図3は、本明細書で開示される主題の態様によるコンピューティング環境の一例のブロック図である。 図4は、本明細書で開示される主題の態様による統合開発環境(IDE)の一例のブロック図である。
<概要>
[0006] 図1aは、当該技術分野において知られているユニバーサルに移植性のあるコードを生成するためのシステムを示す。従来、ターゲットデバイス上で動作するように、条件付きコンパイルのディレクティブを有したソースコード(例えばソースコード101)がコンパイルされる。例えば、ソースコードが、スマートフォンなどのターゲットデバイス上で動作するように一度目にコンパイラー102上でコンパイルされて、スマートフォン用バイナリ104aなどのスマートフォン用バイナリを生成する。異なるディレクティブを有したソースコードが、二度目にコンパイルされて、タブレット上で動作することが可能なバイナリ(例えばタブレット用バイナリ104b)を生成することができる。更に異なるディレクティブを有したソースコードが、再びコンパイルされて、ゲーム機上で動作することが可能なバイナリ(例えばゲーム機用バイナリ104c)、デスクトップ上で動作することが可能なバイナリ(例えばデスクトップ用バイナリ104d)、又は他のデバイス上で動作することが可能なバイナリ(例えばデバイスn用バイナリ104n)を生成することができる。こうして、移植性のあるコードが、複数回コンパイルされて、それぞれが特定のプラットフォーム上で動作するようにデザインされた複数のバイナリを生成する。
[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] 図1bは、本明細書で説明される主題の態様による(リファレンスライブラリと呼ばれることもある)単一バイナリを生成するシステム109を示す。本明細書で説明される主題の態様によれば、ソースコード110などのソースコードが、変形コンパイラー112によって一度コンパイルされて、複数のターゲットプラットフォーム上で動作することが可能な単一バイナリ(例えばバイナリ115)を生成することができる。当該技術分野において知られているバイナリは、コード部分と、リソース又はデータを表す非コード部分とを含むことが可能である。バイナリ115は、バージョン非依存型コード及び/又はプラットフォーム非依存型コードを含んだバージョン非依存部分及び/又はプラットフォーム非依存部分114などの1又は複数の部分と、バージョン特有及び/又はプラットフォーム特有である1又は複数の部分(例えば、スマートフォン特有部分116a、タブレット特有部分116b、ゲーム機特有部分116c、デスクトップ特有部分116d、又は任意のデバイス特有部分n 116n)とを含むことが可能である。プラットフォーム特有部分は、リソース又はデータとしてラベル付けされることができる。単一バイナリ115は、複数の異なるプラットフォームへ配置されることが可能である。
[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] 同様に、バージョン特有及び/又はプラットフォーム特有なプラットフォーム抽象化レイヤー(図1bには不図示)が、バイナリのデータ部分から抽出されることができ、バージョン非依存部分及び/又はプラットフォーム非依存部分114に結合されることができる。本明細書で説明される主題のいくつかの態様によれば、単一バイナリ115は、コードの1又は複数のバージョン特有部分及び/又はプラットフォーム特有部分が再利用の標準ユニットとしてランタイムによって理解されるような方法で、生成される(例えば、バイナリはランタイムが認識するフォーマットで作成される)。
<適応的に移植性を有したライブラリ>
[0011] 図1cは、本明細書で開示される主題の態様による移植性のある単一の実行可能ファイルを生成するシステム121のブロック図を示す。図1cはまた、本明細書で説明される主題の態様による当該移植性のある実行可能ファイルの実行も示す。システム121の全て又は一部分は、図3に関して後述されるコンピューターなどの1又は複数のコンピューター若しくはコンピューティングデバイス上に存在することができる。システム121又はその一部分は、スタンドアロンのシステムとして、又はプラグイン若しくはアドインとして提供されることができる。システム121は、全体として、又は部分的に、図4に関して説明されるソフトウェア開発コンピューターなどのソフトウェア開発コンピューター上で実行することができる。システム121の全て又は一部分の上で、開発ツールが動作することができる。例えば、システム121の全て又は一部分は、例えば図4に関してより完全に説明されるIDE125などの、統合開発環境(IDE)内で実行することができ、又はIDEの外で実行することが可能である。
[0012] システム121は、コンピューティングデバイス122などの1又は複数のコンピューティングデバイス又はコンピューターを含むことができる。コンピューティングデバイス122は、プロセッサー142等のような1又は複数のプロセッサー、メモリ144などのメモリ、及び、単一のユニバーサルに移植性のある実行可能ファイルを生成するモジュール123などの1又は複数のモジュールを含むことが可能である。モジュール123によって代表された1又は複数のモジュールは、コンパイルチェーン124の一部分を構成することが可能である。モジュール123は、コンパイラー、コンパイラーのプリプロセッサー、コンパイラーのポストプロセッサー、又はそれらの任意の組み合わせの一部分であってよい。モジュール123等のような1又は複数のモジュールは、メモリ144にロードされて、プロセッサー142等のような1又は複数のプロセッサーに、モジュール123に起因する動作を実施させることが可能である、ということが認識されるだろう。
[0013] システム121は、限定ではないがスマートフォン、タブレット、デスクトップコンピューター、ゲーム機、又は任意の種類のコンピューティングデバイスを含む、1又は複数の他のコンピューター又はコンピューティングデバイスを含むことができる。これらのコンピューティングデバイスのそれぞれは、1又は複数のプロセッサー(不図示)、メモリ(不図示)、及び当該技術分野においてよく知られている他のコンポーネントを含むことができる。
[0014] ソースコードファイル134などのソースコードファイルは、プラットフォーム非依存型コード130などのプラットフォーム非依存型コードの1又は複数の部分を含むことができる。ソースコードファイル134はまた、プラットフォーム特有コード132等のようなプラットフォーム特有コードの1又は複数の部分も含むことができる。プラットフォーム特有コードの1又は複数の部分は、デバイス1 135、デバイス2 137、…デバイスn 139等のようなデバイス上で動作するように特化したコードを含むことが可能である。デバイス1 135、デバイス2 137、…デバイスn 139などのデバイスは、スマートフォン、タブレット、ゲーム機、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、又は、現在知られており若しくは将来生み出される任意の他のコンピューティングデバイスなどのデバイスを含むことが可能である。バージョン特有コード及び/又はプラットフォーム特有コードの1又は複数の部分は、特化した対象のデバイスのバージョン及び/又は種類を示す識別注釈を付されることが可能である。例えば、第1の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、スマートフォン又はスマートフォン用のあるバージョンのソフトウェアに特化していることを表すことができる。第2の注釈又は種類の注釈は、プログラムソースコードの注釈を付されたセクションが、タブレット又はタブレット用のあるバージョンのソフトウェア等に特化していることを表すことができる。使用されている特定の注釈は、バイナリを作成するのにどのコンパイラー又はどのバージョンのコンパイラーが用いられるかを制御することができる。
[0015] モジュール123は、ソースコードファイル134を受け取ることができ、コンパイルチェーン124の他のコンポーネントと協力して、プラットフォーム非依存型バイナリ126などのバージョン非依存型コード及び/又はプラットフォーム非依存型コードの1又は複数の部分と、例えばプラットフォーム特有バイナリ128等のようなバージョン特有コード及び/又はプラットフォーム特有コードの1又は複数の部分とを含む、単一バイナリ129を作成することが可能である。バージョン特有及び/又はプラットフォーム特有バイナリ128は、「ライトアップコード」を含むことが可能である。ライトアップコードは、あるプラットフォーム又はバージョンには存在するが別のプラットフォーム又はバージョンには存在しない1又は複数の機能を含むことができ、したがって、あるプラットフォーム又はバージョンのユーザーインターフェイスにおいて「ライトアップ」するが、別のプラットフォーム又はバージョンのユーザーインターフェイスにおいては「ライトアップ」しない。例えばプラットフォーム特有バイナリ128等のようなバージョン特有及び/又はプラットフォーム特有バイナリは、プラットフォーム非依存型バイナリ126に関連したデータなどのリソースとして指定されることが可能である。モジュール123等はまた、遭遇したそれぞれの種類のプラットフォーム特有コードの部分に対して、そのプラットフォームに関連したコードに基づいて抽象化レイヤー(例えばプラットフォーム特有インターフェイス)を生成することもできる。例えば、プラットフォーム特有バイナリ128などの第1のプラットフォーム特有バイナリが、抽象化レイヤー128aなどの第1のプラットフォーム特有抽象化レイヤーと関連付けられることができ、以下同様である。あるいはまた、標準的な条件付きコンパイル手法を用いてソースコードが複数回コンパイルされて、単一のマルチプラットフォームのバイナリを作成するようにポストコンパイル演算において結合されることの可能な、複数のプラットフォーム特有バイナリを生成することができる。
[0016] 同一のバイナリ、例えばバイナリ129が、複数の異なるプラットフォームへ配置されることが可能である。バイナリの配置先のデバイス上でソフトウェアが実行される時、当該デバイスのランタイム(例えば、ランタイム136、ランタイム138、又はランタイム140等)は、適切なプラットフォーム特有バイナリを使用し、それをプラットフォーム非依存型バイナリに結合して当該デバイス上で動作する実行可能ファイルを作成することが可能である。例えば、プラットフォーム非依存型バイナリ、バイナリAが、プラットフォーム特有バイナリ、バイナリBを使用すると想定されたい。実行時に、デバイスに適切なプラットフォーム特有バイナリBが、バイナリAと結合するためにランタイムによって選択されることができ、その結果得られる実行可能ファイルが、その後実行されることが可能である。異なるプラットフォームに加えて、異なるバージョンが同様に適応することができる、ということが認識されるだろう。結合時に選択されたプラットフォーム特有コードに基づいて、そのプラットフォームの適切なプラットフォーム抽象化レイヤーがランタイムによって実装されることが可能である。仮想マシン環境におけるマネージ言語(managed language)の文脈の中で説明されたが、本明細書に記載される概念はネイティブコード環境において適用されることが可能である、ということが認識されるだろう。ネイティブコード環境では、プラットフォーム非依存型コードは、作成するのがより難しい場合がある。
[0017] 図2は、複数の異なるプラットフォーム上で動作可能な単一バイナリを作成することができる方法200を示す。当該バイナリは、1又は複数の異なるプラットフォームへ配置されることが可能である。バイナリが実行される時、そのバイナリが配置されたデバイスのランタイムは、適切なプラットフォーム特有バイナリを決定して抽出し、それを結合してそのデバイス向けのプラットフォーム特有バイナリを生成することが可能である。したがって、同一のバイナリが、異なるデバイス上で動作した時に異なる結果を生じさせることが可能である。図2で説明される方法は、限定ではないが、図1b及び1cに関して説明されたようなシステムによって実施されることができる。方法200はあるシーケンスで実施される一連の処理を記載しているが、方法200は当該シーケンスの順序によっては限定されない、ということが理解されなければならない。例えば、いくつかの動作は、記載されたものとは異なる順序で行われてよい。加えて、ある動作が別の動作と同時に行われてよい。いくつかの実例では、全ての動作が実施されるのでなくてもよい。その上、異なるプラットフォームに関して説明されているが、以下に記載される処理は、異なるバージョンのソフトウェアの作成、生成、配置、及び実行に対しても同様に当てはまる、ということが認識されるだろう。
[0018] 処理201において、プラットフォーム非依存型ソースコードが、IDEのソースコードエディター又は他のソフトウェアツールによって受け取られることが可能である。処理202において、注釈を付されたソースコードが受け取られることが可能である。プラットフォーム特有であるソースコードは、そのソースコードが意図された対象のプラットフォームを識別するために、注釈を付されることが可能である。処理204において、1又は複数のプラットフォーム非依存部分と1又は複数のプラットフォーム特有部分の両方を含むソースコードが、単一バイナリにコンパイルされることが可能である。処理206において、当該バイナリのプラットフォーム特有部分が、データ若しくは非コードのリソースとしてラベル付け又は指定されて、プラットフォーム非依存型バイナリに付加されることが可能である。処理208において、バイナリが1又は複数の異なるプラットフォームへ配置されることが可能である。処理210において、当該バイナリの配置先であるデバイスのうちの1つのランタイムが、そのバイナリを実行する要求を受け取ることが可能である。ランタイムは、プラットフォーム非依存型バイナリに結合すべき適切なプラットフォーム特有部分を決定し抽出することが可能である。処理212において、抽出されたプラットフォーム特有部分が、プラットフォーム非依存型バイナリに結合されることが可能である。処理214において、バイナリがロードされることが可能であり、216において、バイナリが実行されることが可能である。
<適切なコンピューティング環境の例>
[0019] 本明細書で開示される主題の様々な態様のための文脈を提供するために、図3及び以下の議論は、本明細書で開示される主題の様々な実施態様が実装されることができる適切なコンピューティング環境510の簡潔で概略的な説明を提供するよう意図されている。本明細書で開示される主題は、1又は複数のコンピューター若しくは他のコンピューティングデバイスによって実行されるプログラムモジュールなどのコンピューター実行可能命令の一般的な文脈で説明されているが、当業者は、本明細書で開示される主題の一部分が、他のプログラムモジュール及び/又はハードウェアとソフトウェアの組み合わせと協力して実装されることも可能である、ということを認識するだろう。一般的に、プログラムモジュールは、特定のタスクを実施し又は特定のデータ型を実現するルーチン、プログラム、オブジェクト、物理的人工物、データ構造等を含む。通常、プログラムモジュールの機能性は、様々な実施態様において望まれるとおりに結合され又は分散されることができる。コンピューティング環境510は、適切な動作環境の一例に過ぎず、本明細書で開示される主題の使用又は機能性の範囲を限定するよう意図されてはいない。
[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] コンピューター512は通常、揮発性及び不揮発性媒体、リムーバブル及び非リムーバブル媒体などの様々なコンピューター可読媒体を含む。コンピューター可読媒体は、コンピューター可読命令、データ構造、プログラムモジュール、若しくは他のデータなどの情報の記憶のための任意の方法又は技術で実現されることができる。コンピューター可読媒体は、(コンピューター記憶媒体とも称される)コンピューター可読記憶媒体と通信媒体とを含む。コンピューター記憶媒体は、限定ではないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CDROM、デジタル多用途ディスク(DVD)又は他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶デバイスなどの、所望のデータを格納することが可能でありコンピューター512によってアクセスされることが可能な物理的な(有形の)媒体を含む。通信媒体は、限定ではないが、通信信号、変調搬送波、又は任意の他の一時的媒体などの、所望の情報を伝達するのに使用されることが可能でありコンピューター512によってアクセスされることが可能な一時的媒体を含む。
[0022] 図3は、ユーザーとコンピューターリソースとの間の仲介手段として働くことが可能なソフトウェアを説明するものであることが認識されるだろう。このソフトウェアは、ディスク記憶装置524に格納されることが可能でありコンピューター512のリソースを割り当てることが可能なオペレーティングシステム528を含むことができる。ディスク記憶装置524は、インターフェイス526などの非リムーバブルメモリインターフェイスを通じてシステムバス518に接続されたハードディスクドライブであってよい。システムアプリケーション530は、システムメモリ516又はディスク記憶装置524のいずれかに格納されたプログラムモジュール532とプログラムデータ534を通じて、オペレーティングシステム528によるリソースの管理を利用する。コンピューターは、様々なオペレーティングシステム又はオペレーティングシステムの組み合わせを用いて実装されることが可能である、ということが認識されるだろう。
[0023] ユーザーは、入力デバイス536を通じてコンピューター512にコマンド又は情報を入力することが可能である。入力デバイス536は、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイク、音声認識及びジェスチャ認識システム等のようなポインティングデバイスを含むが、これに限定はされない。これらの及び他の入力デバイスは、インターフェイスポート538を介しシステムバス518を通じて処理装置514に接続する。インターフェイスポート538は、シリアルポート、パラレルポート、ユニバーサルシリアルバス(USB)等を表すことができる。出力デバイス540は、入力デバイスと同じ種類のポートを使用することができる。出力アダプター542は、モニター、スピーカー、及びプリンターのような特定のアダプターを必要とするいくつかの出力デバイス540が存在することを示すために提供されている。出力アダプター542は、限定ではないが、出力デバイス540とシステムバス518との間の接続を提供するビデオカード及びサウンドカードを含む。他のデバイス及び/又はシステム、又はリモートコンピューター544などのデバイスは、入力と出力の両方の能力を提供することができる。
[0024] コンピューター512は、リモートコンピューター544などの1又は複数のリモートコンピューターへの論理的接続を用いて、ネットワーク環境で動作することが可能である。リモートコンピューター544は、パーソナルコンピューター、サーバー、ルーター、ネットワークPC、ピアデバイス、又は他の一般によくあるネットワークノードであってよく、図3にはメモリ記憶デバイス546のみが示されているが、典型的には、コンピューター512に関連して上述された要素の多く又は全てを含む。リモートコンピューター544は、通信接続550を介して論理的に接続されることが可能である。ネットワークインターフェイス548は、ローカルエリアネットワーク(LAN)及びワイドエリアネットワーク(WAN)などの通信ネットワークを包含するが、他のネットワークを含んでもよい。通信接続550は、ネットワークインターフェイス548をバス518に接続するために利用されるハードウェア/ソフトウェアを指す。通信接続550は、コンピューター512の内部にあっても外部にあってもよく、モデム(電話、ケーブル、DSL、及び無線)、ISDNアダプター、イーサネット(登録商標)カード等のような内部及び外部技術を含む。
[0025] 示されたネットワーク接続は単なる例であり、コンピューター間に通信リンクを確立する他の手段が用いられてよい、ということが認識されるだろう。当業者は、コンピューター512又は他のクライアントデバイスがコンピューターネットワークの一部として配備されることが可能である、ということを認識することができる。これに関して、本明細書で開示される主題は、任意の数のメモリ又は記憶装置、並びに任意の数の記憶装置又はボリュームにわたって生じる任意の数のアプリケーション及びプロセスを有する、任意のコンピューターシステムに関連することができる。本明細書で開示される主題の態様は、リモート又はローカル記憶装置を有しネットワーク環境に配備されたサーバーコンピューターとクライアントコンピューターを備えた環境に適用されることができる。本明細書で開示される主題の態様はまた、プログラミング言語の機能性、解釈、及び実行能力を有するスタンドアロンのコンピューティングデバイスに適用されることもできる。
[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] ユーザーは、IDE600のユーザーインターフェイス640とソースコードエディター651を介して、既知のソフトウェアプログラミング手法並びに特定のソース言語に関連した特有の論理的規則及び構文規則に従ってソースコードコンポーネントを作成及び/又は編集することが可能である。その後に、ソースコードコンポーネント610はソースコンパイラー620によってコンパイルされることが可能であり、それにより、アセンブリ630のようなプログラムの中間言語表現が作成されることができる。アセンブリ630は、中間言語コンポーネント650とメタデータ642を含むことができる。アプリケーションのデザインは、配備の前に検証されることが可能であってよい。
[0028] 本明細書で説明される様々な手法は、ハードウェア若しくはソフトウェアに関連して、又は、適切である場合には両者の組み合わせに関連して実装されることができる。したがって、本明細書で説明される方法及び装置、又は、それらのある態様若しくはある一部分は、フロッピーディスク(登録商標)、CD−ROM、ハードドライブ、又は任意の他の機械可読記憶媒体などの有形媒体に具現化されたプログラムコード(即ち命令)の形態をとることができ、このプログラムコードがコンピューターなどの機械にロードされてそれによって実行される時、当該機械は、本明細書で開示される主題の態様を実行するための装置となる。本明細書で用いられる際、「機械可読記憶媒体」という用語は、どんな形態であれ伝搬信号を提供(即ち、格納及び/又は伝送)するあらゆるメカニズムを排除するように解されなければならない。プログラム可能なコンピューター上におけるプログラムコードの実行の場合、コンピューティングデバイスは、一般に、プロセッサー、(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)当該プロセッサーによって読み取り可能な記憶媒体、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含むだろう。ドメイン固有プログラミングモデル態様の作成及び/又は実装を例えばデータ処理API等を通じて利用することのできる1又は複数のプログラムは、コンピューターシステムとやり取りするための高水準の手続き的又はオブジェクト指向のプログラミング言語で実装されることができる。しかしながら、このプログラムは、もし望まれるならば、アセンブリ言語又は機械語で実装されることが可能である。いずれにせよ、その言語は、コンパイル言語又は解釈言語であってよく、またハードウェア実装と組み合わせられてよい。
[0029] 構造的な特徴及び/又は方法論的行為に特有の言い回しで主題が説明されてきたが、添付された特許請求の範囲において定義される主題は必ずしも上述された特有の特徴又は行為に限定されるものではない、ということは理解されなければならない。それどころか、上述された当該特有の特徴及び行為は、特許請求の範囲を具体化する例示的な形として開示されているのである。

Claims (10)

  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のプラットフォーム向けの前記プラットフォーム特有部分をバイナリの前記プラットフォーム非依存部分に結合し、
    前記結合されたバイナリをロードする、
    ように構成される、デバイス。
JP2015518415A 2012-06-18 2013-05-28 適応的に移植性を有したライブラリ Active JP6122493B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/525,356 US10402208B2 (en) 2012-06-18 2012-06-18 Adaptive portable libraries
US13/525,356 2012-06-18
PCT/US2013/042791 WO2013191852A1 (en) 2012-06-18 2013-05-28 Adaptive portable libraries

Publications (3)

Publication Number Publication Date
JP2015524126A JP2015524126A (ja) 2015-08-20
JP2015524126A5 JP2015524126A5 (ja) 2016-06-30
JP6122493B2 true JP6122493B2 (ja) 2017-04-26

Family

ID=48916167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015518415A Active JP6122493B2 (ja) 2012-06-18 2013-05-28 適応的に移植性を有したライブラリ

Country Status (6)

Country Link
US (1) US10402208B2 (ja)
EP (1) EP2862066A1 (ja)
JP (1) JP6122493B2 (ja)
KR (1) KR102059705B1 (ja)
CN (1) CN104412229B (ja)
WO (1) WO2013191852A1 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9032379B2 (en) * 2013-06-21 2015-05-12 Oracle International Corporation Platform specific optimizations in static compilers
US9223550B1 (en) * 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
US9292270B2 (en) * 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US20160077831A1 (en) * 2014-09-11 2016-03-17 Microsoft Corporation Accurate and performant code design using memoization
US9977673B1 (en) * 2014-11-13 2018-05-22 Marvell International Ltd. Systems and methods for providing a platform-specific porting layer for multi-level software stacks
US9690552B2 (en) * 2014-12-27 2017-06-27 Intel Corporation Technologies for low-level composable high performance computing libraries
CN104503819A (zh) * 2015-01-05 2015-04-08 中国科学院计算技术研究所 一种面向异os的汇编器及汇编移植方法
US9529630B1 (en) 2015-01-21 2016-12-27 Pivotal Software, Inc. Cloud computing platform architecture
US10007500B1 (en) * 2015-01-21 2018-06-26 Pivotal Software, Inc. Cloud computing platform architecture
US10140104B2 (en) * 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
CN104978224B (zh) * 2015-07-06 2018-11-20 张兆琦 一种面向多硬件平台的应用程序管理方法
US10120661B2 (en) * 2015-07-16 2018-11-06 Sugarcrm Inc. Multi-flavored software execution from a singular code base
US9876852B2 (en) 2015-07-23 2018-01-23 Microsoft Technology Licensing, Llc Coordinating actions across platforms
US10180825B2 (en) * 2015-09-30 2019-01-15 Apple Inc. System and method for using ubershader variants without preprocessing macros
US11640284B2 (en) * 2015-11-30 2023-05-02 Oracle International Corporation Multi-platform compiling
JP6129376B1 (ja) * 2016-03-28 2017-05-17 株式会社ラック プログラム
US10740093B2 (en) 2016-09-01 2020-08-11 Dropbox, Inc. Advanced packaging techniques for improving work flows
US10289394B2 (en) * 2016-10-11 2019-05-14 Oracle International Corporation Selective generation of multiple versions of machine code for source code functions for execution on different processor versions and/or architectures
CN106445564B (zh) * 2016-12-23 2019-08-20 携程旅游网络技术(上海)有限公司 用于同平台具有不同编程语言项目的混合引用方法及系统
CN108614705B (zh) * 2017-02-07 2022-06-03 腾讯科技(深圳)有限公司 一种数据编译处理方法及终端
CN109213670A (zh) * 2017-06-30 2019-01-15 中兴通讯股份有限公司 实现白盒otn硬件设备的方法及装置、存储介质
US10579347B2 (en) 2017-11-03 2020-03-03 International Business Machines Corporation Self re-encoding interpreted application
CN108509200A (zh) * 2018-03-13 2018-09-07 中国银行股份有限公司 一种建立软件源代码与执行码之间关联的方法及装置
US10474479B1 (en) 2018-06-03 2019-11-12 Apple Inc. Preventing framework conflicts for multi-OS applications
US10705511B2 (en) * 2018-07-11 2020-07-07 Siemens Aktiengesellschaft Abstraction layers for automation applications
JP7001012B2 (ja) 2018-07-30 2022-01-19 オムロン株式会社 サポート装置およびサポートプログラム
CN110806891B (zh) * 2019-09-27 2023-09-19 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 嵌入式设备软件版本的生成方法及装置
CN111552480B (zh) * 2020-05-07 2021-06-25 深圳百斯特控制技术有限公司 跨平台编译方法、装置、设备及可读存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860006A (en) 1995-09-15 1999-01-12 Apple Computer, Inc. Processor independent network operating system loadable modules
JPH09190355A (ja) 1996-01-10 1997-07-22 Toshiba Corp プログラム変換方法
JP2000347875A (ja) 1999-04-23 2000-12-15 Sun Microsyst Inc ファイル移植技術
FR2801118B1 (fr) 1999-11-17 2001-12-21 Bull Cp8 Procede de chargement d'applications dans un systeme embarque multi-application, systeme embarque correspondant, et procede d'execution d'une application du systeme embarque
AR033549A1 (es) * 2000-08-07 2003-12-26 Diebold Inc Maquina automatica para operaciones bancarias, metodos para operarla y medio legible por computadora
US7346849B1 (en) * 2001-04-03 2008-03-18 Cypress Semiconductor Corp. Executable code derived from user-selectable links embedded within the comments portion of a program
US7210132B2 (en) 2002-05-30 2007-04-24 Microsoft Corporation Interoperability of objects between various platforms
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7725884B2 (en) * 2003-02-28 2010-05-25 Microsoft Corporation System and method for compiling markup files
US7275241B2 (en) 2003-11-21 2007-09-25 International Business Machines Corporation Dynamic instrumentation for a mixed mode virtual machine
US20060080680A1 (en) 2004-10-12 2006-04-13 Majid Anwar Platform independent dynamic linking
US7945902B1 (en) 2005-07-13 2011-05-17 Oracle America, Inc. Detection of non-standard application programming interface usage via analysis of executable code
US20070169010A1 (en) * 2005-10-31 2007-07-19 Dhi Technologies, Inc. Multiplatform programming environment
US9553947B2 (en) * 2007-07-18 2017-01-24 Google Inc. Embedded video playlists
US8266582B2 (en) * 2008-03-31 2012-09-11 Oracle America, Inc. Method for creating unified binary files
US8141056B2 (en) 2008-04-03 2012-03-20 International Business Machines Corporation Just-in-time dynamic instrumentation
US9009662B2 (en) * 2008-12-18 2015-04-14 Adobe Systems Incorporated Platform sensitive application characteristics
US8843920B2 (en) * 2009-09-15 2014-09-23 Advanced Micro Devices, Inc. Systems and methods for deferring software implementation decisions until load time
KR101623232B1 (ko) * 2010-03-24 2016-05-20 톰슨 라이센싱 네트워크의 서비스 품질을 감시하기 위한 방법 및 장치
US8645934B2 (en) 2010-05-06 2014-02-04 International Business Machines Corporation Simultaneous compiler binary optimizations
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming

Also Published As

Publication number Publication date
CN104412229A (zh) 2015-03-11
WO2013191852A1 (en) 2013-12-27
KR102059705B1 (ko) 2019-12-26
CN104412229B (zh) 2018-09-18
EP2862066A1 (en) 2015-04-22
US10402208B2 (en) 2019-09-03
KR20150024842A (ko) 2015-03-09
JP2015524126A (ja) 2015-08-20
US20130339928A1 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
JP6122493B2 (ja) 適応的に移植性を有したライブラリ
US8726255B2 (en) Recompiling with generic to specific replacement
US8707263B2 (en) Using a DSL for calling APIS to test software
US9430200B1 (en) Cross-library framework architecture feature sets
JP6294886B2 (ja) アプリケーション用の中間言語コードからネイティブコードを生成すること
US8239823B2 (en) Generating libraries for reflection without project compilation
US10540262B2 (en) Using edit and continue to dynamically set and unset optimizations in source code while debugging
US8302073B2 (en) Moving and copying dependencies along with source code
US9645912B2 (en) In-place function modification
CN106325970A (zh) 编译方法和编译系统
US20100242017A1 (en) Inferring missing type information for reflection
US10120655B2 (en) Seamless high performance interoperability between different type graphs that share a garbage collector
US20170017472A1 (en) Incremental interprocedural dataflow analysis during compilation
KR20130101037A (ko) 사용자 정의 유형을 위한 컴파일 타임 경계 검사
WO2016094258A1 (en) Inter-procedural type propagation for devirtualization
KR20170057264A (ko) 멀티 컨텍스트 지능형 지원 기능을 갖는 코드 개발 툴
CN101030241A (zh) 基于Keil C51的软件保护开发的方法和系统
US9141356B2 (en) Process for generating dynamic type
Wang et al. Draining the swamp: Micro virtual machines as solid foundation for language development
US20170083298A1 (en) Resilient format for distribution of ahead-of-time compiled code components
US9672020B2 (en) Selectively loading precompiled header(s) and/or portion(s) thereof
US9098317B2 (en) Optional retargeting of library references
US9612808B1 (en) Memory use for string object creation
Liang et al. An OpenMP programming environment on mobile devices
WO2022127263A1 (zh) 一种代码处理方法以及相关设备

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160511

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160511

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170214

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170302

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170331

R150 Certificate of patent or registration of utility model

Ref document number: 6122493

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250