JPH11134198A - コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体 - Google Patents
コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体Info
- Publication number
- JPH11134198A JPH11134198A JP9298105A JP29810597A JPH11134198A JP H11134198 A JPH11134198 A JP H11134198A JP 9298105 A JP9298105 A JP 9298105A JP 29810597 A JP29810597 A JP 29810597A JP H11134198 A JPH11134198 A JP H11134198A
- Authority
- JP
- Japan
- Prior art keywords
- program
- initialization procedure
- class
- information
- classes
- 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.)
- Granted
Links
Classifications
-
- 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/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
ら構成されるプログラムをコンパイルするコンパイル処
理装置に関し、プログラムの実行速度の向上の実現を目
的とする。 【解決手段】コンパイル対象のステートメントが初期化
手続きを必要とするときに、その初期化手続きを特定す
る特定手段16と、特定手段16の特定する初期化手続
きが他のクラスに影響を及ぼさないとみなしてよいもの
に該当するのかを判断する判断手段17と、判断手段1
7が該当する初期化手続きであることを判断するとき
に、コンパイル対象のステートメントを初期化手続きを
呼び出さない形に変更するとともに、その初期化手続き
を持つクラスに対して、その旨の情報を記録する変更手
段18とを備えるように構成する。
Description
つ複数のクラスから構成されるプログラムをコンパイル
するコンパイル処理装置及び方法と、そのコンパイル処
理装置を実現するプログラムが記憶されるプログラム記
憶媒体と、初期化手続きを持つ複数のクラスから構成さ
れるプログラムを実行するプログラム実行装置及び方法
と、そのプログラム実行装置を実現するプログラムが記
憶されるプログラム記憶媒体とに関する。
ングの複雑化に伴って、言語仕様として、初期化を義務
ずけるものが多くなってきている。これは、プログラマ
が初期化を意識しなくても、初期化処理が行われること
によって、プログラムの誤りを減らそうという意図から
きている。
よいものであるが、それを保証するための機構によりプ
ログラムの実行速度が遅くなることが起こるので、この
問題点の解決を図ってプログラムの実行速度の向上を実
現していく必要がある。
グラムでは、データと手続きとを備えるカプセル化され
た複数のクラスからプログラムが構成されている。
タ処理を実行するものであり、相互に、データの参照と
手続きの呼び出しとが可能になっている。更に、このク
ラスは、クラスイニシャライザと呼ばれる初期化手続き
を有しており、このクラスイニシャライザは、それに係
るデータが最初にアクセスされる前や、それに係る手続
きが最初に呼び出される前に、一度だけ起動されて初期
化処理を実行する。
動を保証するために、従来のコンパイラでは、クラスイ
ニシャライザを必要とするステートメントをコンパイル
するときに、そのクラスイニシャライザが既に起動済み
であるのか否かをチェックするIF文を挿入する構成を
採って、そのIF文により、既に起動されていることを
判断するときには、そのクラスイニシャライザを呼び出
さないように処理し、未だ起動されていないことを判断
するときには、そのクラスイニシャライザを呼び出すと
ともに、そのクラスイニシャライザを持つクラスに起動
済みを示すフラグを立てるように処理していた。
行中にクラスイニシャライザを含まない形にプログラム
を書き換えることで、クラスイニシャライザの一度だけ
の起動の保証を実現するという方法を採るものもあっ
た。
を挿入することで、クラスイニシャライザの一度だけの
起動を保証するという前者の従来技術に従っていると、
クラスイニシャライザの呼び出し回数の可能性が多いと
きには、その呼び出し毎に、IF文によるチェック処理
が行われることから、プログラムの実行速度が遅くなる
という問題点があった。
ライザを含まない形にプログラムを書き換えることで、
クラスイニシャライザの一度だけの起動を保証するとい
う後者の従来技術に従っていると、インタプリンタのよ
うに翻訳処理と実行処理とを同時に行うような処理方式
の場合には有効であるものの、翻訳処理と実行処理とを
分離する処理方式の場合には、プログラムの中に自分自
身を書き換える仕組みを入れなければならないととも
に、その実行に要する時間によりプログラムの実行速度
が遅くなるという問題点があった。
であって、初期化手続きを持つ複数のクラスから構成さ
れるプログラムをコンパイルする構成を採るときにあっ
て、プログラムの実行速度の向上を実現する新たなコン
パイル処理装置及び方法の提供と、そのコンパイル処理
装置を実現するプログラムが記憶される新たなプログラ
ム記憶媒体の提供とを目的とするとともに、初期化手続
きを持つ複数のクラスから構成されるプログラムを実行
する構成を採るときにあって、プログラムの実行速度の
向上を実現する新たなプログラム実行装置及び方法の提
供と、そのプログラム実行装置を実現するプログラムが
記憶される新たなプログラム記憶媒体の提供とを目的と
する。
るコンパイル処理装置10の原理構成、図2に、本発明
を具備するプログラム実行装置30の原理構成を図示す
る。
化手続きを持つ複数のクラスから構成されるプログラム
をコンパイルするものであり、本発明のプログラム実行
装置30は、本発明のコンパイル処理装置10のコンパ
イルしたプログラムを実行するものである。
スプログラムを中間テキストに変換するフロントエンド
部11と、フロントエンド部11の後段に展開されて、
初期化手続きを必要とするステートメントについての変
更処理を実行する初期化処理部12と、初期化処理部1
2の後段に展開されて、コンパイル処理の最適化を行う
最適化部13と、最適化部13の後段に展開されて、オ
ブジェクトコードを生成するコード生成部14とを備え
る。
と、特定手段16と、判断手段17と、変更手段18
と、記録手段19と、管理手段20と、登録手段21
と、入手手段22と、除外手段23とを備える。
たコンパイル対象のステートメントを1つずつ順番に取
り出す。特定手段16は、取出手段15の取り出すステ
ートメントの必要とする初期化手続きを特定する。判断
手段17は、特定手段16の特定する初期化手続きが副
作用を持つのか否かを判断する。
持たない初期化手続きであることを判断するときに、そ
の初期化手続きを必要とするステートメントがその初期
化手続きを呼び出さない形になるようにとそのステート
メントを変更するとともに、その初期化手続きを持つク
ラスにその旨の情報を記録する。
各初期化手続きが他のクラスに影響を及ぼさないとみな
してよいのかを判断して、みなしてよいと判断する初期
化手続きを持つクラスに対して、その旨の情報を記録す
る。
きの属性情報を管理する。登録手段21は、対話処理に
従って、管理手段20にデータを登録する。入手手段2
2は、初期化手続きの実行回数情報を入手する。除外手
段23は、規定の初期化手続きを判断手段17の処理対
象から外す。
の持つ機能は具体的にはプログラムで実現されるもので
あり、このプログラムは、フロッピィディスクなどに記
憶されたり、サーバなどのディスクなどに記憶され、そ
れらからコンパイル処理装置10にインストールされて
メモリ上で動作することで、本発明を実現することにな
る。
は、本発明のコンパイル処理装置10のコンパイルした
プログラム(複数のクラスから構成される)を展開する
メモリ31と、メモリ31に展開されるクラスの管理を
実行するクラス管理機構32とを備える。
と、起動手段34とを備える。判断手段33は、メモリ
31に展開される各クラスに、本発明のコンパイル処理
装置10の記録する情報(変更手段18や記録手段19
の記録する情報)が記録されているのか否かを判断す
る。起動手段34は、プログラムの実行に先立って、ク
ラスの持つ初期化手続きを起動する。
の持つ機能は具体的にはプログラムで実現されるもので
あり、このプログラムは、フロッピィディスクなどに記
憶されたり、サーバなどのディスクなどに記憶され、そ
れらからプログラム実行装置30にインストールされて
メモリ上で動作することで、本発明を実現することにな
る。
処理装置10では、取出手段15がコンパイル対象のス
テートメントを1つ取り出すと、特定手段16は、その
取り出されたステートメントがクラスの持つ初期化手続
きを必要とするのか否かをチェックして、必要とすると
きには、その初期化手続きを特定する。
断手段17は、管理手段20の管理する属性情報を持つ
か持たないかをチェックすることで、その特定された初
期化手続きが他のクラスに影響を及ぼさないとみなして
よいものに該当するのかを判断する。これに該当する初
期化手続きは、副作用を持たないものとして扱われるこ
とになる。
更手段18は、副作用を持たない初期化手続きであるこ
とを判断されるものについては、その初期化手続きを必
要とするステートメントがその初期化手続きを呼び出さ
ない形になるようにとそのステートメントを変更すると
ともに、その初期化手続きを持つクラスにその旨の情報
を記録する。
の入手する実行回数情報に従って、特定手段16の特定
する初期化手続きが実行の可能性の少ないものであると
判断されるときには、本発明の処理対象とするまでもな
いので、その初期化手続きを判断手段17の処理対象か
ら外す。
グラム実行装置30では、メモリ31に展開されるプロ
グラムの実行が指示されると、判断手段33は、メモリ
31に展開される各クラスに、本発明のコンパイル処理
装置10の記録する情報が記録されているのか否かを判
断して、記録されていることを判断するときには、その
記録されている初期化手続きの実行が指示されていると
判断する。
動手段34は、プログラムの実行に先立って、判断手段
33により初期化手続きの実行を指示する情報が記録さ
れていると判断されるクラスの持つ初期化手続きを起動
対象として、プログラムの実行に先立って、それらの初
期化手続きを起動する。
期化手続きの内、副作用のないものについては、プログ
ラムの実行に先立って起動してしまう構成を採るととも
に、その副作用のない初期化手続きを必要とするステー
トメントがその初期化手続きを呼び出さないようにする
構成を採ることで、IF文を使わずに、クラスの持つ初
期化手続きの一度だけの起動を保証することを実現す
る。これによりプログラムの実行速度を向上できるよう
になる。
を詳細に説明する。図3に、本発明のコンパイル処理装
置10の一実施例を図示する。
イル処理装置10は、ソースファイル43に格納される
ソースプログラムをコンパイルしてオブジェクトファイ
ル44に格納するコンパイラ40と、コンパイラ40の
コンパイル処理に必要となる情報を管理する副作用判断
テーブル41と、端末45を介してプログラマと対話す
ることで、副作用判断テーブル41に情報を登録するテ
ーブルデータ登録プログラム42とを備える。
るプログラムは、図4に示すように、複数のクラス50
から構成され、これらの各クラス50は、データと手続
きとを有してカプセル化され、相互に、データの参照と
手続きの呼び出しとが可能になっている。そして、各ク
ラス50は、クラスイニシャライザ51と呼ばれる初期
化手続きを有している。このクラスイニシャライザ51
は、それに係るデータが最初にアクセスされる前や、そ
れに係る手続きが最初に呼び出される前に、一度だけ起
動されて初期化処理を実行する。
ス50に、メインプログラム52が展開され、このメイ
ンプログラム52は、必要に応じて他のクラス50に処
理要求のメッセージを送信するとともに、その処理結果
を受け取ることで規定のデータ処理を実行する。
イザ51は、他のクラス50に影響を及ぼす場合と、影
響を及ぼさない場合とがあり、副作用判断テーブル41
は、他のクラス50に影響を及ぼすクラスイニシャライ
ザ51の持つ属性情報を管理する。
へのポインタを使用している場合や、外部変数を使用し
ている場合や、外部呼び出しを行っている場合には、他
のクラス50に影響を及ぼすことになる。副作用判断テ
ーブル41は、このような属性情報を管理するのであ
る。
イル対象となるプログラムとして、Java(Sun Microsys
tems,Incの開発したプログラム言語)を想定している。
これから、副作用判断テーブル41は、図5に示すよう
に、自クラス50以外のクラス50の持つデータをアク
セスしている場合には、他のクラス50に影響を及ぼす
クラスイニシャライザ51であり、自クラス50以外の
クラス50の持つ手続きを呼び出している場合には、他
のクラス50に影響を及ぼすクラスイニシャライザ51
であるというような属性情報を管理することになる。
用判断テーブル41に登録されていない属性情報を持つ
クラスイニシャライザ51は、たとえ、他のクラス50
に影響を及ぼすものであっても、他のクラス50に影響
を及ぼさないものとして扱われることになる。
42は、プログラマと対話することで、副作用判断テー
ブル41に属性情報を登録するときに、他のクラス50
に影響を及ぼす可能性があっても、その可能性が極めて
小さいものとなる属性情報については、その登録を省略
することで、その属性情報を持つクラスイニシャライザ
51については、他のクラス50に影響を及ぼさないも
のとして扱うようにすることが可能である。
のクラス50に影響を及ぼす可能性があるクラスイニシ
ャライザ51を影響のないものとして扱う構成を採る
と、プログラムエラーが発生する可能性はあるものの、
プログラムの実行速度が向上することになる。
ログラム42は、図6に示すように、副作用判断テーブ
ル41に対して、属性情報に対応付けて他のクラス50
への影響度合いを示すレベル情報を登録することで、プ
ログラムエラーの発生とプログラムの実行速度の向上と
の兼ね合いを図る構成を採ることがある。
コンパイラ40が実行する処理フローの一実施例を図示
する。次に、この処理フローに従って、本発明のコンパ
イル処理装置10の実行する処理について詳細に説明す
る。
格納されるソースプログラムのコンパイル要求がある
と、そのプログラムを構成するクラスを順番に1つずつ
選択して、図7及び図8の処理フローを実行することで
コンパイル処理を実行する。
対象のクラスを選択すると、図7及び図8の処理フロー
に示すように、先ず最初に、ステップ1で、そのクラス
のソースプログラム(Javaで言うバイトコード)をソー
スファイル43から読み出して中間テキストに変換す
る。
従って未処理の中間テキストを1つ取り出し、続くステ
ップ3で、全ての中間テキストの取り出しを終了したの
か否かを判断する。
取り出しを終了していないことを判断するとき、すなわ
ち、ステップ2で未処理の中間テキストを選択できたこ
とを判断するときには、ステップ4に進んで、その中間
テキストがクラスイニシャライザ51を必要としている
のか否かを判断する。この判断処理は、中間テキストの
種別を判断することで行われる。
tic 」といった命令は、クラスイニシャライザ51の動
く可能性のあることが文法で決められているので、この
命令を持つ中間テキストについては、クラスイニシャラ
イザ51を必要としていると判断することになる。
イニシャライザ51を必要としていないことを判断する
ときには、次の中間テキストの処理に進むべく、ステッ
プ2に戻る。
スイニシャライザ51を必要としていることを判断する
ときには、ステップ5に進んで、必要としているクラス
イニシャライザ51がどのクラス50のものであるのか
を見つける。この特定処理は、コンパイラ40の持つシ
ンボルテーブルを参照することで実行される。
のシンボルテーブルのエントリー位置を指すインデック
スが入っているので、このインデックスを使ってシンボ
ルテーブルを参照することで、必要としているクラスイ
ニシャライザ51を持つクラス50を見つけることがで
きる。例えば、「getstatic #8」の指すシンボルテー
ブルのエントリー位置から、必要としているクラスイニ
シャライザ51がクラスa(a.class)の持つクラスイニ
シャライザ51であることを見つけるのである。
いるクラスイニシャライザ51を持つクラス50を見つ
けると、続いて、ステップ6で、そのクラス50に、そ
のクラスイニシャライザ51の副作用の有無情報が記録
されているのか否かをチェックする。この副作用の有無
情報の記録は、後述するステップ8/ステップ10で記
録するものであるが、既に、別のクラス50をコンパイ
ルするときや、同一のクラス50の別の中間テキストを
コンパイルするときに記録している可能性があるので、
このステップ6では、既に記録しているのか否かをチェ
ックするのである。
録されていないことを判断するときには、ステップ7に
進んで、中間テキストの必要としているクラスイニシャ
ライザ51が副作用を持つのか否かを判断する。この判
断処理は、副作用判断テーブル41を参照することで行
う。
他のクラス50に影響を及ぼすクラスイニシャライザ5
1の持つ属性情報が管理されているので、この属性情報
を持つクラスイニシャライザ51であるのか否かを判断
して、属性情報を持つことを判断するときには、副作用
を持つクラスイニシャライザ51と判断し、属性情報を
持たないことを判断するときには、副作用を持たないク
ラスイニシャライザ51と判断することで行う。
6に示すように、属性情報に対応付けて他のクラス50
への影響度合いを示すレベル情報を管理することがあ
り、このとき、プログラマから、レベル情報が指定され
ることがあるので、そのときには、指定されるレベル情
報の規定する属性情報(最も副作用の大きいレベルから
指定されるレベルまでの属性情報)を使って判断処理を
実行することになる。
しているクラスイニシャライザ51が副作用を持たない
ことを判断するときには、ステップ8に進んで、そのク
ラスイニシャライザ51を持つクラス50に、自クラス
50の持つクラスイニシャライザ51が副作用を持たな
いことを記録し、続くステップ9で、その中間テキスト
がそのクラスイニシャライザ51を呼び出さない形にな
るようにとその中間テキストのコードを変更する。そし
て、次の中間テキストの処理に進むべく、ステップ2に
戻る。
としているクラスイニシャライザ51が副作用を持つこ
とを判断するときには、ステップ10に進んで、そのク
ラスイニシャライザ51を持つクラス50に、自クラス
50の持つクラスイニシャライザ51が副作用を持つこ
とを記録してから、そのまま、次の中間テキストの処理
に進むべく、ステップ2に戻る。
としているクラスイニシャライザ51を持つクラス50
に、副作用の有無情報が記録されていることを判断する
ときには、ステップ7の判断処理を実行するまでもない
ので、ステップ11に進んで、その記録される副作用の
有無情報から、そのクラスイニシャライザ51が副作用
を持つのか否かを判断する。
トの必要としているクラスイニシャライザ51が副作用
を持たないことを判断するときには、ステップ12(図
8の処理フロー)に進んで、その中間テキストがそのク
ラスイニシャライザ51を呼び出さない形になるように
とその中間テキストのコードを変更してから、次の中間
テキストの処理に進むべくステップ2に戻り、一方、副
作用を持つことを判断するときには、そのまま、次の中
間テキストの処理に進むべくステップ2に戻る。
の変更処理を実行していくことで、ステップ3で、コン
パイル対象のクラス50の持つ全中間テキストについて
の処理終了を判断すると、ステップ13(図8の処理フ
ロー)に進んで、そのコンパイル対象のクラス50に、
そのクラス50の持つクラスイニシャライザ51の副作
用の有無情報が記録されているのか否かをチェックす
る。
記録されていないことを判断するときには、ステップ1
4に進んで、上述したステップ7と同一の処理を実行す
ることで、コンパイル対象のクラス50の持つクラスイ
ニシャライザ51が副作用を持つのか否かを判断して、
副作用を持たないことを判断するときには、ステップ1
5に進んで、そのクラス50に、自クラス50の持つク
ラスイニシャライザ51が副作用を持たないことを記録
し、一方、副作用を持つことを判断するときには、ステ
ップ16に進んで、そのクラス50に、自クラス50の
持つクラスイニシャライザ51が副作用を持つことを記
録する。
理を終了するか、ステップ13で、副作用の有無情報が
記録されていることを判断すると、ステップ17に進ん
で、コンパイルの最適化処理を行い、続くステップ18
で、コード生成処理を行うことで、コンパイル対象のク
ラス50のオブジェクトコードを生成して処理を終了す
る。
て、この図7及び図8の処理フローを実行することでコ
ンパイル処理を実行する。このようにして、本発明のコ
ンパイラ40は、副作用を持たないクラスイニシャライ
ザ51を必要とする中間テキストについては、その中間
テキストがそのクラスイニシャライザ51を呼び出さな
い形になるようにとその中間テキストのコードを変更し
ていくとともに、そのクラスイニシャライザ51を持つ
クラス50に、そのクラスイニシャライザ51が副作用
を持たない旨の情報を記録していくように処理するので
ある。
コンパイラ40は、クラスイニシャライザ51が副作用
を持つのか否かを検出し、その検出結果に応じて中間テ
キストの変更処理を実行していくときに、それと同期を
とって、その検出結果をクラス50に記録していく構成
を採ったが、中間テキストの変更処理とは全く切り離し
て、その変更処理の前あるいは後に、各クラス50の持
つクラスイニシャライザ51が副作用を持つのか否かを
検出して、それをクラス50に記録していく構成を採る
ことも可能である。
コンパイルしたプログラムを実行する、本発明のプログ
ラム実行装置30の実施例について説明する。図9に、
この本発明のプログラム実行装置30の一実施例を図示
する。
ラム実行装置30は、本発明のコンパイル処理装置10
のコンパイルしたプログラムを入手して主記憶61に格
納する入手プログラム60と、主記憶61に格納される
複数のクラス50で構成されるプログラムの管理処理を
実行するクラス管理プログラム62とを備える。
ら開始されるプログラムを制御することでデータ処理を
実行するクラス制御プログラム63と、本発明を実現す
べく設けられて、クラス50の持つクラスイニシャライ
ザ51の起動処理を実行するクラスイニシャライザ起動
プログラム64とを備える。
グラム64の実行する処理フローの一実施例を図示す
る。次に、この処理フローに従って、本発明のプログラ
ム実行装置30の実行する処理について詳細に説明す
る。
は、クラス制御プログラム63に対してプログラムの起
動要求が発行されると、図10の処理フローに示すよう
に、先ず最初に、ステップ1で、主記憶61に格納され
るクラス50の中から未処理のものを1つ取り出し、続
くステップ2で、全てのクラス50の取り出しを終了し
たのか否かを判断する。
り出しを終了していないことを判断するとき、すなわ
ち、ステップ1で未処理のクラス50を選択できたこと
を判断するときには、ステップ3に進んで、その取り出
したクラス50に記録される副作用の有無情報を読み出
す。すなわち、上述したように、本発明のコンパイル処
理装置10によりコンパイルされると、クラスイニシャ
ライザ51が副作用を持つのか否かを示す情報がクラス
50に記録されることになるので、この副作用の有無情
報を読み出すのである。
出した副作用の有無情報が副作用無しを表示しているの
か否かを判断し、副作用の有りを表示していることを判
断するときには、次のクラス50の処理に進むべくステ
ップ1に戻り、副作用の無しを表示していることを判断
するときには、ステップ5に進んで、ステップ1で取り
出したクラス50の持つクラスイニシャライザ51を起
動してから、次のクラス50の処理に進むべくステップ
1に戻る。
の取り出しの終了を判断すると、ステップ6に進んで、
クラス制御プログラム63に制御を渡すことでMainに制
御を渡して処理を終了する。
ライザ起動プログラム64は、本発明のコンパイル処理
装置10により検出される副作用を持たないクラスイニ
シャライザ51については、プログラムの実行に先立っ
て起動してしまうように処理するのである。
ライザ51の内、副作用のないものについては、プログ
ラムの実行に先立って起動してしまう構成を採るととも
に、その副作用のないクラスイニシャライザ51を必要
とするプログラム部分がそのクラスイニシャライザ51
を呼び出さないようにする構成を採ることで、IF文を
使わずに、クラスイニシャライザ51の一度だけの起動
の保証を実現するのである。
て、本発明について更に詳細に説明する。図11に示す
ようなクラスaとクラスbとで構成されるプログラムを
想定する。
で、クラスbで定義する変数iの値の1つインクリメン
トして、それをクラスbに書き戻すという処理を行う。
また、”START”という文字列を表示するというク
ラスイニシャライザ51(CI)を持っている。
0から参照可能な変数であることを定義するとともに、
変数iをプリントするという処理を行う。また、変数i
をゼロにリセットするというクラスイニシャライザ51
(CI)を持っている。
イニシャライザ51であることを示している。このプロ
グラムを受け取ると、コンパイラ40は、図12に示す
ようなクラスaの中間テキストを生成するとともに、図
13に示すようなクラスbの中間テキストを生成する。
いて説明するならば、「getstatic#8」を使ってシン
ボルテーブルにアクセスすることで、クラスbから変数
iの値を取り込めばよいことが分かる。また、「putsta
tic #8」を使ってシンボルテーブルにアクセスするこ
とで、クラスbの変数iに値を書き込めばよいことが分
かる。また、「invokestatic#10」を使ってシンボルテ
ーブルにアクセスすることで、「print ()」という手
続きの詳細を得ることができる。また、「getstatic #
9」を使ってシンボルテーブルにアクセスすることで、
出力先がどこであるかが分かる。また、「ldc #1」を
使ってシンボルテーブルにアクセスすることで、出力す
る文字列が分かる。また、「invokevirtual #11」を使
ってシンボルテーブルにアクセスすることで、「printl
n ()」という手続きの詳細を得ることができる。
トについて説明するならば、「getstatic #7」を使っ
てシンボルテーブルにアクセスすることで、出力先がど
こになるかが分かる。また、「getstatic #6」を使っ
てシンボルテーブルにアクセスすることで、変数iの値
を取り込めばよいことが分かる。また、「invokevirtua
l #8」を使ってシンボルテーブルにアクセスすること
で、「println ()」という手続きの詳細を得ることが
できる。また、「putstatic #6」を使ってシンボルテ
ーブルにアクセスすることで、変数iにゼロを書き込め
ばよいことが分かる。
ラスイニシャライザ51が副作用を持つか否かを判断す
る。クラスaの持つクラスイニシャライザ51について
は、「invokevirtual #11」という中間テキストを持
ち、この「invokevirtual 」は他のクラス50をアクセ
スする可能性があるので、副作用を持つと判断する。一
方、クラスbの持つクラスイニシャライザ51について
は、副作用を持たない「iconst 0」/「return」とい
う中間テキストと、自クラスaをアクセスすることで副
作用を持たない「putstatic 」という中間テキストとを
持つので、副作用を持たないと判断する。
イルしていくときに、副作用を持たないクラスイニシャ
ライザ51を必要とする中間テキストが見つかると、そ
の中間テキストがそのクラスイニシャライザ51を呼び
出さない形になるようにとその中間テキストのコードを
変更する。
変数iを必要とし、変数iの値をゼロにリセットする処
理を行うクラスbのクラスイニシャライザ51は副作用
を持たないことから、変数iを必要とするクラスaの持
つ中間テキストがクラスbのクラスイニシャライザ51
を呼び出さない形になるようにと、その中間テキストの
コードを変更する。この変更に従って、図12に示した
クラスaの中間テキストは、クラスイニシャライザ51
の呼び出しを行わないことを指示する「quick」を使っ
て、図14の矢印に示すものに変更されることになる。
とクラスbのソースプログラムは、図15に示すような
オブジェクトコードにコンパイルされることになる。こ
こで、図中に示す「a.Init flg =OFF」は、クラス
aのクラスイニシャライザ51が副作用を持つことを示
し、「b.Init flg =ON」は、クラスbのクラスイニ
シャライザ51が副作用を持たないことを示している。
シャライザ起動プログラム64の実行用に生成されるプ
ログラムであり、クラスイニシャライザ起動プログラム
64は、このプログラムに従って、クラスaの持つ「a.
Init flg 」に副作用を持たない旨を示すONが設定さ
れているときには、プログラムの実行前に、クラスaの
持つクラスイニシャライザ51を起動するとともに、ク
ラスbの持つ「b.Init flg 」に副作用を持たない旨を示
すONが設定されているときには、プログラムの実行前
に、クラスbの持つクラスイニシャライザ51を起動す
る。この起動処理に従って、クラスbの持つクラスイニ
シャライザ51がプログラムの実行前に起動されること
になる。
を使わずに、クラス50の持つクラスイニシャライザ5
1の一度だけの起動を保証できるようになる。これに対
して、従来技術では、図16に示すように、IF文を使
うことで、クラスイニシャライザ51が既に起動済みで
あるのか否かをチェックする構成を採って、既に起動さ
れていることを判断するときには、そのクラスイニシャ
ライザ51を呼び出さないように処理し、未だ起動され
ていないことを判断するときには、そのクラスイニシャ
ライザ51を呼び出すとともに、そのクラスイニシャラ
イザ51に起動済みを示すフラグを立てるように処理す
るという構成を採っているので、その都度IF文による
チェック処理が行われることで、プログラムの実行速度
が遅くなるという問題点があった。
てのクラスイニシャライザ51を処理対象とする構成を
採ったが、実行の可能性の少ないクラスイニシャライザ
51については処理対象から外すことで、コンパイル時
間の短縮を図る方法を採ることも可能である。
て、実行の可能性の少ないクラスイニシャライザ51を
特定し、それを処理対象から外すと、コンパイル時間の
短縮が図られることになる。実行の可能性の少ないクラ
スイニシャライザ51については、実行される可能性が
少ないので、IF文を挿入する従来技術に従ってもプロ
グラムの実行速度に与える影響が殆どなく、実質的に問
題とならないからである。
本発明はこれに限定されるものではない。例えば、実施
例に言うクラスとは、オブジェクト指向プログラムに言
うクラスに限られるものではなくて、広い意味でのカプ
セル化されたものを言うものである。
スイニシャライザを持つ複数のクラスから構成されるプ
ログラムを使ってデータ処理を実行する構成を採るとき
にあって、クラスの持つクラスイニシャライザの内、副
作用のないものについては、プログラムの実行に先立っ
て起動してしまう構成を採るとともに、その副作用のな
いクラスイニシャライザを必要とするプログラム部分が
そのクラスイニシャライザを呼び出さないようにする構
成を採ることで、IF文を使わずに、クラスイニシャラ
イザの一度だけの起動を保証できるようになる。これに
よりプログラムの実行速度を向上できるようになる。
する処理フローである。
Claims (12)
- 【請求項1】 初期化手続きを持つ複数のクラスから構
成されるプログラムをコンパイルするコンパイル処理装
置において、 コンパイル対象のステートメントが初期化手続きを必要
とするときに、該初期化手続きを特定する特定手段と、 上記特定手段の特定する初期化手続きが他のクラスに影
響を及ぼさないとみなしてよいものに該当するのかを判
断する判断手段と、 上記判断手段が該当する初期化手続きであることを判断
するときに、上記ステートメントを該初期化手続きを呼
び出さない形に変更する変更手段とを備えることを、 特徴とするコンパイル処理装置。 - 【請求項2】 請求項1記載のコンパイル処理装置にお
いて、 変更手段は、判断手段が他のクラスに影響を及ぼさない
とみなしてよいと判断する初期化手続きを持つクラスに
対して、その旨の情報を記録することを、特徴とするコ
ンパイル処理装置。 - 【請求項3】 請求項1記載のコンパイル処理装置にお
いて、 各初期化手続きが他のクラスに影響を及ぼさないとみな
してよいのかを判断して、みなしてよいと判断する初期
化手続きを持つクラスに対して、その旨の情報を記録す
る記録手段を備えることを、 特徴とするコンパイル処理装置。 - 【請求項4】 請求項1又は2記載のコンパイル処理装
置において、 他のクラスに影響を及ぼす初期化手続きの持つ属性情報
を管理する管理手段を備え、 判断手段は、上記管理手段の管理する属性情報を持つか
持たないかをチェックすることで判断処理を実行するこ
とを、 特徴とするコンパイル処理装置。 - 【請求項5】 請求項4記載のコンパイル処理装置にお
いて、 管理手段は、属性情報に対応付けて他のクラスへの影響
度合いを示すレベル情報を管理し、 判断手段は、指定されるレベル情報の規定する属性情報
を使ってチェック処理を実行することを、 特徴とするコンパイル処理装置。 - 【請求項6】 請求項4又は5記載のコンパイル処理装
置において、 対話処理に従って、管理手段にデータを登録する登録手
段を備えることを、 特徴とするコンパイル処理装置。 - 【請求項7】 請求項1ないし6記載のコンパイル処理
装置において、 初期化手続きの実行回数情報を入手する入手手段と、 上記入手手段の入手する実行回数情報に従って、特定手
段の特定する初期化手続きが実行の可能性の少ないもの
であると判断されるときに、該初期化手続きを判断手段
の処理対象から外す除外手段とを備えることを、 特徴とするコンパイル処理装置。 - 【請求項8】 初期化手続きを持つ複数のクラスから構
成されるプログラムをコンパイルするコンパイル処理方
法において、 コンパイル対象のステートメントが初期化手続きを必要
とするときに、該初期化手続きを特定する第1の処理過
程と、 第1の処理過程で特定する初期化手続きが他のクラスに
影響を及ぼさないとみなしてよいものに該当するのかを
判断する第2の処理過程と、 第2の処理過程で該当する初期化手続きであることを判
断するときに、上記ステートメントを該初期化手続きを
呼び出さない形に変更する第3の処理過程とを備えるこ
とを、 特徴とするコンパイル処理方法。 - 【請求項9】 初期化手続きを持つ複数のクラスから構
成されるプログラムをコンパイルするコンパイル処理装
置の実現に用いられるプログラムが記憶されるプログラ
ム記憶媒体であって、 コンパイル対象のステートメントが初期化手続きを必要
とするときに、該初期化手続きを特定する特定処理と、 上記特定処理の特定する初期化手続きが他のクラスに影
響を及ぼさないとみなしてよいものに該当するのかを判
断する判断処理と、 上記判断処理が該当する初期化手続きであることを判断
するときに、上記ステートメントを該初期化手続きを呼
び出さない形に変更する変更処理とをコンピュータに実
行させるプログラムが記憶されることを、 特徴とするプログラム記憶媒体。 - 【請求項10】 初期化手続きを持つ複数のクラスから
構成されるプログラムを実行するプログラム実行装置に
おいて、 プログラムの実行が指示されるときに、各クラスに、初
期化手続きの実行を指示する情報が記録されているのか
否かを判断する判断手段と、 上記判断手段により初期化手続きの実行を指示する情報
が記録されていると判断されるクラスの持つ初期化手続
きを起動対象として、プログラムの実行に先立って、該
初期化手続きを起動する起動手段とを備えることを、 特徴とするプログラム実行装置。 - 【請求項11】 初期化手続きを持つ複数のクラスから
構成されるプログラムを実行するプログラム実行方法に
おいて、 プログラムの実行が指示されるときに、各クラスに、初
期化手続きの実行を指示する情報が記録されているのか
否かを判断する第1の処理過程と、 第1の処理過程により初期化手続きの実行を指示する情
報が記録されていると判断されるクラスの持つ初期化手
続きを起動対象として、プログラムの実行に先立って、
該初期化手続きを起動する第2の処理過程とを備えるこ
とを、 特徴とするプログラム実行方法。 - 【請求項12】 初期化手続きを持つ複数のクラスから
構成されるプログラムを実行するプログラム実行装置の
実現に用いられるプログラムが記憶されるプログラム記
憶媒体であって、 プログラムの実行が指示されるときに、各クラスに、初
期化手続きの実行を指示する情報が記録されているのか
否かを判断する判断処理と、 上記判断処理により初期化手続きの実行を指示する情報
が記録されていると判断されるクラスの持つ初期化手続
きを起動対象として、プログラムの実行に先立って、該
初期化手続きを起動する起動処理とをコンピュータに実
行させるプログラムが記憶されることを、特徴とするプ
ログラム記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP29810597A JP3910701B2 (ja) | 1997-10-30 | 1997-10-30 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
US09/181,927 US6286136B1 (en) | 1997-10-30 | 1998-10-29 | Compile processing apparatus and method and program executing apparatus and method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP29810597A JP3910701B2 (ja) | 1997-10-30 | 1997-10-30 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11134198A true JPH11134198A (ja) | 1999-05-21 |
JP3910701B2 JP3910701B2 (ja) | 2007-04-25 |
Family
ID=17855231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP29810597A Expired - Fee Related JP3910701B2 (ja) | 1997-10-30 | 1997-10-30 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6286136B1 (ja) |
JP (1) | JP3910701B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012018786A (ja) * | 2010-07-07 | 2012-01-26 | Dainippon Screen Mfg Co Ltd | 電池用電極の製造方法、電池の製造方法、電池、車両および電子機器 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6430739B1 (en) * | 1999-07-16 | 2002-08-06 | Acceleration Software International Corporation | Software execution contingent on home page setting |
JP3640081B2 (ja) * | 1999-12-27 | 2005-04-20 | 日本電気株式会社 | Mpiプログラムのコンパイルにおける最適化方法 |
US7577951B2 (en) * | 2002-05-30 | 2009-08-18 | Hewlett-Packard Development Company, L.P. | Performance of computer programs while they are running |
GB0325553D0 (en) * | 2003-11-01 | 2003-12-03 | Ibm | Method and apparatus for activating/deactivating run-time determined software routines in Java compiled bytecode applications |
US20060288336A1 (en) * | 2005-06-21 | 2006-12-21 | Microsoft Corporation | Module initialization |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0695312B2 (ja) * | 1991-11-21 | 1994-11-24 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータプログラムを処理する方法およびシステム |
JP2000503785A (ja) * | 1994-12-13 | 2000-03-28 | ノベル,インコーポレイテッド | ネットワークディレクトリを更新または変更するための方法ならびにその装置 |
US6085034A (en) * | 1996-03-18 | 2000-07-04 | International Business Machines Corporation | Constructor based object initialization with overrides |
-
1997
- 1997-10-30 JP JP29810597A patent/JP3910701B2/ja not_active Expired - Fee Related
-
1998
- 1998-10-29 US US09/181,927 patent/US6286136B1/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012018786A (ja) * | 2010-07-07 | 2012-01-26 | Dainippon Screen Mfg Co Ltd | 電池用電極の製造方法、電池の製造方法、電池、車両および電子機器 |
Also Published As
Publication number | Publication date |
---|---|
JP3910701B2 (ja) | 2007-04-25 |
US6286136B1 (en) | 2001-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100712767B1 (ko) | 컴파일된 코드에서 동적 클래스 초기화 검사의 비용을 줄이기 위한 컴퓨터 시스템의 명령어 컴파일 방법 및 그 컴퓨터 판독가능 매체 | |
US6093216A (en) | Method of run-time tracking of object references in Java programs | |
JP4833206B2 (ja) | 最適化されたプログラムのためのアンワインド情報の生成 | |
US6363522B1 (en) | Method and apparatus for handling exceptions as normal control flow | |
JPH0836488A (ja) | ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置 | |
US7124407B1 (en) | Method and apparatus for caching native code in a virtual machine interpreter | |
US7467376B2 (en) | Semantic analysis based compression of interpreted code by replacing object instruction groups with special instruction specifying a register representing the object | |
US7086044B2 (en) | Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization | |
JP2001022591A (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
US6519768B1 (en) | Instruction translation method | |
US6625807B1 (en) | Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation | |
US5854928A (en) | Use of run-time code generation to create speculation recovery code in a computer system | |
US6895579B2 (en) | Method and apparatus for maintaining exception reporting for register promotion | |
JPH11134198A (ja) | コンパイル処理装置、コンパイル処理方法、プログラム実行装置、プログラム実行方法及びプログラム記憶媒体 | |
JP2919302B2 (ja) | Cpuシミュレーション方法 | |
JP2817786B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
WO2007074469A2 (en) | Method and system for compiling a source code | |
US7353163B2 (en) | Exception handling method and apparatus for use in program code conversion | |
JP2003114809A (ja) | シミュレーション装置及びシミュレーション方法 | |
JP2000047879A (ja) | コンパイル方法及び装置、実行方法、及びプログラム実行装置 | |
US6954926B1 (en) | Label address translating device | |
US20240134666A1 (en) | Hybrid just in time load module compiler with performance optimizations | |
JP2008102748A (ja) | プログラム実行方法、言語処理系、及び実行時ルーチン | |
KR100258095B1 (ko) | 칠에서의 초기화되지 않은 이름의 발견방법 | |
EP1033651B1 (en) | Instruction translation method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060908 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060919 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061116 |
|
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: 20070123 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070125 |
|
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: 20110202 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110202 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120202 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |