JP4841118B2 - ソフトウェア開発インフラストラクチャ - Google Patents
ソフトウェア開発インフラストラクチャ Download PDFInfo
- Publication number
- JP4841118B2 JP4841118B2 JP2004178869A JP2004178869A JP4841118B2 JP 4841118 B2 JP4841118 B2 JP 4841118B2 JP 2004178869 A JP2004178869 A JP 2004178869A JP 2004178869 A JP2004178869 A JP 2004178869A JP 4841118 B2 JP4841118 B2 JP 4841118B2
- Authority
- JP
- Japan
- Prior art keywords
- type
- sda
- code
- software development
- compiler
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
- G06F8/437—Type checking
Description
BACON, "Fast and Effective Optimization of Statically Typed, Object-Oriented Languages", PhD thesis, Computer Science Division, University of California, Berkeley, 3 pages of introduction and pp. i-141, 1997. DEAN et al., "Optimizations of Object-Oriented Programs Using Static Class Hierachy Analysis", European Conference on Object-Oriented Programming, pp. 77-101, 1995. GAY et al., "Fast Escape Analysis and Stack Allocation for Object-Based Programs", Proceedings of the 2000 International Conference on Compiler Construction, 12 pages, 2000. MUELLER et al., "Avoiding Unconditional Jumps by Code Replications", Proceedings of the SIGPLAN '92 Conference on Programming Language Design and Implementation, pp. 322-330, June 1992. RUF, "Effective Synchronization Removal for Java", ACM SIGPLAN Conference on Programming Language Design and Implementation, pp.208-218, BC, Canada, 2000. KNOOP et al., "Partial Dead Code Elimination," In Proceedings of the ACM SIGPLAN '94 Conference on Programming Language Design and Implementation, 12 pages, June 1994.
本明細書に記載のターゲット実行アーキテクチャは、さまざまなハードウェアマシンまたは仮想マシンのいずれも含み得る。ターゲット実行アーキテクチャは、コードを実行するためのいかなる環境も含み得る。このようなターゲット実行アーキテクチャとしては、Intel(登録商標)x86、AMD、IPF、ARMおよびMIPSアーキテクチャ、ならびに以下で実装されるものを含む他のアーキテクチャが挙げられる。
本明細書に記載のソフトウェア開発ツールは、ソフトウェアを開発するために有用なさまざまなツールのいずれも含み得る。このようなツールとしては、ネイティブコードコンパイラ、ジャストインタイム(JIT)コンパイラ、デバッガ、シミュレータ、解析ツール、欠陥検出ツール、コンパイラ開発キット(CDK)およびオプティマイザが挙げられる。
数多くのソフトウェア開発シナリオのいずれも、SDAの機能に影響を及ぼし得る。例えば、特定のソフトウェア開発ツールに対するソフトウェア開発シナリオとしては、そのソフトウェア開発ツールがターゲットとされる種々のターゲット実行アーキテクチャ(例えば、IPF、X86、AMD、ARM等)が挙げられる。また、ソフトウェア開発シナリオは、実行されるコンパイルのタイプ(例えば、JITまたはネイティブ最適化コンパイラ)にも関係し得る。ソフトウェア開発シナリオは、解析、最適化、シミュレーション、デバッグ、コード生成等のタイプのような、ソフトウェア開発ツールによって実行される他の機能のタイプにも関係し得る。さらにもう1つのソフトウェア開発シナリオとして、ソフトウェア開発ツールが特別に設定され得る特定のプログラミング言語(例えば、JAVA(登録商標)、C++、C#等)に関係し得るものがある。このような言語は、異なる例外処理モデルを有することがある。さらに、ソフトウェア開発シナリオは、ツールがマネージド実行環境(例えば、Microsoft .NET Frameworkによって提供されるMicrosoft CLRの環境)で使用されるかどうかにも関係し得る。他のシナリオも可能である。
図1は、SDAを用いて複数のコンフィギュレーションのうちのいずれかにおける任意個数のコンポーネントを構築することにより、さまざまなソフトウェア開発ツールを構築するための基礎として使用されるSDAのブロック図を示している。コンポーネントのセット100は、任意のコンフィギュレーションにより使用可能なモジュールを表す。これらのモジュールは、SDAにより提供されるコア機能を用いて構築される。SDAコア100は、オブジェクトファイルまたはソースコードのセットとして提供されてもよい。SDAコア100は、複数のマネージドおよび/またはネイティブアプリケーションプログラムインタフェース102(API)を提示する。SDAコアおよびAPI102を取り囲む各ブロックは、SDAを用いて構築される可能なソフトウェア開発ツールを表す。これらのツールとしては、ネイティブコンパイラ104、Pre−JITコンパイラ106、JITコンパイラ108、最適化ツール110、欠陥検出ツール112、解析ツール114、およびコンパイラ開発キット(CDK)116が挙げられる。
マシンモデル − アブストラクション(抽象化)のリターゲティング
本明細書に記載のSDAを用いて作成されたソフトウェア開発ツールの迅速なリターゲティングをサポートするため、SDAコアはターゲット不問部分とターゲット仕様部分に分割される。可能な限り、共通のターゲット仕様コードをターゲット不問SDAに組み入れるとともに、情報を取得し、または変換を実行するためのターゲット仕様コードへの呼出しを設ける。単なる一例であるが、以下のセクションでは、SDAコアの一実施形態の実装の詳細を説明する。代替的なSDAコアとして、以下の、または他の特徴のいかなる組合せを使用するものもあり得る。
マシンレジスタファイルにAPI経由でアクセスすることにより、レジスタファイル(例えば、汎用、浮動小数点、プレディケート)の個数を問い合わせ、どのマシンタイプ(例えば、int32,float64、MMX)を処理することができるかを判定し、マシンレジスタ(例えば、EAX、r0、p3)を表すオブジェクトを取得することができる。レジスタオブジェクトは、レイアウト(Layout)クラスから導出され、以下の情報を追加することができる:データフロー等の内部列挙番号;テキスト文字列によるレジスタ名;アトリビュート;バイナリエンコーディング;拡張性オブジェクト。
マシンオペコードテーブルにAPI経由でアクセスすることにより、オペコード(オペラーションコード)の個数を問い合わせ、オペコード(例えば、ADD、MOVZX)を表すオブジェクトを取得することができる。オペコードオブジェクトは、以下の情報をカプセル化することができる:内部オペコード列挙、テキスト文字列によるオペコード名、アトリビュート、および拡張性オブジェクト。
呼出し規約は、ローレベル化(lowering)フェーズ(相、段階)によって明示的にすることができ、ターゲット不問フレームワークにおけるアプリケーションバイナリインタフェース(ABI)仕様のコールバックを通じて実装することができる。このフレームワークは、パラメータをレジスタに割り付けることや、レジスタオペランドをメモリオペランドに降格(demote)させること(スタック渡しのために)等のような共通のアクションのためのサブルーチンを含むことができる。
種々の例外処理(EH)モデルをターゲット不問な形で実装することができる。ただし、マシンモデルの問合せおよびコールバックをターゲット仕様コードに組み込むことが必要である。例外処理については、後で別のセクションでさらに詳細に説明する。
本実施形態では、コード生成は、命令選択/ローレベル化、intrinsic(組み込み)/switch(切り替え)/question(問合せ) op展開、および命令合法化からなる。レジスタ割付けおよびスケジューリングは、別個のフェーズとみなすことができる。コード生成については、後で別のセクションでさらに詳細に説明する。
エンコーディングは、コンパイラIR(中間表現)をバイナリマシンコードに翻訳するプロセスである。作り出されたターゲット仕様コードで生じる大量の仕事を伴うエンコーディングのためのマシン不問フレームワークがあり得る。
スケジューリングテーブルは、大域(グローバル)および局所(ローカル)スケジューリングにおいて使用可能である。マシンスケジューリングテーブルは、各マシン命令によって要求される命令レイテンシ(待ち時間、呼び出し時間)および機能ユニットを含むことができる。テーブルは、コード生成で使用されるリターゲティングツールにより生成することができる。
逆アセンブリは、コード生成ファイルによって駆動されることが可能である。逆アセンブリは、共通インタフェースを用いたリンカー(linker)およびデバッガにより共有されるDLL(動的リンクライブラリ)として実装することができる。
関数プロローグ(序文)およびエピローグ(結び文)は、ターゲット不問フレームワークにおいてターゲット仕様コールバックを用いて生成することができる。プロローグは以下の項目の一部または全部を含み得る:フレームポインタ初期化;スタックアラインメント;スタック割付け;不揮発性レジスタセーブ;例外処理構造体初期化;ランタイムチェックおよび初期化。エピローグは以下の項目の一部または全部を含み得る:不揮発性レジスタリストア;スタック割付け解除;フレームポインタ復元;ランタイムチェック。関数ごとに、局所ポインタおよびパラメータポインタという2つのフレームポインタが存在する可能性がある。これらはマシン依存および関数依存であり得る。
クロスターゲティングシナリオでは、SDAがエンディアンネス(edianness:バイトの並び順の種類)を認識している必要がある。仕様は、ターゲット実行アーキテクチャのエンディアンネスを記述することができる。それに応じて、エミッションルーチン(emission routine)は、このエンディアンネスを守るように設計することができる。
仕様は、スタックのアラインメントおよび伸長方向の情報を含むことができる。スタック割付けパッケージは、最大所要局所アラインメントおよび使用される全スタック空間の計算を担当することができる。さらに、スタックパッキング最適化を使用しない場合、スタックオフセットを局所変数に割り付けることができる。
IRに対する型システム(型体系)は多くの重要な目的に役立つ。これについては、後で別のセクションでさらに詳細に説明する。
関数(Function)またはメソッド(Method)オブジェクトは、単一の手続きを構成するコードを記述することができる。以下の属性が、関数オブジェクトを記述する際に考慮され得る:
1)関数ID:メソッドの一意的識別子。
2)関数名
3)返値の型
4)呼出し規約
5)関数シグネチャまたは引数リスト
6)例外情報
関数は、不連続にレイアウトされる項目を含むことができる。それに従って、例外情報や、関数のレイアウトに従う情報を有するその他のデータ構造を修正することができる。
本実施形態では、関数とメソッドを区別することは必要でないかもしれない。これは単に、クラス階層が導入される場合の用語の相違であり得る。
クラス(Class)オブジェクトは、そのクラスに属するすべての関数またはメソッドのためのコンテナであり得る。以下の属性が、クラスオブジェクトを記述することができる:
1)クラス名
2)サイズ
3)関数のリスト
4)仮想呼出しテーブルを含むデータメンバに対する型/レイアウト情報
本明細書に記載のSDAの構成可能性および拡張性と、コンポーネントを結合するための統一的メカニズムを提供することが望ましいことから、ハードコーディングよりもデータによってフェーズ制御を提供することができる。フェーズ順序は、フェーズオブジェクトのリストを生成することによって指定することができる。フェーズリストは、コンフィギュレーション、マシンターゲット、およびユーザ拡張性によって変更され得る。
メインドライバは、SDAおよびアタッチされている拡張性モジュールを初期化することを担当する。起動時に、(主としてフェーズリストを設定する)コンパイラコンフィギュレーションに従って、種々のシステムパッケージを初期化することができる。次に、ターゲット仕様の初期化を実行することができる(これは、拡張性機能を提供してもよい)。次に、拡張性モジュールを初期化することができる(これは、フェーズリストを変更し、種々のデータ構造にアタッチすること等が可能である)。この時点で、コマンドラインプロセッサを呼び出してもよい。最後に、エラーが生じなかった場合、コンパイルマネージャ(これはコンフィギュレーション依存であってもよい)が制御をとることができる。
本明細書に記載のツールのコンポーネントを作成するためのSDAの一実施形態では、ツールの実行全体の期間中におけるメモリ内のユーザプログラムを表現するための、単一の共通IRフォーマットが提供される。IRフォーマットは、ハイレベルのマシン非依存オペレーションから、ローレベルのターゲットマシンコードまでのさまざまなコードを、単一の統一された形式を用いて表すことができる。図5は、SDAを用いて作成されたコンパイラにおける例示的なコンパイルプロセスのブロック図を示している。このコンパイラは、複数の言語を入力とし、複数の言語を出力とし、複数の実行アーキテクチャをターゲットとすることができる。
SDAの実施形態の例示的なIRは、型付きのタプルの線形ストリームとして実装することができる。各タプルは、入力オペランドのセット(ソースリスト)、演算子、および出力オペランドのセット(デスティネーションリスト)を有することができる。副作用(例えばすべての副作用)は、実または暗黙のレジスタuse/defおよびシンボルuse/defの情報を含めて、命令に対して明示的であり得る。間接演算子(indirection)には干渉情報がアタッチされる。
オペランドは、命令のリーフノード(leaf node)であること、ならびに、命令のソースリストおよびデスティネーションリストに現れることが可能である。すべての副作用を命令に対して明示的にすることができるので、オペランドは、即値、レジスタ、メモリ、および条件コードを含む、一部または全部の、実際のまたは潜在的な、リソース使用を記述するために存在する。各リーフノードは、その抽象型を表す関連する型を有することができる。これはさらに、ローレベル化された命令に対するマシンタイプにマッピングされる。
レジスタオペランドは、実際の物理レジスタまたは仮想レジスタのいずれかを指定することができる。
一時オペランドは次の2つの形式の一方をとり得る:1)式一時変数(すなわちtemp reg)は、式中で使用される単一def、単一useの一時変数であり得る;または2)一般一時変数(すなわちtemp var)は、questionOp、CSE、スカラー置換、およびインダクション変数等のためにコンパイラによって導入されることが可能であり、複数のdefおよびuseを有することができる。
物理レジスタは、実際のマシンレジスタである。これには、整数、浮動小数点、マルチメディア、ベクトル、および専用レジスタがある。
名前付きレジスタは、物理マシンレジスタの候補であるか、または物理マシンレジスタに割り付けられたユーザ変数であり得る。
メモリオペランドは、メモリまたは抽象メモリに格納される値を指定することができる。抽象メモリは、明示的な干渉計算のために使用可能である。
名前付きメモリは、メモリに格納されているユーザ変数を指定することができる。
ベクトルメモリは、ベクトル演算のベクトルオペランドにおいて使用され得る。
メモリ間接演算は、任意のターゲットマシン上で最も強力なアドレスモードを表すことが可能である。間接演算は、干渉情報を含んでもよい。
抽象メモリは、直接参照による以外の、明示的なメモリuse/def副作用の注釈(すなわち干渉情報)を命令に付けるために使用され得る。
アドレスオペランドは、コードまたはデータの位置を指定することができる。
有効メモリアドレスオペランドは、任意のターゲットマシン上で最も強力なアドレスモードを表すことが可能である。
データアドレスは、データにアクセスするために使用される有効アドレスの単純な形式であり得る。
コードアドレスは、非局所コードのために使用される有効アドレスの単純な形式であり得る。
ラベルは、局所コードのために使用される有効アドレスの単純な形式であり得る。
IRは、条件コードのための抽象概念を使用することができる。
レジスタセットは、killセットおよび副作用を表現するために使用可能である。
即値オペランドは、命令に現れ得る既知の値を指定することができる。この値は、常にコンパイラに既知であることもあり、あるいは、ローレベル化、リンク、およびロード状態を含む後の段階でのみ決定されることもある。
整数即値は、最大整数サイズに正規化され得る。
浮動小数点即値は、内部/ポータブル形式に正規化され得る。
シンボリック即値は、コンパイラによって計算され、あるいはおそらくはリンカーによって/ランタイム時に修正される定数値を表現するシンボルであり得る。
演算はいくつかのカテゴリに分けることができる。これらのカテゴリは、以下のように、異なる可変サイズの種類の命令にグループ分けあるいは分解することができる:
・算術演算
・オーバーフロー付き算術演算
・論理演算
・ポインタ演算
・構造体演算
・オブジェクト演算
○割付け
○呼出し(仮想、インスタンス)
○フィールドアクセス/更新
・配列演算
○割付け
○読み書き
○境界チェックなしの読み書き
○長さ演算
・ベクトル演算
・分岐演算
・呼出し演算
・組み込み (intrinsic)呼出し演算
・復帰演算
・スイッチ(switch)演算
・例外演算
・型変換(動的/静的キャスト)
・型テスト演算
・セキュリティ演算
・スレッド化(threading)演算
・同期演算
・チェック演算
○ヌルポインタ(null pointer)チェック演算
○境界チェック演算
○型テスト演算
・アウトライン擬似演算
・データ演算
フローグラフが存在する場合、特別のブロック擬似命令が、基本ブロックの開始および終了を表すことができる。
ラベルは、ユーザが定義しても、コンパイラが生成してもよい。
プラグマ(pragma)は、ユーザが定義しても、コンパイラが生成してもよい。
注釈は、ユーザが定義しても、コンパイラが生成してもよい。通常、注釈は、ネイティブコンパイラおよびJITコンパイラがコード品質を改善するために使用可能な追加的な意味情報を伝える。
リストIRノードは、制御命令によって指定されるフロー内のリンクを作成するために使用される補助ノードであり得る。
分岐リストノードは、ラベルにアタッチされ、すべての到達する分岐を表すことができる。
ケース(case)リストノードは、スイッチ演算にアタッチされ、すべてのケース値および分岐を表すことができる。
あらゆる命令が、ソース行およびカラム情報を記述するデバッグ情報を持つことができる。コードを展開/ローレベル化する場合または最適化を行う場合、この情報は、デバッグ目的で維持されることが可能である。
IRは、IRの種々の形式における一貫性をチェックするための型の表現も含むことができる。具体的には、型付き言語および型なし言語、ゆるく型付けされた言語および強く型付けされた言語、ならびにガーベジコレクション(メモリ整理)のある言語およびガーベジコレクションのない言語等の複数のソース言語で書かれたプログラムを表現する際に使用するのに適した、型付けされた中間言語を提供することができる。さらに、プログラムコンポーネントのためのソース言語および/またはコンパイル段階に応じて、異なる型および型チェックルールの使用を可能にする型チェッカアーキテクチャをSDAにおいて提供することができる。
a = 80;
cout << (char)a;
SDAとともに使用するための本明細書に記載のIRは、C++、Microsoft CLR、およびMicrosoft Windows(登録商標)の構造化例外処理(SEH)のような、さまざまな言語固有の例外処理モデルをサポートすることができる。
SDAを用いて任意個数の実行アーキテクチャに対するソフトウェア開発ツールを生成するために、SDAは、共通IRから任意個数のマシン依存表現を生成することが可能なコードジェネレータを含むことができる。図12に、このようなコード生成のためのシステムの一実施形態を示す。この例では、ターゲット仕様データを有するターゲット実行アーキテクチャ仕様1200がリターゲティングツール1202に供給される。別法として、仕様1200、およびターゲット不問データを有する第2の仕様1204が、リターゲティングツール1202に供給されることも可能である。
SDAのもう1つの実施形態では、SDAコアデータ構造を拡張可能なように構成する方法およびシステムが提供される。SDAコアデータ構造の拡張フィールドは、ソフトウェア開発シナリオ、SDAのどのコンフィギュレーションが構築されているか、あるいはターゲットソフトウェア開発ツールの個別の所望の特性に応じたその他の要因に依存してもよい。図14Aは、コアフレームワークを拡張することによってツールを構築するためにコアクラス定義を拡張する全体的プロセスを示している。まず、1402で、拡張(エクステンション)を指示するデータを受け取り、1404で、エクステンションによって指示されるように、ソフトウェア開発ツールのクラスを拡張する。
図20は、本明細書に記載の技術のコンピュータソフトウェア成果物(deliverable)のブロック図である。ソフトウェア成果物2000はSDA2002を含む。SDA2002は、本明細書に記載のIR、例外処理モデル、型システム、コードジェネレータ、またはコアデータ構造拡張技術の1つまたは複数を実装するためのソースコードまたはオブジェクトを含むことができる。SDA2002は、任意個数のソフトウェア開発シナリオにおいて、さまざまなソフトウェア開発ツールのいずれかを生成するように構成されることが可能である。そのコンフィギュレーションとしては、以下のものに限定されないが、ネイティブコンパイラコンフィギュレーション2004、JITコンパイラコンフィギュレーション2006、Pre−JITコンパイラコンフィギュレーション2008、解析ツールコンフィギュレーション2010、欠陥検出コンフィギュレーション2012、オプティマイザコンフィギュレーション2014、またはCDKコンフィギュレーション2016が挙げられる。
SDAに対して定義されるコアクラスが拡張可能であるので、IRフォーマット自体も拡張可能である。例えば、新しいクラスメンバをコアクラスに追加し、IRフォーマットで表現することができる。このような構成は、スケーラビリティの目的上、有益となり得る。例えば、JITコンパイラのために(例えばパフォーマンスの理由から)軽量(ライトウェイト)データ構造を使用することが望ましい場合がある。他方、全プログラムの最適化コンパイラのためには、より包括的なデータ構造が適切な場合がある。
ソフトウェア開発シナリオ非依存性は、さまざまな方法で示すことができる。例えば、1つまたは複数のソフトウェア開発シナリオに関する非依存性である。例えば、実装は、プログラミング言語(例えば入力言語)、ソフトウェア実行アーキテクチャ(例えば、プロセッサまたは仮想マシン)、例外処理モデル、マネージドコードシナリオ等、またはそれらの任意の組合せから非依存であり得る。
図25は、SDAの一実施形態のためのオペレーティング環境として作用するコンピュータシステムの一例を示している。コンピュータシステムとしてはパーソナルコンピュータ2520があり、これは処理ユニット2521、システムメモリ2522、およびシステムメモリを含む種々のシステムコンポーネントを処理ユニット2521と相互接続するシステムバス2523を含む。システムバスは、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む、いくつかのタイプのバス構造のいずれを備えてもよい。バス構造が使用するバスアーキテクチャとしては、いくつか例を挙げれば、PCI、VESA、マイクロチャネル(MCA)、ISAおよびEISA等がある。システムメモリは、読み出し専用メモリ(ROM)2524およびランダムアクセスメモリ(RAM)2525を含む。起動中等にパーソナルコンピュータ2520内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入出力システム2526(BIOS)がROM2524に格納される。パーソナルコンピュータ2520はさらに、ハードディスクドライブ2527、磁気ディスクドライブ2528(例えばリムーバブルディスク2529の読み書きを行う)、および光ディスクドライブ2530(例えば、CD−ROMディスク2531の読み出し、または他の光媒体の読み書きを行う)を含む。ハードディスクドライブ2527、磁気ディスクドライブ2528、および光ディスクドライブ2530は、それぞれハードディスクドライブインタフェース2532、磁気ディスクドライブインタフェース2533、および光ドライブインタフェース2534によりシステムバス2523に接続される。ドライブおよびそれらに関連するコンピュータ可読媒体は、パーソナルコンピュータ2520のためのデータ、データ構造、コンピュータ実行可能命令(ダイナミックリンクライブラリ、および実行可能ファイルのようなプログラムコード)等の不揮発性ストレージを提供する。上記のコンピュータ可読媒体の記載では、ハードディスク、リムーバブル磁気ディスクおよびCDに言及しているが、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ベルヌーイカートリッジ等のような、コンピュータで読むことができる他のタイプの媒体も含み得る。
以上、例示的な実施形態の原理について図示し説明したが、当業者には明らかなように、実施形態は、このような原理から逸脱することなく、構成および細部において変更可能である。
102 マネージドおよび/またはネイティブアプリケーションプログラムインタフェース(API)
104 ネイティブコンパイラ
106 Pre−JITコンパイラ
108 JITコンパイラ
110 最適化ツール
112 欠陥検出ツール
114 解析ツール
116 コンパイラ開発キット(CDK)
300 SDA
302 仕様
304 コンポーネント
306 ツール
700 ソースコード
702 HIR
704 MIR
706 LIR
708 型チェッカ
710 ルールセット
800 型チェッカ
802,804,806,808 ルールセット
810,812 プログラムモジュール
905〜908 ソース言語
910〜913 中間言語(IL)表現
920 ILリーダ
930 IR
940 コンパイラバックエンド
1110 ソース言語グループ
1130 CIL
1135,1145 ILリーダ
1160 バックエンド
1200,1204 仕様
1202 リターゲティングツール
1206 トークン化文法
1208 パーサ文法
1210 Cソースおよびヘッダファイル
1212 lexコンパイラ
1214 ソースコードおよびヘッダファイル
1216 yaccコンパイラ
1218 共通フレームワークのソースコードおよびヘッダファイル
1220 ソースコード
1222,1224 コンパイラ
1510 コアフレームワークファイル
1520,1530,1540 エクステンション
1550 コアコンパイラフレームワーク
1560,1570,1580 エクステンション
1710 エクステンションの定義
1720 コアクラス定義
1730 ODLプリプロセッサ
1740 ソースコード表現
1750 ソースコードコンパイラ
1760 コアソフトウェアプログラムのカスタマイズされた拡張バージョン
1925,1930 ODLプリプロセッサ
1935,1940 ヘッダファイル
1945,1950 ソースコードコンパイラ
1955 コアクラス定義を含むコンピュータ実行可能ファイル
1960 クラスエクステンション定義を含むコンピュータ実行可能ファイル
1970 リンク
2000 ソフトウェア成果物
2002 SDA
2004 ネイティブコンパイラコンフィギュレーション
2006 JITコンパイラコンフィギュレーション
2008 Pre−JITコンパイラコンフィギュレーション
2010 解析ツールコンフィギュレーション
2012 欠陥検出コンフィギュレーション
2014 オプティマイザコンフィギュレーション
2016 CDKコンフィギュレーション
2018 コンポーネント
2020 ターゲット実行アーキテクチャに関連するデータ
2022 クラス拡張宣言のセット
2024 ターゲットソフトウェア開発ツールの入力言語に関連するデータ
2026 型ルールセット
2100 ソフトウェア成果物
2102 SDA
2104 コンポーネント
2106 x86に関連するデータ
2108 クラス拡張宣言のセット
2110 入力言語C++に関連するデータ
2112 ルールセット
2114 オプティマイザ
2200 ソフトウェア成果物
2210 SDA
2220 ソフトウェア開発コンポーネント
2230 ソフトウェア開発ツール
2300 ソフトウェア開発ツール
2310 SDA
2320 コンポーネント
2330 ソフトウェア開発ツールの修正バージョン
2400 第1のソフトウェア開発ツール
2410,2430 SDA
2420 コンポーネント
2440 第2のソフトウェア開発ツール
2520 パーソナルコンピュータ
2521 処理ユニット
2522 システムメモリ
2523 システムバス
2524 読み出し専用メモリ(ROM)
2525 ランダムアクセスメモリ(RAM)
2526 基本入出力システム(BIOS)
2527 ハードディスクドライブ
2528 磁気ディスクドライブ
2529 リムーバブルディスク
2530 光ディスクドライブ
2531 CD−ROMディスク
2532 ハードディスクドライブインタフェース
2533 磁気ディスクドライブインタフェース
2534 光ドライブインタフェース
2535 オペレーティングシステム
2536 アプリケーションプログラム
2537 他のプログラムモジュール
2538 プログラムデータ
2540 キーボード
2542 マウス
2546 シリアルポートインタフェース
2547 モニタ
2548 ビデオアダプタ
2549 リモートコンピュータ
2550 メモリストレージデバイス
2551 ローカルエリアネットワーク(LAN)
2552 広域ネットワーク(WAN)
2553 ネットワークインタフェース(アダプタ)
2554 モデム
Claims (1)
- ソース言語で記述されたプログラムモジュールをコンパイルするためのコンパイラシステムであって、
プログラムモジュールを型チェックするための複数のルールセットと、
ソフトウェア開発シナリオ非依存の中間言語を表現する手段であって、該中間表現はレベルを有し、該中間表現のレベルは、ハイレベル、ミドルレベル、またはローレベルである、中間言語表現手段と、
前記複数の異なるソース言語の型表現を表す型システムであって、
前記ソース言語で記述されたプログラムモジュールが、ソース言語から前記ハイレベル中間表現に変換されたとき、型チェッカがルールセットに従ってハイレベル中間表現を型チェックし、
前記ソース言語で記述されたプログラムモジュールが、前記ハイレベル中間表現から前記ミドルレベル中間表現に変換されたとき、型チェッカがルールセットに従って前記ミドルレベル中間表現を型チェックし、
前記ソース言語で記述されたプログラムモジュールが、前記ミドルレベル中間表現から前記ローレベル中間表現に変換されたとき、型チェッカがルールセットに従って前記ローレベル中間表現を型チェックし、
前記ルールセットは、ソース言語、中間表現のレベル又は型付けの強さに基づいて選択される
型システムと、
複数の実行アーキテクチャをターゲットとするコードを生成するコードジェネレータと
を備え、
前記コードジェネレータは、前記複数の異なるソース言語に対する複数のプログラミング言語固有の例外処理をサポートすることが可能なコードを生成する、
ことを特徴とするコンパイラシステム。
Applications Claiming Priority (12)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/609,275 | 2003-06-26 | ||
US10/609,275 US7120898B2 (en) | 2003-06-26 | 2003-06-26 | Intermediate representation for multiple exception handling models |
US10/607,591 US7685581B2 (en) | 2003-06-27 | 2003-06-27 | Type system for representing and checking consistency of heterogeneous program components during the process of compilation |
US10/607,591 | 2003-06-27 | ||
US10/610,692 | 2003-06-30 | ||
US10/610,692 US7559050B2 (en) | 2003-06-30 | 2003-06-30 | Generating software development tools via target architecture specification |
US10/625,892 US7146606B2 (en) | 2003-06-26 | 2003-07-22 | General purpose intermediate representation of software for software development tools |
US10/625,892 | 2003-07-22 | ||
US10/626,251 | 2003-07-23 | ||
US10/626,251 US7305666B2 (en) | 2003-07-23 | 2003-07-23 | Description language for an extensible compiler and tools infrastructure |
US10/628,054 US7707566B2 (en) | 2003-06-26 | 2003-07-25 | Software development infrastructure |
US10/628,054 | 2003-07-25 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005050312A JP2005050312A (ja) | 2005-02-24 |
JP4841118B2 true JP4841118B2 (ja) | 2011-12-21 |
Family
ID=33425848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004178869A Expired - Fee Related JP4841118B2 (ja) | 2003-06-26 | 2004-06-16 | ソフトウェア開発インフラストラクチャ |
Country Status (5)
Country | Link |
---|---|
US (1) | US7707566B2 (ja) |
EP (1) | EP1491999A3 (ja) |
JP (1) | JP4841118B2 (ja) |
KR (1) | KR101150003B1 (ja) |
CN (1) | CN1664779B (ja) |
Families Citing this family (82)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7299225B2 (en) * | 2002-11-26 | 2007-11-20 | International Business Machines Corporation | High performance predicate push-down for non-matching predicate operands |
US7051322B2 (en) | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7516459B2 (en) * | 2004-02-20 | 2009-04-07 | Intel Corporation | Methods and apparatus to optimize managed application program interfaces |
EP1615127B1 (en) * | 2004-07-06 | 2015-04-22 | Comptel Corporation | Data processing in a mediation or service provisioning system |
US20060031819A1 (en) * | 2004-08-06 | 2006-02-09 | Microsoft Corporation | Methods and apparatus for creating solutions |
US7770159B2 (en) * | 2004-10-20 | 2010-08-03 | Microsoft Corporation | Virtual types |
KR100683853B1 (ko) * | 2005-02-04 | 2007-02-16 | 삼성전기주식회사 | 프리 컴파일링 장치 |
US7406683B2 (en) * | 2005-03-02 | 2008-07-29 | Cisco Technology, Inc. | System and method providing for interaction between programming languages |
US7500230B2 (en) * | 2005-03-25 | 2009-03-03 | Microsoft Corporation | Raising native software code |
US8549466B2 (en) * | 2005-07-15 | 2013-10-01 | Texas Instruments Incorporated | Tiered register allocation |
US7620938B2 (en) | 2005-10-31 | 2009-11-17 | Microsoft Corporation | Compressed program recording |
US7353504B2 (en) * | 2005-12-09 | 2008-04-01 | Bea Systems, Inc. | System and method for efficiently generating native code calls from byte code in virtual machines |
CN100451954C (zh) * | 2005-12-29 | 2009-01-14 | 吉林大学 | 框架定制的模型驱动软件生成方法 |
US20070250820A1 (en) * | 2006-04-20 | 2007-10-25 | Microsoft Corporation | Instruction level execution analysis for debugging software |
US7631014B2 (en) * | 2006-04-27 | 2009-12-08 | International Business Machines Corporation | Method and apparatus for fast deletion of physically clustered data |
JP2007304840A (ja) * | 2006-05-11 | 2007-11-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム |
US7844978B2 (en) * | 2006-06-02 | 2010-11-30 | International Business Machines Corporation | Artifact management for an extensible runtime environment |
US20070288883A1 (en) * | 2006-06-09 | 2007-12-13 | International Business Machines Corporation | Method for consolidated launching of multiple tasks |
US8302073B2 (en) * | 2006-06-15 | 2012-10-30 | International Business Machines Corporation | Moving and copying dependencies along with source code |
US7870536B2 (en) * | 2006-06-15 | 2011-01-11 | International Business Machines Corporation | Computer implemented method and system for sharing resources among hierarchical containers of resources |
US20080059949A1 (en) * | 2006-09-01 | 2008-03-06 | Sap Ag | System and method for implementing a safe framework |
US8079027B2 (en) * | 2006-09-08 | 2011-12-13 | Via Technologies, Inc. | Programming language translation systems and methods |
US8584109B2 (en) | 2006-10-27 | 2013-11-12 | Microsoft Corporation | Virtualization for diversified tamper resistance |
US8209662B2 (en) * | 2006-12-04 | 2012-06-26 | Microsoft Corporation | Application retargeting |
US8613080B2 (en) | 2007-02-16 | 2013-12-17 | Veracode, Inc. | Assessment and analysis of software security flaws in virtual machines |
US8141049B2 (en) * | 2007-03-14 | 2012-03-20 | Nec Laboratories America, Inc. | System and method for scalable flow and context-sensitive pointer alias analysis |
WO2008110411A1 (en) * | 2007-03-14 | 2008-09-18 | International Business Machines Corporation | Automatic formatting of computer program source code |
US8484629B2 (en) * | 2007-05-24 | 2013-07-09 | Microsoft Corporation | Programming model for modular development |
US7917887B2 (en) * | 2007-06-28 | 2011-03-29 | Microsoft Corporation | DDEX (data designer extensibility) default object implementations for software development processes |
US8166455B2 (en) * | 2007-06-28 | 2012-04-24 | Yahoo! Inc. | Desktop application factory and application templates |
KR100928895B1 (ko) * | 2007-10-16 | 2009-11-30 | 씨에스캠 주식회사 | 제어시스템 개발을 위한 툴생성장치 |
EP2071452A1 (en) * | 2007-12-07 | 2009-06-17 | Alcatel Lucent | Device and method for automatically building applications from specifications and from off-the-shelf components selected by semantic analysis |
US8352906B2 (en) * | 2007-12-28 | 2013-01-08 | Cadence Design Systems, Inc. | Method, system, and computer program product for implementing external domain independent modeling framework in a system design |
CN101482845B (zh) * | 2008-01-08 | 2011-08-10 | 国际商业机器公司 | 一种调用即时调试器的方法和系统 |
US8181167B2 (en) * | 2008-01-09 | 2012-05-15 | Kan Zhao | Method and system for presenting and analyzing software source code through intermediate representation |
US20090210853A1 (en) * | 2008-02-19 | 2009-08-20 | Anand Kumar | Systems and apparatus for software development |
US20090276730A1 (en) * | 2008-03-04 | 2009-11-05 | Alexandre Aybes | Techniques for navigation of hierarchically-presented data |
KR101019688B1 (ko) * | 2008-04-24 | 2011-03-07 | (주)아이엠시티 | 고레벨 언어 기반 임베디드 시스템 |
US8689195B2 (en) * | 2008-06-03 | 2014-04-01 | International Business Machines Corporation | Identifying structured data types as requiring designated initializers |
US20100030598A1 (en) * | 2008-08-01 | 2010-02-04 | Electronic Data Systems Corporation | Platform provisioning system and method |
US20100088686A1 (en) * | 2008-10-06 | 2010-04-08 | Microsoft Corporation | Programming language with extensible syntax |
US9910688B2 (en) * | 2008-11-28 | 2018-03-06 | Red Hat, Inc. | Implementing aspects with callbacks in virtual machines |
US20110047358A1 (en) * | 2009-08-19 | 2011-02-24 | International Business Machines Corporation | In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication |
US8458684B2 (en) * | 2009-08-19 | 2013-06-04 | International Business Machines Corporation | Insertion of operation-and-indicate instructions for optimized SIMD code |
US9703550B1 (en) * | 2009-09-29 | 2017-07-11 | EMC IP Holding Company LLC | Techniques for building code entities |
US8627303B2 (en) * | 2009-11-30 | 2014-01-07 | International Business Machines Corporation | Memory optimization of virtual machine code by partitioning extraneous information |
US8719804B2 (en) * | 2010-05-05 | 2014-05-06 | Microsoft Corporation | Managing runtime execution of applications on cloud computing systems |
US20120084749A1 (en) * | 2010-10-01 | 2012-04-05 | Microsoft Corporation | Programming language support for reactive programming |
US9645869B2 (en) * | 2010-12-01 | 2017-05-09 | Ncr Corporation | Using exception information |
KR101803303B1 (ko) | 2010-12-21 | 2017-12-29 | 삼성전자주식회사 | 멀티미디어 아키텍처 패턴 결정 방법, 싱글코어에서 멀티코어 기반으로의 아키텍처 전환 장치 및 방법 |
US9043755B2 (en) * | 2011-01-13 | 2015-05-26 | Sap Se | Custom code lifecycle management |
US20120324377A1 (en) * | 2011-06-15 | 2012-12-20 | Microsoft Corporation | User interface extensibility for web application development tool |
US8856724B2 (en) * | 2011-06-20 | 2014-10-07 | Ebay Inc. | Systems and methods for incremental software development |
IN2011CH02818A (ja) * | 2011-08-18 | 2015-05-29 | Infosys Ltd | |
US9183001B2 (en) | 2011-09-12 | 2015-11-10 | Microsoft Technology Licensing, Llc | Simulation of static members and parameterized constructors on an interface-based API |
KR20130073374A (ko) * | 2011-12-23 | 2013-07-03 | 삼성전자주식회사 | 응용 프로그램의 분산형 컴파일 시스템, 장치 및 방법 |
US9286063B2 (en) | 2012-02-22 | 2016-03-15 | Veracode, Inc. | Methods and systems for providing feedback and suggested programming methods |
KR101422737B1 (ko) * | 2012-11-02 | 2014-07-24 | 엄원우 | 다중 언어 코드 동시 실행 장치와 그 방법 |
KR101282970B1 (ko) | 2012-11-30 | 2013-07-08 | (주)인스웨이브시스템즈 | 프로그램 개발시 화면 객체의 상황인지 위치 결정 장치 및 그 방법 |
US9569342B2 (en) * | 2012-12-20 | 2017-02-14 | Microsoft Technology Licensing, Llc | Test strategy for profile-guided code execution optimizers |
US9250937B1 (en) * | 2013-11-06 | 2016-02-02 | The Regents Of The University Of California | Code randomization for just-in-time compilers |
CN104714829B (zh) * | 2013-12-15 | 2017-11-28 | 中国航空工业集团公司第六三一研究所 | 一种保证目标码和源代码一致性的编译链接方法 |
US9785456B2 (en) | 2014-04-22 | 2017-10-10 | Oracle International Corporation | Metadata-driven dynamic specialization |
RU2614557C2 (ru) * | 2015-06-30 | 2017-03-28 | Закрытое акционерное общество "Лаборатория Касперского" | Система и способ обнаружения вредоносных файлов на мобильных устройствах |
US20170168792A1 (en) * | 2015-12-15 | 2017-06-15 | Futurewei Technologies, Inc. | Space and time aware organization and isolation of components in real time systems |
CN106909353B (zh) * | 2015-12-22 | 2019-12-13 | 阿里巴巴集团控股有限公司 | 应用程序的运行方法和装置 |
KR101691600B1 (ko) * | 2016-04-28 | 2017-01-02 | 지티원 주식회사 | 공통 구조 변환 기반 프로그램 분석 방법 및 장치 |
CN108304191B (zh) * | 2016-09-30 | 2021-06-01 | 龙芯中科技术股份有限公司 | 函数动态调用方法和装置 |
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 |
US10379825B2 (en) * | 2017-05-22 | 2019-08-13 | Ab Initio Technology Llc | Automated dependency analyzer for heterogeneously programmed data processing system |
US10613844B2 (en) * | 2017-11-10 | 2020-04-07 | International Business Machines Corporation | Using comments of a program to provide optimizations |
KR102439778B1 (ko) * | 2018-04-23 | 2022-09-05 | 삼성에스디에스 주식회사 | 애플리케이션의 보안성 향상을 위한 애플리케이션 변환 장치 및 방법 |
JP7003842B2 (ja) * | 2018-05-31 | 2022-01-21 | オムロン株式会社 | サポート装置およびサポートプログラム |
US11790263B2 (en) | 2019-02-25 | 2023-10-17 | International Business Machines Corporation | Program synthesis using annotations based on enumeration patterns |
KR102214698B1 (ko) * | 2019-04-05 | 2021-02-10 | 주식회사 티맥스 소프트 | 통합개발환경 상에서 가상 머신 프로그램 및 네이티브 프로그램의 디버깅을 위한 서버 및 컴퓨터 프로그램 |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
US11176329B2 (en) | 2020-02-18 | 2021-11-16 | Bank Of America Corporation | Source code compiler using natural language input |
US11250128B2 (en) | 2020-02-18 | 2022-02-15 | Bank Of America Corporation | System and method for detecting source code anomalies |
US20210263711A1 (en) * | 2020-02-26 | 2021-08-26 | Red Hat, Inc. | Application framework developer tool |
US20200327118A1 (en) * | 2020-06-27 | 2020-10-15 | Intel Corporation | Similarity search using guided reinforcement learning |
US11275671B2 (en) * | 2020-07-27 | 2022-03-15 | Huawei Technologies Co., Ltd. | Systems, methods and media for dynamically shaped tensors using liquid types |
CN117461023A (zh) * | 2020-12-28 | 2024-01-26 | 坦珀系统股份有限公司 | 从通用规范为许多编程语言产生惯用软件文档 |
Family Cites Families (97)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4197978A (en) | 1978-06-29 | 1980-04-15 | The Boeing Company | Method of making an integral structural member |
US4734854A (en) * | 1985-10-08 | 1988-03-29 | American Telephone And Telegraph Company | System for generating software source code components |
CA1248238A (en) | 1985-10-17 | 1989-01-03 | Francis D. Lawlor | Compiler including retargetable data generation |
US5339419A (en) | 1990-06-25 | 1994-08-16 | Hewlett-Packard Company | ANDF compiler using the HPcode-plus compiler intermediate language |
US5659753A (en) | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
IL100989A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Analysis of inductive expressions in multilingual mehadoptimization |
US5598560A (en) | 1991-03-07 | 1997-01-28 | Digital Equipment Corporation | Tracking condition codes in translation code for different machine architectures |
JP3602857B2 (ja) * | 1991-04-23 | 2004-12-15 | 株式会社日立製作所 | 多機種対応型情報処理システム、および、方法 |
US5488727A (en) | 1991-09-30 | 1996-01-30 | International Business Machines Corporation | Methods to support multimethod function overloading with compile-time type checking |
US5805885A (en) * | 1992-12-24 | 1998-09-08 | Microsoft Corporation | Method and system for aggregating objects |
CA2102089C (en) | 1993-10-29 | 1999-05-25 | David M. Gillies | Recompilation of computer programs for enhanced optimization |
US5761511A (en) | 1994-01-28 | 1998-06-02 | Sun Microsystems, Inc. | Method and apparatus for a type-safe framework for dynamically extensible objects |
US5628016A (en) | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5742828A (en) | 1994-08-03 | 1998-04-21 | Microsoft Corporation | Compiler and method for evaluation of foreign syntax expressions in source code |
US5778227A (en) | 1995-08-01 | 1998-07-07 | Intergraph Corporation | System for adding attributes to an object at run time in an object oriented computer environment |
US5754858A (en) | 1996-05-01 | 1998-05-19 | Microsoft Corporation | Customizable application project generation process and system |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
IL127492A (en) | 1996-06-11 | 2004-06-01 | Edgar Codd | Delta model processing logic representation and execution system |
US6041179A (en) | 1996-10-03 | 2000-03-21 | International Business Machines Corporation | Object oriented dispatch optimization |
US6463581B1 (en) | 1996-10-03 | 2002-10-08 | International Business Machines Corporation | Method for determining reachable methods in object-oriented applications that use class libraries |
US5778233A (en) | 1996-10-11 | 1998-07-07 | International Business Machines Corporation | Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program |
US6247169B1 (en) | 1996-11-04 | 2001-06-12 | Sun Microsystems, Inc. | Structured exception-handling methods, apparatus, and computer program products |
US5937195A (en) | 1996-11-27 | 1999-08-10 | Hewlett-Packard Co | Global control flow treatment of predicated code |
US5943499A (en) | 1996-11-27 | 1999-08-24 | Hewlett-Packard Company | System and method for solving general global data flow predicated code problems |
US5857105A (en) | 1997-02-05 | 1999-01-05 | Hewlett-Packard Company | Compiler for reducing number of indirect calls in an executable code |
US6212672B1 (en) | 1997-03-07 | 2001-04-03 | Dynamics Research Corporation | Software development system with an executable working model in an interpretable intermediate modeling language |
US5918235A (en) | 1997-04-04 | 1999-06-29 | Hewlett-Packard Company | Object surrogate with active computation and probablistic counter |
US6149318A (en) | 1997-04-15 | 2000-11-21 | Samuel C. Kendall | Link-time and run-time error detection, and program instrumentation |
US5999739A (en) | 1997-05-29 | 1999-12-07 | Hewlett-Packard Company | Method and apparatus for elimination of redundant branch instructions from a program |
US6009273A (en) | 1997-05-29 | 1999-12-28 | Hewlett-Packard Company | Method for conversion of a variable argument routine to a fixed argument routine |
US6070011A (en) | 1997-10-21 | 2000-05-30 | Hewlett-Packard Co. | Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal |
US5966702A (en) | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6148302A (en) | 1998-02-26 | 2000-11-14 | Sun Microsystems, Inc. | Method, apparatus, system and computer program product for initializing a data structure at its first active use |
US6202204B1 (en) | 1998-03-11 | 2001-03-13 | Intel Corporation | Comprehensive redundant load elimination for architectures supporting control and data speculation |
US6330717B1 (en) | 1998-03-27 | 2001-12-11 | Sony Corporation Of Japan | Process and system for developing an application program for a distributed adaptive run-time platform |
US6249910B1 (en) | 1998-05-04 | 2001-06-19 | Hewlett-Packard Company | Apparatus and method for incrementally update static single assignment form for cloned variable name definitions |
US6578090B1 (en) | 1998-06-08 | 2003-06-10 | Ricoh Company, Ltd. | System and method for interfacing two modules supporting various applications |
JP3320358B2 (ja) | 1998-06-18 | 2002-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、例外処理方法、及びコンピュータ |
US6247172B1 (en) | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
US6131187A (en) | 1998-08-17 | 2000-10-10 | International Business Machines Corporation | Method and system for translating exception handling semantics of a bytecode class file |
US6289446B1 (en) * | 1998-09-29 | 2001-09-11 | Axis Ab | Exception handling utilizing call instruction with context information |
US6182284B1 (en) | 1998-09-30 | 2001-01-30 | Hewlett-Packard Company | Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code |
US6292938B1 (en) | 1998-12-02 | 2001-09-18 | International Business Machines Corporation | Retargeting optimized code by matching tree patterns in directed acyclic graphs |
US6253304B1 (en) | 1999-01-04 | 2001-06-26 | Advanced Micro Devices, Inc. | Collation of interrupt control devices |
US6412109B1 (en) | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
US6353924B1 (en) | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
US6526570B1 (en) | 1999-04-23 | 2003-02-25 | Sun Microsystems, Inc. | File portability techniques |
US6363522B1 (en) | 1999-04-23 | 2002-03-26 | Sun Microsystems, Inc. | Method and apparatus for handling exceptions as normal control flow |
US6286134B1 (en) | 1999-04-23 | 2001-09-04 | Sun Microsystems, Inc. | Instruction selection in a multi-platform environment |
US6374368B1 (en) | 1999-05-21 | 2002-04-16 | Microsoft Corporation | Weakest precondition analysis |
US6484312B1 (en) | 1999-06-07 | 2002-11-19 | Microsoft Corporation | Inferring operand types within an intermediate language |
US20020166115A1 (en) | 1999-06-10 | 2002-11-07 | A.V.S. Sastry | System and method for computer program compilation using scalar register promotion and static single assignment representation |
US6662356B1 (en) | 1999-06-30 | 2003-12-09 | Microsoft Corporation | Application program interface for transforming heterogeneous programs |
US6481008B1 (en) | 1999-06-30 | 2002-11-12 | Microsoft Corporation | Instrumentation and optimization tools for heterogeneous programs |
US6460178B1 (en) | 1999-06-30 | 2002-10-01 | Microsoft Corporation | Shared library optimization for heterogeneous programs |
US6381738B1 (en) | 1999-07-16 | 2002-04-30 | International Business Machines Corporation | Method for optimizing creation and destruction of objects in computer programs |
US6629312B1 (en) | 1999-08-20 | 2003-09-30 | Hewlett-Packard Development Company, L.P. | Programmatic synthesis of a machine description for retargeting a compiler |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6487716B1 (en) | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
US6625808B1 (en) | 1999-12-10 | 2003-09-23 | Microsoft Corporation | Method and apparatus for facilitating memory management in a program comprised of heterogeneous components |
US6598220B1 (en) | 1999-12-17 | 2003-07-22 | Dell Products L.P. | System and method for allowing registerable runtime modification of object behaviors |
US6745383B1 (en) | 1999-12-29 | 2004-06-01 | Veritas Operating Corporation | Early warning mechanism for enhancing enterprise availability |
US6748584B1 (en) | 1999-12-29 | 2004-06-08 | Veritas Operating Corporation | Method for determining the degree to which changed code has been exercised |
US6738967B1 (en) * | 2000-03-14 | 2004-05-18 | Microsoft Corporation | Compiling for multiple virtual machines targeting different processor architectures |
JP3974742B2 (ja) | 2000-04-14 | 2007-09-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル装置、最適化方法および記録媒体 |
US6981249B1 (en) | 2000-05-02 | 2005-12-27 | Microsoft Corporation | Methods for enhancing type reconstruction |
US6678805B1 (en) | 2000-05-25 | 2004-01-13 | Microsoft Corporation | Structure organization for improved cache performance |
US6625804B1 (en) | 2000-07-06 | 2003-09-23 | Microsoft Corporation | Unified event programming model |
US6578581B1 (en) * | 2000-09-12 | 2003-06-17 | Siri Nam Khalsa | Method and apparatus for relieving fluid build-up in the middle ear |
CA2321018A1 (en) | 2000-09-27 | 2002-03-27 | Ibm Canada Limited-Ibm Canada Limitee | Optimizing compilation by forward store movement |
US6854110B2 (en) | 2000-12-21 | 2005-02-08 | Microsoft Corporation | System and method for obtaining scratch registers in computer executable binaries |
US6925639B2 (en) | 2001-02-23 | 2005-08-02 | Microsoft Corporation | Method and system for register allocation |
US7013460B2 (en) * | 2001-05-15 | 2006-03-14 | Hewlett-Packard Development Company, L.P. | Specifying an invariant property (range of addresses) in the annotation in source code of the computer program |
JP3790683B2 (ja) | 2001-07-05 | 2006-06-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータ装置、その例外処理プログラム及びコンパイル方法 |
US6986125B2 (en) * | 2001-08-01 | 2006-01-10 | International Business Machines Corporation | Method and apparatus for testing and evaluating a software component using an abstraction matrix |
US7117488B1 (en) | 2001-10-31 | 2006-10-03 | The Regents Of The University Of California | Safe computer code formats and methods for generating safe computer code |
US6834383B2 (en) | 2001-11-26 | 2004-12-21 | Microsoft Corporation | Method for binary-level branch reversal on computer architectures supporting predicated execution |
US7426719B2 (en) | 2001-11-29 | 2008-09-16 | Microsoft Corporation | Method and system for rewriting unwind data in the presence of exceptions |
US7600222B2 (en) * | 2002-01-04 | 2009-10-06 | Microsoft Corporation | Systems and methods for managing drivers in a computing system |
US6934940B2 (en) * | 2002-01-30 | 2005-08-23 | International Business Machines Corporation | Source code transformation-temporary object reduction |
JP3870112B2 (ja) | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
JP4202673B2 (ja) | 2002-04-26 | 2008-12-24 | 株式会社東芝 | システムlsi開発環境生成方法及びそのプログラム |
US7228540B2 (en) | 2002-05-14 | 2007-06-05 | Microsoft Corporation | Preparation for software on demand system |
US7213245B2 (en) | 2002-05-14 | 2007-05-01 | Microsoft Corporation | Software on demand system |
US7185328B2 (en) | 2002-05-30 | 2007-02-27 | Microsoft Corporation | System and method for improving a working set |
US7055132B2 (en) | 2002-06-28 | 2006-05-30 | Microsoft Corporation | System and method for associating properties with objects |
US7367022B2 (en) | 2002-09-05 | 2008-04-29 | Intel Corporation | Methods and apparatus for optimizing the operating speed and size of a computer program |
US7240346B2 (en) | 2002-11-13 | 2007-07-03 | Microsoft Corporation | Method and system for accessing drawing resources |
US7370321B2 (en) * | 2002-11-14 | 2008-05-06 | Microsoft Corporation | Systems and methods to read, optimize, and verify byte codes for a multiplatform jit |
US7203941B2 (en) | 2002-11-14 | 2007-04-10 | Microsoft Corporation | Associating a native resource with an application |
US7281248B2 (en) | 2002-11-19 | 2007-10-09 | Microsoft Corporation | Virtualized and realized user interface controls |
US7546607B2 (en) | 2002-11-19 | 2009-06-09 | Microsoft Corporation | Native code exposing virtual machine managed object |
US7484205B2 (en) * | 2002-12-12 | 2009-01-27 | Microsoft Corporation | Preprocessor-based source code instrumentation |
US7472400B2 (en) | 2003-02-28 | 2008-12-30 | Bea Systems, Inc. | Method for dynamically generating a wrapper class |
US7380242B2 (en) * | 2003-05-14 | 2008-05-27 | Mainsoft Israel Ltd. | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
US7120898B2 (en) | 2003-06-26 | 2006-10-10 | Microsoft Corporation | Intermediate representation for multiple exception handling models |
US7559050B2 (en) * | 2003-06-30 | 2009-07-07 | Microsoft Corporation | Generating software development tools via target architecture specification |
-
2003
- 2003-07-25 US US10/628,054 patent/US7707566B2/en not_active Expired - Fee Related
-
2004
- 2004-06-16 JP JP2004178869A patent/JP4841118B2/ja not_active Expired - Fee Related
- 2004-06-18 EP EP04014358A patent/EP1491999A3/en not_active Ceased
- 2004-06-25 CN CN200410085101XA patent/CN1664779B/zh not_active Expired - Fee Related
- 2004-06-25 KR KR1020040048347A patent/KR101150003B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
EP1491999A3 (en) | 2007-05-23 |
CN1664779B (zh) | 2010-05-12 |
US7707566B2 (en) | 2010-04-27 |
EP1491999A2 (en) | 2004-12-29 |
KR101150003B1 (ko) | 2012-06-01 |
JP2005050312A (ja) | 2005-02-24 |
US20040268309A1 (en) | 2004-12-30 |
KR20050001472A (ko) | 2005-01-06 |
CN1664779A (zh) | 2005-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4841118B2 (ja) | ソフトウェア開発インフラストラクチャ | |
US6738967B1 (en) | Compiling for multiple virtual machines targeting different processor architectures | |
US5535391A (en) | System and methods for optimizing object-oriented compilations | |
JP5851396B2 (ja) | 処理方法 | |
US7992140B2 (en) | Compiler supporting programs as data objects | |
US7146606B2 (en) | General purpose intermediate representation of software for software development tools | |
US8423976B2 (en) | Extreme pipeline and optimized reordering technology | |
US6247174B1 (en) | Optimization of source code with embedded machine instructions | |
US6748587B1 (en) | Programmatic access to the widest mode floating-point arithmetic supported by a processor | |
US6484313B1 (en) | Compiling and persisting of intermediate language code | |
EP1639461A2 (en) | An extensible type system for representing and checking consistency of program components during the process of compilation | |
Cifuentes et al. | The design of a resourceable and retargetable binary translator | |
Chen et al. | Type-preserving compilation for large-scale optimizing object-oriented compilers | |
Cifuentes et al. | The university of queensland binary translator (uqbt) framework | |
Palacz et al. | Engineering a common intermediate representation for the Ovm framework | |
Gough | Multi-language, multi-target compiler development: Evolution of the Gardens Point compiler project | |
Proebsting et al. | A new implementation of the Icon language | |
Von Ronne | A Safe and Efficient Machine-independent Code Transportation Format Based on Static Single Assignment Form and Applied to Just-in Time Compilation | |
Adve et al. | Software implications of virtual instruction set computers | |
Liblit | Local Qualification Inference for Titanium | |
XL | Getting Started with XL C | |
Cureton | SPARCompiler™ Compilation Technology | |
To | Fictitious imperative language system | |
Shemitz | JIT and CIL | |
Kienle | Universit at Stuttgart Fakult at Informatik Institut f ur Informatik Abteilung Programmiersprachen und Compilerbau |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070523 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101015 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110114 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110201 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20110217 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20110217 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110601 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20110602 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20110602 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20110622 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110826 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110901 |
|
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: 20110916 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20111004 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20141014 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |
|
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 |
|
LAPS | Cancellation because of no payment of annual fees |