JP3664478B2 - コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 - Google Patents
コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 Download PDFInfo
- Publication number
- JP3664478B2 JP3664478B2 JP2001097182A JP2001097182A JP3664478B2 JP 3664478 B2 JP3664478 B2 JP 3664478B2 JP 2001097182 A JP2001097182 A JP 2001097182A JP 2001097182 A JP2001097182 A JP 2001097182A JP 3664478 B2 JP3664478 B2 JP 3664478B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- exception
- information
- execution
- lock
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、コンピュータプログラムの最適化方法に関し、特に例外処理の手法に特徴を有する最適化方法に関する。
【0002】
【従来の技術】
いくつかのプログラミング言語では、最適化の手法としてインライン展開という手法が用いられる。インライン展開とは、関数の定義内容をそのまま呼び出し元に埋め込むことにより、実際に関数呼び出しを行わずに処理を行うようにプログラムの記述を変更することである。これによれば、関数呼び出しのためのオーバーヘッドがかからないため、実行速度の向上を図ることができる。
【0003】
また、いくつかのプログラミング言語では、特定の領域を宣言することにより、プログラムの実行に際して当該領域中で発生した例外を当該領域に関連した例外ハンドラで処理するといった仕組みが設けられている。この仕組みを持つプログラミング言語の一つであるJavaでは、この宣言をtryと呼び、宣言された領域をtry領域、tryブロックなどと呼ぶ。以下の説明では、Javaに倣い、これらの宣言及び領域にtry、try領域といった呼称を用いる。
【0004】
ところで、ネットワークシステムにおけるサーバやクライアントなど、複雑かつ信頼性が必要なシステムを構築するプログラムを作成するには、同期する複数スレッドを記述できるプログラミング言語を使用することが望まれる。そのような条件を満たすプログラミング言語の例としてJavaがある。
Javaは同期メソッドと同期ブロックという2種類のクリティカルセクションを記述することができる。そして、例外発生時には実行システムがそれらのクリティカルセクションを必ず解除する。
【0005】
また、Javaは、上述したインライン展開及びtryの仕組みをいずれも持つプログラミング言語の一つである。
Javaで記述されたプログラムに対するコンパイルを行うコンパイラ(以下、Javaコンパイラと称す)において最適化を行う際に、同期メソッドに対してインライン展開を行うと、メソッド呼出コスト削減、定数伝搬、クラス情報伝搬といった通常のインライン展開による効果に加え、冗長な同期を削除できるという効果が得られる。
しかしながら、インライン展開を行う際には、所定の手続きが処理の過程で資源(Javaにおいてこの場合はオブジェクト)を排他的に使用するために行う使用制限である資源のロックが、言語仕様上設定される数以上に増加する。このため、同期メソッドをインライン展開したプログラムにおいて、tryを用いた例外処理が複雑になる。
【0006】
図8を参照して、Javaにおいて同期メソッド(以下、適宜、単にメソッドと称す)をインライン展開したプログラムにおける従来の例外処理について説明する。
図8に示す例では、メソッドAがメソッドBを呼び、次にメソッドBがメソッドCを呼ぶ呼び出しがインライン展開されている。メソッドCはメソッドBのtry領域にインライン展開され、メソッドBとメソッドCとは同期メソッドを用いてそれぞれの入口でオブジェクトをロックする。
【0007】
この例において、インライン展開されたメソッドC内で例外Eが発生し、メソッドBのtry領域Tの例外ハンドラで例外Eをキャッチすることを考える。
この場合、try領域Tを越えて例外が処理されるため、例外ハンドラは、メソッドCのロックを解除し、メソッドBのロックはそのままにして処理を行う必要がある。そのため、例外ハンドラは、例外Eを投げた命令が実行されるときにメソッドBとメソッドCとのロックが取得され、try領域Tの例外ハンドラが実行されるときにメソッドBのロックが取得されていることを知らなければならない。言い換えれば、例外発生時におけるロックと例外ハンドラの実行時におけるロックとに関する情報が必要となる。
【0008】
ここで、コード領域とインライン展開したメソッドとの対応情報(以下、インライン情報)は、Javaコンパイラが持つことができる。このインライン情報は、言い換えれば、コードが元々どのように呼び出されたメソッドに属していたかを表す情報である。したがって図示の例では、例外ハンドラは、例外Eの発生アドレスからインライン情報として「メソッドA→メソッドB→メソッドC(元々この順で呼び出されたことを示す。以下、インライン情報において「メソッド」を省略する)」を得、また例外Eをキャッチするアドレスからインライン情報として「A→B」を得る。そして、これらのインライン情報を比べることによって、メソッドCで行ったロックを特定し、解除する。
【0009】
従来のJavaコンパイラは、かかるインライン情報として、アドレス区間とインライン情報との表、あるいは例外関連命令(例外発生可能命令、例外ハンドラ先頭命令、メソッド呼出命令)のアドレスとインライン情報との表を作成する。そして、例外ハンドラは、例外が発生した場合に、当該例外の発生アドレス及び当該例外をキャッチするアドレスを用いて当該アドレスに対応する表を見つけだし、さらに当該表において所望のインライン情報を検索していた。
【0010】
【発明が解決しようとする課題】
しかし、上述した、従来のJavaコンパイラの方法は、インライン情報を取得するために、アドレスに基づいて表を検索する作業と、得られた表に基づいてインライン情報を検索する作業という二つの作業を要する。そのため、この作業に要する時間(作業コスト)は、例外処理全体の作業コストに無視できない影響を与えていた。
【0011】
また、上述した表を用いてインライン情報を取得する手法では、取得したインライン情報から得られるロックの状態と実際のロックの状況とが一致しない場合があった。例えば、最適化によって冗長なロックが削除された場合、インライン情報でインライン展開された同期メソッドを示したとしても、その同期メソッドによるロックが存在しているとは限らなかった。
【0012】
そこで、本発明は、例外処理に必要なロックに関する情報を取得するための作業コストを抑え、例外処理における作業コストへの影響を縮減するためのコンパイル方法及び例外処理の実行方法を提供することを目的とする。
また、本発明は、例外発生に対して確実に必要なロックの解除を行い、例外処理を行う例外処理の手法を提供することを他の目的とする。
【0013】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、プログラミング言語で記述されたプログラムのソースコードを機械語コードに変換するコンパイラにおいて、プログラムにおける関数をインライン展開し、このインライン展開に関する情報を生成するインライン展開処理部と、このインライン展開に関する情報に基づいて、この関数による資源のロックに関するロック情報を生成するロック情報生成部と、このロック情報に基づいて、処理対象であるプログラム中の例外ハンドラにこの例外ハンドラの実行時におけるロック回数を付加する情報付加部とを備えることを特徴とする。
【0014】
ここで、このプログラムを実行する処理系における例外処理方式がスタック巻き戻し方式である場合、この情報付加部は、例外が発生したコードのアドレスからこのコードの実行時におけるロック回数を表引きするための対応表を作成し、処理対象であるプログラムの付属情報として付加する。
これにより、例外処理の際、例外フィルタは、この対応表を用いて例外の発生時(例外を発生したコードの実行時)におけるロック回数を直接取得することができる。
【0015】
また、このプログラムを実行する処理系における例外処理方式が構造化例外処理方式である場合、この情報付加部は、処理対象であるプログラムに設定されたtry領域内のコードの実行時におけるロック回数を、このtry領域の識別情報(ID)にエンコードする。
これにより、例外処理の際、例外フィルタは、例外が発生したtry領域のIDから直ちに例外の発生時におけるロック回数を取得することができる。
【0016】
さらに、上記のコンパイラは、プログラム中に存在する不要なロックを削除し、ロックの削除の結果に応じて、ロック情報生成部にて生成されたロック情報を更新する同期最適化部をさらに備える構成とすることができる。この場合、情報付加部は、この同期最適化部により更新されたロック情報に基づいて、例外ハンドラにロック回数を付加する。
【0017】
また、本発明は、コンピュータを制御して実行プログラムを変換する変換プログラムとして提供することができる。この変換プログラムは、この実行プログラムにおける関数のインライン展開に関する情報に基づいて、インライン展開された関数による資源の使用制限に関する情報を生成する機能と、この情報に基づいて、処理対象である実行プログラム中の各コードの実行時における使用制限の状態に関する情報をこの実行プログラムに付加する機能とをコンピュータに実現させることを特徴とする。
【0018】
この変換プログラムは、このコンピュータに、処理対象である実行プログラム中に存在する不要な使用制限を削除し、この削除の結果に応じて、上述した各コードの実行時における使用制限の状態に関する情報を更新する機能をさらに実現させるようにすることができる。この場合、更新された情報に基づいて、この実行プログラムに使用制限の状態に関する情報を付加することとなる。
【0019】
さらに、この変換プログラムは、オブジェクト指向プログラミング言語で記述された実行プログラムを変換する変換プログラムとして構成することができる。すなわち、この変換プログラムは、実行プログラムにおけるメソッドのインライン展開に関する情報に基づいて、インライン展開されたメソッドによるオブジェクトのロックに関するロック情報を生成する機能と、このロック情報に基づいて、実行プログラム中の各コードの実行時におけるロック回数に関する情報をこの実行プログラムに付加する機能とをコンピュータに実現させる。
【0020】
また、本発明は、コンピュータを制御して実行プログラムの実行中に発生した例外を処理する例外処理プログラム(実行時ライブラリ)として提供することができる。この例外処理プログラムは、スタック巻き戻し方式で例外処理を行う場合、例外処理の実行に先立って次の処理をコンピュータに実行させる。すなわち、実行プログラムに付加された、各コードのアドレスとコードの実行時における資源のロック回数とを対応付けた対応情報に基づいて、例外を発生したコードのアドレスからこの例外の発生時におけるロック回数を求める処理と、この例外に対する例外ハンドラに付加された、この例外ハンドラの実行時におけるロック回数を取得する処理と、この例外発生時におけるロック回数とこの例外ハンドラの実行時におけるロック回数との差分だけ資源のロックを解除する処理とをコンピュータに実行させる。
【0021】
さらに、この例外処理プログラムは、構造化例外処理方式で例外処理を行う場合、例外処理の実行に先立って次の処理をコンピュータに実行させる。すなわち、実行プログラムに記述された、try領域内における各コードの実行時における資源のロック回数がエンコードされたtry領域の識別情報を用い、例外を発生したコードが含まれるtry領域の識別情報をデコードしてこの例外の発生時における資源のロック回数を求める処理と、この例外に対する例外ハンドラに付加された、この例外ハンドラの実行時におけるロック回数を取得する処理と、この例外発生時におけるロック回数とこの例外ハンドラの実行時におけるロック回数との差分だけ資源のロックを解除する処理とをコンピュータに実行させる。
【0022】
上述した変換プログラムや、例外処理プログラムは、磁気ディスクや光ディスク、半導体メモリなどの記録媒体に記録して配布したり、プログラム伝送装置の記録装置に格納しネットワークを介して配信したりすることにより、提供することができる。
【0023】
また、本発明は、このような例外処理プログラムを実行するコンピュータ装置として提供することができる。すなわち、プログラムを実行する実行手段と、この実行手段によるプログラムの実行中に例外が発生した場合に、この例外を処理する例外処理手段とを備え、この例外処理手段は、実行対象であるプログラムに付加された各コードの実行時における資源のロック回数に関する情報に基づいて、例外の発生時におけるロック回数とこの例外に対する例外ハンドラの実行時におけるロック回数とを求め、二つの当該ロック回数の差分だけ資源のロックを解除した後に、この例外に対する処理を実行する。
【0024】
さらに本発明は、次のように構成されたコンピュータ装置として提供することができる。すなわち、プログラムのソースコードをコンパイルして機械語コードに変換するコンパイラと、機械語コードに変換されたプログラムを実行する処理装置とを備えたコンピュータ装置において、このコンパイラは、このプログラムにおける関数のインライン展開に関する情報に基づいて、インライン展開された関数による資源のロックに関するロック情報を生成するロック情報生成部と、このロック情報に基づいて、このプログラム中の各コードの実行時におけるロック回数に関する情報をこのプログラムに付加する情報付加部とを備え、この処理装置は、このプログラムの実行中に例外が発生した場合に、このロック回数に関する情報に基づいて、例外を発生したコードの実行時におけるロック回数とこの例外に対する例外ハンドラの実行時におけるロック回数とを求め、二つのロック回数の差分だけ資源のロックを解除した後に、この例外に対する処理を実行することを特徴とする。
【0025】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、インライン展開及びtryに基づく例外処理の仕組みを持つプログラミング言語で記述されたプログラムに対して汎用的に利用できるが、以下では、代表的な例として、Javaで記述されたプログラムに対するコンパイラを対象として説明する。
また、本発明は、プログラムのコンパイル時に、プログラム中に例外処理の際に必要となる情報を埋め込むことと、プログラムの実行時に、コンパイル時に埋め込まれた情報に基づいて例外処理を行うこととによって実現される。そこで、以下の実施の形態の説明では、コンパイラによるコンパイル処理と、プロセッサによる実行処理とに分けて説明する。
【0026】
図1は、本実施の形態におけるコンパイラが用いられるコンピュータ装置のシステム構成を示す図である。
図1において、コンパイラ100は、バイトコード(byte code)で記述された入力コードを入力して処理し、機械語で記述された出力コードを生成して出力する。この入力コードの入力は、コード生成装置400にて生成された入力コードを直接入力したり、コード生成装置400にて生成された入力コードを記憶した記憶装置500から入力したり、ネットワーク600上に存在するコード生成装置400や記憶装置500からネットワーク600を介して入力したりすることにより行われる。
なお、本実施の形態において、コンパイラ100は、JavaにおけるJIT(Just In Time)コンパイラのような、実行プログラムを実行する際に動的に実行プログラムのコンパイル処理を行うコンパイラであっても良いし、ソースプログラムを予めコンパイルして生成されたオブジェクトプログラムを実行プログラムとする使用形態におけるコンパイラであっても良い。
コンパイラ100により生成された出力コードは、プロセッサ200により実行され、必要に応じて実行時ライブラリ300を呼び出す。実行時ライブラリ300には、例外フィルタなど、実行時における例外処理を行うためのプログラムが格納されている。
【0027】
図2は、本実施の形態におけるコンパイラの構成を説明する図である。
図2を参照すると、本実施の形態のコンパイラ100は、メソッドのインライン展開を行うインライン展開処理部としての前処理部110と、ロック情報を生成するロック情報生成部120と、ロック情報と基本ブロックとの対応付けを行う基本ブロック対応付け部130と、不要なロックに関するロック情報を削除する同期最適化部140と、例外処理を行う場合に必要な情報を保存する情報付加部としての後処理部150とを備える。
図2に示したコンパイラ100の各構成要素は、コンピュータプログラムにより制御されたCPUにて実現される仮想的なソフトウェアブロックである。CPUを制御する当該コンピュータプログラムは、CD−ROMやフレキシブルディスクなどの記憶媒体に格納して配布したり、ネットワークを介して伝送したりすることにより提供される。
なお、図2に示したコンパイラ100の構成要素は、本実施の形態における特徴的な機能に関して記述したものである。図示しないが、実際にはコンパイラ100は、入力コードの字句解析や構文解析、機械語のコード生成といったコンパイル処理における一般的な機能を有することは言うまでもない。
【0028】
前処理部110は、入力コードとして入力された処理対象プログラムを解析し、メソッドのインライン展開による最適化を行う。インライン展開されるメソッドには、同期メソッドが含まれる。そして、前処理部110は、インライン展開される同期メソッドの入口及び出口で基本ブロックを分け、ロックを確保するコード(以下、ロック確保コード)及びロックを解除するコード(以下、ロック解除コード)を挿入する。なお、基本ブロックとは、ストレートコード、すなわちコントロールフローが途中に入ることもなく、途中から出ることもないようなコード列の範囲をブロックとして把握したものである。
【0029】
ロック情報生成部120は、前処理部110のインライン展開によるインライン情報に基づいて、インライン展開された同期メソッドによるロック確保コードに関する情報とロックの回数(以下、ロック回数)とを集める。そして、集めた情報をロック情報として作業用メモリに保存する。
【0030】
基本ブロック対応付け部130は、処理対象プログラムの各基本ブロックに、対応するロック情報へのポインタを付加することにより、基本ブロックとロック情報との対応付けを行う。
【0031】
同期最適化部140は、前処理部110により処理対象プログラムに挿入されたロック確保コード及びロック解除コードのうち、不必要なものを削除する最適化を行う。また、同期最適化部140は、ロック情報生成部120により生成されたロック情報のうち、削除されるロックに関する情報を含むものがあれば、当該ロックに関する情報をロック情報から削除し、ロック回数を1減らす。
【0032】
後処理部150は、同期最適化部140により最適化処理されたロック情報を用いて、処理対象プログラム中の各例外ハンドラに、当該例外ハンドラの実行時におけるロック回数を保存する。
また、例外処理の方式が、後述する二つの方式のうち、スタック巻き戻し方式の場合、後処理部150は、例外が発生したコードのアドレスからロック回数を表引きするための対応表を作成してメモリに保存する。この対応表は、コンパイル終了後もコードの付属情報として保存される。
また、例外処理の方式が、構造化例外処理方式の場合、try領域におけるロック回数(以下、try時のロック回数と称す)を当該try領域のIDにエンコードする。したがって、try領域内においてロックが確保されたり解除されたりした場合、当該try領域の元のIDは同じであっても、ロック回数がエンコードされたIDは変化することとなる。
【0033】
上記のように構成されたコンパイラ100により、プログラムのコンパイルの過程で、同期メソッドをインライン展開した当該プログラムに、同期メソッドによるロックに関する情報が埋め込まれることとなる。
図8に示したインライン展開されたプログラムを例として、コンパイラ100が同期メソッドによるロックに関する情報をプログラムに埋め込む動作を説明する。
コンパイラ100において、入力コードに対する字句解析や構文解析が行われ、最適化処理として前処理部110により同期メソッドを含むメソッドのインライン展開が行われた状態が図8に示す状態である。
【0034】
この状態のプログラムは、次に、ロック情報生成部120により、処理されて、ロック情報が生成される。すなわち、インライン情報「A→B→C」からは、ロック確保コードに関する情報(コードを挿入した同期メソッド)としてB→Cと、ロック回数の2が得られる。また、インライン情報「B→C」からは、ロック確保コードに関する情報としてBと、ロック回数の1が得られる。
次に、基本ブロック対応付け部130により、プログラムの基本ブロックに対して、対応するロック情報へのポインタが付加される。
次に、同期最適化部140により、不要なロックが削除され、これに伴ってロック情報が処理される。図8のプログラムでは、例えば、メソッドCのロックが冗長であるとして削除される場合、メソッドCに対応するロック情報は、ロック確保コードに関する情報B→Cとロック回数2から、ロック確保コードに関する情報Bとロック回数1に変わる。
最後に、後処理部150により、同期最適化部140により不要なロックが削除されたプログラムに、ロック回数が保存される。
【0035】
次に、上記のようにしてロックに関する情報が埋め込まれたプログラムを実行し、例外が発生した際のプロセッサ200による例外処理の動作について説明する。
例外処理の方法としては、スタック巻き戻し方式と構造化例外処理方式とがある。図3は、スタック巻き戻し方式により例外処理を行う場合の動作を説明するフローチャートである。
図3に示すように、例外が発生すると、まず、例外を起こした命令のアドレスを着目アドレスとする(ステップ301)。そして、例外を起こしたときのスタックフレームを着目するフレームとする。
【0036】
次に、着目中のフレームで当該例外を処理できるか、すなわち、着目中のフレームが当該例外に対するキャッチフレームであるかどうかを調べる(ステップ302)。着目中のフレームがキャッチフレームであれば、当該着目中のフレームが、発生した当該例外を処理できるハンドラを持つかどうか、すなわち、キャッチできるかどうかを調べる(ステップ303)。
【0037】
着目中のフレームが例外をキャッチできるならば、コンパイル時に作成した対応表から、着目アドレスに対応するロック回数を、表引きして取得する(ステップ304)。
また、当該例外をキャッチする例外ハンドラから、コンパイル時に当該例外ハンドラに付加された当該例外ハンドラの実行時のロック回数を取得する。そして、ステップ304で取得したロック回数(例外発生時のロック回数)から例外ハンドラの実行時のロック回数を減算する(ステップ305)。
【0038】
ところで、プログラムを実行する際、各フレームには、ロック確保コードを実行することによって同期スタックが生成される。同期スタックとは、ロック対象をLIFO(Last In First Out)に保持したものである。
そこで、この同期スタックから、ステップ305で算出された個数分をポップ(ロックを解除)する(ステップ306)。
【0039】
一方、ステップ302において着目中のフレームがキャッチフレームで無かった場合、またはステップ303において着目中のフレームが発生した例外をキャッチできなかった場合は、次に、コンパイル時に作成した対応表から、着目アドレスに対応するロック回数を、表引きして取得する(ステップ307)。そして、得られたロック回数分、同期スタックからポップする(ステップ308)。
次に、着目中のフレームから呼び出し側へ一つ戻ったフレームを新たな着目するフレームとし(ステップ309)、この新たな着目中のフレームにおける再開アドレスを新たな着目アドレスとして、ステップ302以降の処理をやり直す(ステップ310)。
【0040】
以上のようにして、本実施の形態は、プログラムを実行して例外が発生した場合に、プログラムに埋め込まれたロックに関する情報、及び例外が発生する可能性のあるコードのアドレスとロック回数との対応表に基づいて、必要なロックの解除を行うことが可能である。
本実施の形態においてプログラムに埋め込まれるロックに関する情報は、不要なロックを削除する同期最適化の結果を反映させた情報であるため、この情報から得られるロックの状態と実際のロックの状況とは必ず一致する。
また、例外が発生した時点でのロック回数は上記の対応表から直接取得することができ、例外ハンドラの実行時のロック回数は当該例外ハンドラに付加された情報として得ることができる。また、いずれのロックを解除するかは、プログラムの実行時に作成される同期スタックにおいて機械的に確定する。したがって、従来、インライン情報を取得するために2回の検索作業を必要としていたのに比べて作業コストを短縮することができる。
【0041】
次に、例外処理の方法として構造化例外処理方式を用いる場合について説明する。図4は、構造化例外処理方式により例外処理を行う場合の動作を説明するフローチャートである。
図4に示すように、例外が発生すると、まず、着目中のtry領域におけるIDを取得する(ステップ401)。そして、当該着目中のtry領域に関連した例外ハンドラが発生した例外をキャッチするかどうかを調べる(ステップ402)。
【0042】
当該例外ハンドラが当該例外をキャッチする場合、ステップ401で取得したIDをデコードし、コンパイル時にIDにエンコードされたtry時のロック回数を取得する(ステップ403)。ここで、上述したように、try領域内でロックが確保されたり解除されたりしている場合、元のIDにエンコードされるロック回数が変化するため、同じtry領域であってもエンコード後のIDの値は変化し、ロック回数の変化が反映されることとなる。これにより、例外が発生した際に当該try領域のIDをデコードすることにより、直ちに、当該try領域を識別すると共に、例外が発生した時点におけるロック回数を取得することができる。
次に、当該例外をキャッチする例外ハンドラから、コンパイル時に当該例外ハンドラに付加された当該例外ハンドラの実行時のロック回数を取得する。そして、ステップ403で取得したロック回数(try時のロック回数)から例外ハンドラの実行時のロック回数を減算する(ステップ404)。
この後、同期スタックから、ステップ404で算出された個数分をポップ(ロックを解除)する(ステップ405)。
【0043】
一方、着目中のtry領域に関連する例外ハンドラが発生した例外をキャッチできない場合、当該try領域を含むtry領域に着目し(ステップ406)、この新たに着目したtry領域に関連する例外ハンドラが発生した当該例外をキャッチするかどうかを調べる(ステップ407)。
この動作(ステップ406、407)を、当該例外をキャッチできる例外ハンドラが見つかるまで繰り返す。
【0044】
当該例外をキャッチできる例外ハンドラが見つかったならば、次に、同期スタックのエントリ数を数える(ステップ408)。そして、当該例外をキャッチできる例外ハンドラに付加されている当該例外ハンドラの実行時のロック回数を、得られたエントリ数から減算する(ステップ409)。
この後、同期スタックから、ステップ409で算出された個数分をポップ(ロックを解除)する(ステップ405)。
【0045】
以上のようにして、本実施の形態は、プログラムを実行して例外が発生した場合に、プログラムに埋め込まれたロックに関する情報、すなわち、各例外ハンドラに付加された当該例外ハンドラの実行時におけるロック回数と、try領域のIDにエンコードされたtry時のロック回数とに基づいて、必要なロックの解除を行うことが可能である。
本実施の形態においてプログラムに埋め込まれるロックに関する情報は、不要なロックを削除する同期最適化の結果を反映させた情報であるため、この情報から得られるロックの状態と実際のロックの状況とは必ず一致する。
また、例外が発生した時点でのロック回数は、try領域のIDをデコードすることにより直接取得することができ、例外ハンドラの実行時のロック回数は当該例外ハンドラに付加された情報として得ることができる。また、いずれのロックを解除するかは、プログラムの実行時に作成される同期スタックにおいて機械的に確定する。したがって、従来、インライン情報を取得するために2回の検索作業を必要としていたのに比べて作業コストを短縮することができる。
【0046】
次に、例外処理の方法がスタック巻き戻し方式の場合と構造化例外処理方式の場合とのそれぞれについて、具体的な例を挙げて、プログラムに埋め込まれる情報と例外発生時の処理とを説明する。
図5(A)は、図8に対応するコンパイルコードの構成例である。図中の区画はメソッドを表し、文字はメソッド名を表す。「SofA」はメソッドAのtry領域を表し、「TofB」はメソッドBのtry領域を表す。また、メソッドCのコード領域は、基本ブロックの並べ替えによって2カ所(アドレスa2〜a3−1とアドレスa5〜a6−1)に配置されているが、いずれもtry領域Tのスコープに入っている。
try領域のID(図ではtryIDと表記、以下の説明においても、tryIDと記述する)は、メソッドBとメソッドCとのコード領域に対して0を振る。ロック情報(図ではと表記)は、[ロックの回数]同期メソッド1、同期メソッド2、・・・のように表記した。
また、図5(B)は、コードアドレスからロック回数を表引きするための対応図表である。図5(B)を参照すると、例えば図5(A)におけるコードアドレスがa1からa2−1までの範囲(図ではaddr rangeと表記)はロック回数(図では#lockと表記)が1であることがわかる。
【0047】
上記のコンパイルコードを実行して、アドレス区間a5からa6の間のaxで例外が発生したものとする。すると、この例外をキャッチした例外フィルタは、図5(B)の対応図表を用いて、アドレスaxを表引きし、ロック回数2を得る。
また、例外フィルタは、try領域Tに関連する例外ハンドラを見つけ、当該例外ハンドラの実行時におけるロック回数1を得る。
そして、ロック回数の差分1だけ同期スタックからロックを解除する。
【0048】
次に、例外処理の方法が構造化例外処理方式の場合について説明する。
図6は、図8に対応するコンパイルコードの構成例であり、図5(A)の例と同様である。try領域のID(tryID)及びロック情報(sync Info)も図5(A)の例と同様である。ただし、図6では、メソッドCのコード領域が2カ所に分割配置されていないので、図5(A)の最下に位置するメソッドC(CXexception)は、try領域T(TofB)の間に位置するメソッドCに含まれている。
また、図6において、try時のロック回数をエンコードされたID(図ではenc try IDと表記)を、
tryID+ロックの回数*tryの総数
とした。例えば、メソッドBにおいて、tryIDが1であり、ロック回数が1であり、またtryの総数は2であるので、エンコード後のIDは3(=1+1*2)である。
【0049】
また、コントロールフロー上、try領域のIDが切り替わる場所でエンコードされたIDを更新するのは、エンコードされていない通常のtryIDと同様である。
本実施の形態では、try領域に同期メソッドがインラインされることによりロック回数が増えるため、エンコードされたIDの更新回数は、エンコードしない場合のID(tryID)の更新回数よりも多くなる。しかし、ID更新の作業コストは同期コストに比べて相対的に小さく、冗長なロックは削除されてエンコードされないので、実際上は問題とならない。
【0050】
上記のコンパイルコードを実行して、try領域T(TofB)で例外が発生したものとする。例外フィルタは、例外が起きたときのtry領域のIDをデコードする。上述したようにtryIDへのロック回数のエンコードは
tryID(=0)+ロックの回数(=2)*tryの総数(=2)
ただし、括弧内の値はtry領域Tにおける該当値
であるので、エンコードされたIDの値を2(tryの総数)で割った値がロック回数、余りがtryIDの値である。ここでは、ロック回数が2(=4/2)となり、tryIDが0となる。
また例外フィルタは、try領域Tに関連する例外ハンドラを見つけ、当該例外ハンドラのロック回数1を得る。
そして、ロック回数の差分1だけ同期スタックからロックを解除する。
【0051】
図7は、図6のコンパイルコードに対して、メソッドCのロックが冗長であるとして削除された場合の構成例を示す図である。
図6と図7とを比較すると、メソッドCに対応するロック情報(sync Info)が[2]B,Cから[1]Bに変化し、エンコードされたIDの値が4(=0+2*2)から2(=0+1*2)に変化している。
このように、本実施の形態によれば、コンパイル時に不要なロックが削除された場合であっても、同期最適化部140により、ロックの削除を反映させた情報が生成され、コンパイルコードに埋め込まれることとなる。
【0052】
【発明の効果】
以上説明したように、本発明によれば、例外処理に必要なロックに関する情報を、プログラムコードから直接取得することができる。これにより、かかる情報を取得するための作業コストを抑え、例外処理における作業コストへの影響を縮減することが可能となる。
また、本発明によれば、不要なロックを削除する最適化処理の結果を反映させた情報をプログラムコードに埋め込むことにより、例外発生に対して確実に必要なロックの解除を行い、例外処理を行うことができる。
【図面の簡単な説明】
【図1】 本実施の形態におけるコンパイラが用いられるコンピュータ装置のシステム構成を示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説明する図である。
【図3】 スタック巻き戻し方式により例外処理を行う場合における本実施の形態の動作を説明するフローチャートである。
【図4】 構造化例外処理方式により例外処理を行う場合における本実施の形態の動作を説明するフローチャートである。
【図5】 スタック巻き戻し方式による例外処理を行う場合に用いられる情報を説明する図であり、(A)はコンパイルコードの構成例、(B)はコードアドレスからロック回数を表引きするための対応図表である。
【図6】 構造化例外処理方式により例外処理を行う場合に用いられるコンパイルコードの構成例を示す図である。
【図7】 図6のコンパイルコードに対して、メソッドCのロックが冗長であるとして削除された場合の構成例を示す図である。
【図8】 同期メソッドをインライン展開したJavaのプログラムコードの構成概念を説明する図である。
【符号の説明】
100…コンパイラ、110…前処理部、120…ロック情報生成部、130…基本ブロック対応付け部、140…同期最適化部、150…後処理部、200…プロセッサ、300…実行時ライブラリ、400…コード生成装置、500…記憶装置、600…ネットワーク
Claims (16)
- プログラミング言語で記述されたプログラムのソースコードを機械語コードに変換するコンパイラにおいて、
前記プログラムにおける関数をインライン展開し当該インライン展開に関する情報を生成するインライン展開処理部と、
前記インライン展開に関する情報に基づいて、当該関数による資源のロックに関するロック情報を生成するロック情報生成部と、
前記ロック情報に基づいて、前記プログラム中の例外ハンドラに当該例外ハンドラの実行時におけるロック回数を付加する情報付加部と
を備えることを特徴とするコンパイラ。 - 前記情報付加部は、例外が発生したコードのアドレスから当該コードの実行時におけるロック回数を表引きするための対応表を作成し、前記プログラムの付属情報として付加することを特徴とする請求項1に記載のコンパイラ。
- 前記情報付加部は、前記プログラムに設定されたtry領域内のコードの実行時における前記ロック回数を当該try領域の識別情報にエンコードすることを特徴とする請求項1に記載のコンパイラ。
- 前記プログラム中に存在する不要なロックを削除し、ロックの削除の結果に応じて前記ロック情報生成部にて生成された前記ロック情報を更新する同期最適化部をさらに備え、
前記情報付加部は、前記同期最適化部により更新されたロック情報に基づいて、前記例外ハンドラにロック回数を付加することを特徴とする請求項1に記載のコンパイラ。 - コンピュータを制御して実行プログラムを変換する変換プログラムであって、
前記実行プログラムにおける関数のインライン展開に関する情報に基づいて、当該関数による資源のロックに関する情報を生成する機能と、
前記ロックに関する情報に基づいて、前記実行プログラム中の各コードの実行時におけるロックの状態を表す情報を前記実行プログラムに付加する機能と
を前記コンピュータに実現させることを特徴とする変換プログラム。 - 前記コンピュータに、
前記実行プログラム中に存在する不要なロックを削除し、当該ロックの削除の結果に応じて、前記ロックに関する情報を更新する機能をさらに実現させ、
前記実行プログラムにロックの状態を表す情報を付加する機能は、更新された前記ロックに関する情報に基づいて、前記実行プログラムにロックの状態を表す情報を付加することを特徴とする請求項5に記載の変換プログラム。 - コンピュータを制御してオブジェクト指向プログラミング言語で記述された実行プログラムを変換する変換プログラムであって、
前記実行プログラムにおけるメソッドのインライン展開に関する情報に基づいて、当該メソッドによるオブジェクトのロックに関するロック情報を生成する機能と、
前記ロック情報に基づいて、前記実行プログラム中の各コードの実行時におけるロック回数に関する情報を前記実行プログラムに付加する機能と
を前記コンピュータに実現させることを特徴とする変換プログラム。 - コンピュータを制御して実行プログラムの実行中に発生した例外を処理する例外処理プログラムであって、
前記実行プログラムに付加された、前記実行プログラムにおける各コードのアドレスとコードの実行時における資源のロック回数とを対応付けた対応情報に基づいて、前記例外を発生したコードのアドレスから前記例外の発生時におけるロック回数を求める処理と、
前記実行プログラム中の前記例外に対する例外ハンドラに付加された、当該例外ハンドラの実行時におけるロック回数を取得する処理と、
前記例外の発生時におけるロック回数と前記例外ハンドラの実行時におけるロック回数との差分だけ資源のロックを解除する処理と
を前記コンピュータに実行させることを特徴とする例外処理プログラム。 - コンピュータを制御して実行プログラムの実行中に発生した例外を処理する例外処理プログラムであって、
前記実行プログラムに記述された、try領域内における各コードの実行時における資源のロック回数がエンコードされたtry領域の識別情報を用い、前記例外を発生したコードが含まれるtry領域の識別情報をデコードして前記例外の発生時における資源のロック回数を求める処理と、
前記実行プログラム中の前記例外に対する例外ハンドラに付加された、当該例外ハンドラの実行時におけるロック回数を取得する処理と、
前記例外の発生時におけるロック回数と前記例外ハンドラの実行時におけるロック回数との差分だけ資源のロックを解除する処理とを前記コンピュータに実行させることを特徴とする例外処理プログラム。 - プログラム制御により情報処理を行うコンピュータ装置において、
プログラムを実行する実行手段と、
前記実行手段によるプログラムの実行中に例外が発生した場合に、当該例外を処理する例外処理手段とを備え、
前記例外処理手段は、
当該プログラムに付加された各コードの実行時における資源のロック回数に関する情報に基づいて、前記例外の発生時におけるロック回数と前記例外に対する例外ハンドラの実行時におけるロック回数とを求め、二つの当該ロック回数の差分だけ資源のロックを解除した後に、当該例外に対する処理を実行することを特徴とするコンピュータ装置。 - 前記例外処理手段は、前記プログラムに付加された、前記プログラムにおける各コードのアドレスとコードの実行時における資源のロック回数とを対応付けた対応情報に基づいて、前記例外を発生したコードのアドレスから前記例外の発生時における資源のロック回数を求めることを特徴とする請求項10に記載のコンピュータ装置。
- 前記例外処理手段は、前記プログラムに記述された、try領域内における各コードの実行時における資源のロック回数がエンコードされたtry領域の識別情報を用い、前記例外を発生したコードが含まれるtry領域の識別情報をデコードして前記例外の発生時における資源のロック回数を求めることを特徴とする請求項10に記載のコンピュータ装置。
- プログラムのソースコードをコンパイルして機械語コードに変換するコンパイラと、
機械語コードに変換された前記プログラムを実行する処理装置とを備えたコンピュータ装置において、
前記コンパイラは、
前記プログラムにおける関数のインライン展開に関する情報に基づいて、当該関数による資源のロックに関するロック情報を生成するロック情報生成部と、
前記ロック情報に基づいて、前記プログラム中の各コードの実行時におけるロック回数に関する情報を前記プログラムに付加する情報付加部とを備え、
前記処理装置は、
前記プログラムの実行中に例外が発生した場合に、前記ロック回数に関する情報に基づいて、当該例外を発生したコードの実行時におけるロック回数と前記例外に対する例外ハンドラの実行時におけるロック回数とを求め、二つの当該ロック回数の差分だけ資源のロックを解除した後に、当該例外に対する処理を実行することを特徴とするコンピュータ装置。 - 前記コンパイラは、
前記プログラム中に存在する不要なロックを削除し、ロックの削除の結果に応じて前記ロック情報生成部にて生成された前記ロック情報を更新する同期最適化部をさらに備え、
前記情報付加部は、前記同期最適化部により更新されたロック情報に基づいて、前記ロック回数に関する情報を前記プログラムに付加することを特徴とする請求項13に記載のコンピュータ装置。 - コンピュータを制御して実行プログラムを変換するプログラム変換方法において、
前記実行プログラムにおける関数のインライン展開に関する情報に基づいて、当該関数による資源のロックに関するロック情報を生成するステップと、
前記ロック情報に基づいて、前記実行プログラム中の各コードの実行時におけるロック回数に関する情報を前記実行プログラムに付加するステップと
を前記コンピュータに実現させることを特徴とするプログラム変換方法。 - コンピュータを制御して実行プログラムを変換する変換プログラムを当該コンピュータの入力手段が読取可能に記憶した記憶媒体において、
前記変換プログラムは、
前記実行プログラムにおける関数のインライン展開に関する情報に基づいて、当該関数による資源のロックに関するロック情報を生成する機能と、
前記ロック情報に基づいて、前記実行プログラム中の各コードの実行時におけるロック回数に関する情報を前記実行プログラムに付加する機能と
を前記コンピュータに実現させることを特徴とする記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001097182A JP3664478B2 (ja) | 2001-03-29 | 2001-03-29 | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 |
US10/147,195 US7089540B2 (en) | 2001-03-29 | 2002-05-15 | Compiling method with exception handling |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001097182A JP3664478B2 (ja) | 2001-03-29 | 2001-03-29 | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 |
US10/147,195 US7089540B2 (en) | 2001-03-29 | 2002-05-15 | Compiling method with exception handling |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002297396A JP2002297396A (ja) | 2002-10-11 |
JP3664478B2 true JP3664478B2 (ja) | 2005-06-29 |
Family
ID=31996028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001097182A Expired - Fee Related JP3664478B2 (ja) | 2001-03-29 | 2001-03-29 | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7089540B2 (ja) |
JP (1) | JP3664478B2 (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7194744B2 (en) * | 2002-12-17 | 2007-03-20 | International Business Machines Corporation | System and method for dynamic exception handling using an external exception handler |
CA2430383A1 (en) * | 2003-05-30 | 2004-11-30 | Ibm Canada Limited - Ibm Canada Limitee | Efficiently releasing locks when an exception occurs |
US7313790B2 (en) * | 2003-06-23 | 2007-12-25 | Intel Corporation | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
US7392513B2 (en) * | 2004-03-19 | 2008-06-24 | Intel Corporation | Methods and apparatus for merging critical sections |
US7526502B2 (en) * | 2004-09-10 | 2009-04-28 | Microsoft Corporation | Dynamic call site binding |
US7823150B2 (en) * | 2005-01-25 | 2010-10-26 | International Business Machines Corporation | Computer-implemented method, system and program product for establishing multiple read-only locks on a shared data object |
US7788650B2 (en) * | 2005-05-10 | 2010-08-31 | Intel Corporation | Compiler-based critical section amendment for a multiprocessor environment |
US7987452B2 (en) * | 2005-12-15 | 2011-07-26 | International Business Machines Corporation | Profile-driven lock handling |
US8176491B1 (en) * | 2006-08-04 | 2012-05-08 | Oracle America, Inc. | Fast synchronization of simple synchronized methods |
US7992139B2 (en) * | 2006-11-29 | 2011-08-02 | International Business Machines Corporation | Method, system and program product for transforming a single language program into multiple language programs |
US8423980B1 (en) * | 2008-09-18 | 2013-04-16 | Google Inc. | Methods for handling inlined functions using sample profiles |
CN102292709B (zh) * | 2009-04-28 | 2014-05-21 | 国际商业机器公司 | 用于变换在多线程上工作的程序的程序代码的方法和系统 |
US9250937B1 (en) * | 2013-11-06 | 2016-02-02 | The Regents Of The University Of California | Code randomization for just-in-time compilers |
US10726196B2 (en) * | 2017-03-03 | 2020-07-28 | Evolv Technology Solutions, Inc. | Autonomous configuration of conversion code to control display and functionality of webpage portions |
US11188355B2 (en) * | 2017-10-11 | 2021-11-30 | Barefoot Networks, Inc. | Data plane program verification |
US11442739B2 (en) * | 2019-09-16 | 2022-09-13 | International Business Machines Carporation | Exception handling |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5901308A (en) * | 1996-03-18 | 1999-05-04 | Digital Equipment Corporation | Software mechanism for reducing exceptions generated by speculatively scheduled instructions |
US6247169B1 (en) * | 1996-11-04 | 2001-06-12 | Sun Microsystems, Inc. | Structured exception-handling methods, apparatus, and computer program products |
US5968157A (en) * | 1997-01-23 | 1999-10-19 | Sun Microsystems, Inc. | Locking of computer resources |
US5881280A (en) * | 1997-07-25 | 1999-03-09 | Hewlett-Packard Company | Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor |
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
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 |
JP2000122875A (ja) * | 1998-10-19 | 2000-04-28 | Internatl Business Mach Corp <Ibm> | 例外処理方法およびシステム |
US6412109B1 (en) * | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
US6530079B1 (en) * | 1999-06-02 | 2003-03-04 | International Business Machines Corporation | Method for optimizing locks in computer programs |
US6757891B1 (en) * | 2000-07-12 | 2004-06-29 | International Business Machines Corporation | Method and system for reducing the computing overhead associated with thread local objects |
US6886094B1 (en) * | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US6857060B2 (en) * | 2001-03-30 | 2005-02-15 | Intel Corporation | System, apparatus and method for prioritizing instructions and eliminating useless instructions |
-
2001
- 2001-03-29 JP JP2001097182A patent/JP3664478B2/ja not_active Expired - Fee Related
-
2002
- 2002-05-15 US US10/147,195 patent/US7089540B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20030217327A1 (en) | 2003-11-20 |
JP2002297396A (ja) | 2002-10-11 |
US7089540B2 (en) | 2006-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3664478B2 (ja) | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 | |
JP2811990B2 (ja) | プログラム処理装置及びプログラム処理方法 | |
JP3790683B2 (ja) | コンピュータ装置、その例外処理プログラム及びコンパイル方法 | |
US20110119660A1 (en) | Program conversion apparatus and program conversion method | |
US7299462B2 (en) | Relocation format for linking | |
JP5204300B2 (ja) | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム | |
US8141035B2 (en) | Method for accessing internal states of objects in object oriented programming | |
JP2001282549A (ja) | プログラム変換装置及び方法並びに記録媒体 | |
US20010039654A1 (en) | Compiler processing system for generating assembly program codes for a computer comprising a plurality of arithmetic units | |
JP4754004B2 (ja) | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム | |
US6330714B1 (en) | Method and computer program product for implementing redundant lock avoidance | |
US7500229B2 (en) | Program converting method and storage medium | |
US20060107258A1 (en) | Program, program code optimization method, program code compile method, program code, and information processing system | |
JP2006185232A (ja) | 複数のプログラムの実行方法、プログラム変換方法及びこれを用いたコンパイラプログラム | |
US7770152B1 (en) | Method and apparatus for coordinating state and execution context of interpreted languages | |
US7080370B1 (en) | Method and apparatus for compiling source programs using one or more libraries | |
JP2006163686A (ja) | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 | |
JPH08263299A (ja) | プログラム変換方法 | |
US7287244B2 (en) | Efficiently releasing locks when an exception occurs | |
JP2005346407A (ja) | 動的コンパイルにおけるインライン展開実施方法 | |
JP2008102748A (ja) | プログラム実行方法、言語処理系、及び実行時ルーチン | |
KR20060092728A (ko) | 프리-프로세스에서 파일 검색 시간 단축을 통한 컴파일러의컴파일 속도 향상 방법 | |
JP2002073347A (ja) | 例外処理方法及びコンパイラ | |
JP2002099425A (ja) | グローバル変数のローカル変数変換方法 | |
Tzannes et al. | The compiler for the XMTC parallel language: Lessons for compiler developers and in-depth description |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041130 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050222 |
|
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: 20050322 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20050323 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050328 |
|
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: 20080408 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090408 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |