JPS62205434A - 再帰呼出し可能プログラムのコンパイル処理方式 - Google Patents

再帰呼出し可能プログラムのコンパイル処理方式

Info

Publication number
JPS62205434A
JPS62205434A JP4791586A JP4791586A JPS62205434A JP S62205434 A JPS62205434 A JP S62205434A JP 4791586 A JP4791586 A JP 4791586A JP 4791586 A JP4791586 A JP 4791586A JP S62205434 A JPS62205434 A JP S62205434A
Authority
JP
Japan
Prior art keywords
data area
program
data
recursive call
call
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.)
Pending
Application number
JP4791586A
Other languages
English (en)
Inventor
Masaharu Nakazawa
中沢 正治
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP4791586A priority Critical patent/JPS62205434A/ja
Publication of JPS62205434A publication Critical patent/JPS62205434A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概要〕 再帰呼出し可能なソースプログラムをコンパイルするに
あたって、データ域を、プログラムの命令域と共に予め
確保される静的データ域としておいて、再帰呼出しが行
われたならば、該静的データ域のデータを動的データ域
に対して退避/復元するオブジェクトを生成することに
より、コンパイル結果のオブジェクトプログラムに関す
る実行性能を向上させる。
〔産業上の利用分野〕
本発明は2例えばPL/I等のコンピュータ言語で記述
されたソースプログラムをコンパイルする処理方式に係
り、特に再帰呼出し可能なプログラムの実行性能を向上
させた再帰呼出し可能プログラムのコンパイル処理方式
に関するものである。
〔従来の技術〕
第4図は従来の再帰呼出し方式を説明するための図であ
る。
第4図において、31はプログラム呼出し部。
32は再帰呼出し可能プログラム、34は動的データ域
、34−0は動的データ域34における現世代データ、
34−1は前世代データ、・・・、34−nは最古世代
データを表す。
プログラムが直接的または間接的に自分自身を呼び出す
処理を、再帰呼出しという。一般にプログラムは、命令
部とその命令部が扱うデータ部とからなるが、再帰呼出
しの場合には、データ部が重複使用されるのを避ける必
要がある。そのため。
従来、第4図に示すように、再帰呼出し可能プログラム
32のデータ部は、呼び出される度にそれぞれ固有な領
域を動的データ域34として確保して、使用するように
されている。
〔発明が解決しようとする問題点〕
第4図に示した従来の方式によれば、再帰呼出しが行わ
れない場合でも、必ず1回は動的に領域を確保し、プロ
グラム本体部では、その動的データ域に対して参照/更
新のデータ処理を行う。そのため、静的データ域の場合
に比べて、処理速度が遅くなるという問題があった。
本発明は上記問題点の解決を図り、再帰呼出し可能プロ
グラムであっても、静的データ域を使用できるようにし
て、オブジェクトに関する実行処理速度を向上させるこ
とを目的としている。
〔問題点を解決するための手段〕
第1図は本発明の基本構成例を示す。
第1図において、11ないし13は磁気ディスク装置等
の外部記憶装置、14はPL/I言語等により記述され
たソースプログラム、15はソースプログラム14を内
部コードに変換した中間コード、16は機械語命令/デ
ータからなるオブジェクトプログラム、17はCPUお
よびメモリからなる処理装置、18はソースプログラム
14を翻訳するコンパイラを表す。
コンパイラ18中のソース解釈部19は、外部記憶装置
11からソースプログラム14を入力し。
文解釈を行って、中間コード(テキスト)15に展開す
る処理を実行するものである。記憶域割付は部20は、
プログラム中に出現する各種データに記憶内番地を割り
当てる処理を実行する。このときに割り当てる固定的な
データ域は、静的データ域である。
中間コード最適化部21は、中間コード15のレベルで
、実行速度を向上させるための最適化処理を行うもので
ある。レジスタ使用決定部22は。
中間コード15に現れたデータに実際の資源(レジスタ
)を割り当てる処理を行う。
オブジェクト出力部23は、中間コード15を機械語に
変換し、外部記憶装置13にオブジェクトプログラム1
6を出力する。特に、初期設定オブジェクト出力部24
は、オブジェクトプログラム16における初期設定部2
7を出力するもので。
この初期設定部27には、再帰呼出しであるか否かを判
定する命令、再帰呼出しである場合に動的データ域を確
保する命令、静的データ域のデータを動的データ域に退
避する命令が含まれる。
データ処理オブジェクト出力部25は、プログラム本体
部28を出力するものであって、プログラム本体部28
には、静的データ域のデータを処理する命令が含まれる
。終了処理オブジェクト出力部26は、終了処理部29
を出力するもので。
この終了処理部29には、再帰呼出しであるか否かを判
定する命令、再帰呼出しである場合に、動的データ域に
退避されたデータを静的データ域に復元する命令、それ
から不要となった動的データ域を解放する命令が含まれ
る。
〔作用〕
本発明によれば、従来、最初から動的データ域とされて
いたデータ域が、固定的な静的データ域として、コンパ
イル時に予め確保される。従って。
再帰呼出しでないプログラム実行の場合には、動的デー
タ域の確保/解放等の処理が伴わないため。
処理が高速化する。また、オブジェクトプログラム16
におけるプログラム本体部28では、動的データ域を意
識する必要がなく、静的データ域のみを対象としてデー
タを処理すればよく、処理が簡単化される。
〔実施例〕
第2図は本発明に係る再帰呼出しの制御を説明するため
の図、第3図は本発明によって生成されたオブジェクト
プログラムに関する処理説明図を示す。
例えば、PL/I言語等のコンパイラでは、記憶域クラ
スに5TATI C属性が指定されると。
コンパイル時に静的データ域を割り当て、AUTOMA
TI C属性が指定されると、プログラムの実行時にデ
ータ域を割り当てる処理を行うようなオブジェクトプロ
グラムを生成する。そこで、再帰呼出しを行う可能性の
あるプログラムでは、記憶域クラスとして、AUTOM
ATIC属性を指定することが行われる。
しかし9本発明の場合、上記AUTOMATfC属性が
指定されていても、その大きさが定数である場合には、
コンパイル時にその大きさ分の静的データ域の割り当て
を行う。
従って、第2図(A)図示のように、プログラム呼出し
部31が、再帰呼出し可能プログラム32を呼び出し、
再帰呼出し可能プログラム32が。
実際には再帰呼出しを行うことなく、プログラム呼出し
部31へ復帰するような場合には、静的データ域33の
みで処理が行われ、動的データ域は全く使用されること
がない。
一方、第2図(B)に示すように、プログラム呼出し部
31が再帰呼出し可能プログラム32を呼び出し、再帰
呼出し可能プログラム32が、さらに自分自身を呼び出
すような制御移行を行う場合1次のような処理となる。
再帰呼出し可能プログラム32は、常に静的データ域3
3が現世代データを持つものとしてデータ処理を行う。
再帰呼出し可能プログラム32の入口点では、再帰呼出
しであるか否かの判定が行われる。なお、この判定は2
例えば内部制御領域に呼出しカウンタ等を設けておくこ
とにより、実行可能である。再帰呼出しである場合には
、動的データ域34として、静的データ域33のサイズ
分の領域を切り出し、静的データ域33のデータをその
領域に退避する。この退避されたデータが。
前1代データ34−1となる。さらに再帰呼出しが繰り
返されると、順次、動的データ域34の切り出しが行わ
れ、静的データ域33上の現世代データが、動的データ
域34上の領域に退避されていく。
一般に、再帰呼出し可能プログラム32には。
所定の終了条件判定部が存在し、その終了条件が満足さ
れると、呼出し元へ復帰する処理が行われる。呼出し元
が、直接的または間接的に自分自身である場合には、復
帰前に、動的データ域34に退避していた最新世代のデ
ータを静的データ域33に復元し、その不要となったデ
ータ域を解放する。同様に、再帰呼出しに関する復帰が
繰り返されると、動的データ域34から静的データ域3
3へのデータ復元が繰り返される。
即ち、再帰呼出し可能プログラム32は、自分自身が活
きている状態で、2回目以降の呼出しがなされた場合に
のみ、動的データ域34の確保処理を行うことになる。
第3図は、オブジェクトプログラム16に含まれる命令
の処理内容を示している。以下の説明における番号■〜
■は、第3図に示す番号■〜■に対応する。
■ プログラムの実行開始時に制御が渡される初期設定
部27において、現在の呼出しが、再帰呼出しであるか
否か、即ち、2回目以降の呼出しであるか否かを判定す
る。再帰呼出しでない場合には、処理■へ制御を移行す
る。
■ 再帰呼出しである場合、データの領域を動的に確保
する。なお、この動的データ域の確保処理は、共通ルー
チンにより、必要に応じてオペレーティング・システム
が提供するマクロを使用して行うが、この確保処理に関
する詳細については、従来と同様であるので説明を省略
する。
■ 確保した動的データ域に、静的データ域の内容を退
避する。
■ 静的データ域を使用して、記述されたプログラムに
従ったデータ処理を実行する。
■ プログラム本体部28による処理終了後に。
終了処理部29が呼び出されると、終了処理部29は、
まず現在の呼出しが、再帰呼出しであったかどうかを判
定する。再帰呼出しでない場合、処理を終了する。
■ 再帰呼出しである場合には、処理■において退避し
ていた動的データ域のデータを静的データ域に復元する
■ 動的データ域の解放を共通ルーチンにより実行し、
呼出し元へ制御を戻す。
本発明の実施例として、PL/I言語のコンパイラにつ
いて説明したが、他の言語に関する再帰呼出し可能プロ
グラムのコンパイラについても。
同様に本発明を適用することができる。
〔発明の効果〕
以上説明したように2本発明によれば、コンパイル結果
である再帰呼出し可能なプログラムの実行に関して、再
帰呼出しでない場合の実行性能が向上する。また、プロ
グラム本体部では、静的データ域のみを対象としてデー
タを処理すればよく。
オブジェクトの組立てが簡単化、される。
【図面の簡単な説明】
第1図は本発明の基本構成例、第2図は本発明に係る再
帰呼出しの制御を説明するための図、第3図は本発明に
よって生成されたオブジェクトプログラムに関する処理
説明図、第4図は従来の再帰呼出し方式を説明するため
の図を示す。 図中、11〜13は外部記憶装置、14はソースプログ
ラム、15は中間コード、16はオブジェクトプログ、
ラム、17は処理装置、18はコンパイラ、19はソー
ス解釈部、20は記憶域割付は部、21は中間コード最
適化部、22はレジスタ使用決定部、23はオブジェク
ト出力部、24は初期設定オブジェクト出力部、25は
データ処理オブジェクト出力部、26は終了処理オブジ
ェクト出力部、27は初期設定部、28はプログラム本
体部、29は終了処理部を表す。 特許出願人   富士通株式会社 代理人弁理士  森1)寛(外1名) +A) )l:#−’1%ロ!−仏し 采2圓 λ7゛ソ;クト7°ロク゛ラム%チ里名ちと1日月図J
3I21

Claims (1)

  1. 【特許請求の範囲】 再帰呼出し可能なソースプログラム(14)を翻訳して
    オブジェクトプログラム(16)を出力するコンパイル
    処理機能を有するコンパイラ(18)であって、プログ
    ラムの初期設定部分において現在の呼出しが再帰呼出し
    であるか否かを判定し、再帰呼出しである場合に、予め
    指定された大きさのデータ域を動的に確保し、該動的デ
    ータ域に静的データ域のデータを退避するオブジェクト
    を出力する初期設定オブジェクト出力部(24)と、 予めプログラムの命令域と共に確保された静的データ域
    を使用して、データを処理するオブジェクトを出力する
    データ処理オブジェクト出力部(25)と、 プログラムの終了処理部分において現在の呼出しが再帰
    呼出しであるか否かを判定し、再帰呼出しである場合に
    、上記動的データ域に退避されたデータを上記静的デー
    タ域に復元し、上記動的データ域を解放するオブジェク
    トを出力する終了処理オブジェクト出力部(26)とを
    備えたことを特徴とする再帰呼出し可能プログラムのコ
    ンパイル処理方式。
JP4791586A 1986-03-05 1986-03-05 再帰呼出し可能プログラムのコンパイル処理方式 Pending JPS62205434A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4791586A JPS62205434A (ja) 1986-03-05 1986-03-05 再帰呼出し可能プログラムのコンパイル処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4791586A JPS62205434A (ja) 1986-03-05 1986-03-05 再帰呼出し可能プログラムのコンパイル処理方式

Publications (1)

Publication Number Publication Date
JPS62205434A true JPS62205434A (ja) 1987-09-10

Family

ID=12788660

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4791586A Pending JPS62205434A (ja) 1986-03-05 1986-03-05 再帰呼出し可能プログラムのコンパイル処理方式

Country Status (1)

Country Link
JP (1) JPS62205434A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01136239A (ja) * 1987-11-24 1989-05-29 Fujitsu Ltd プログラム翻訳処理方式
JPH0268631A (ja) * 1988-09-02 1990-03-08 Fujitsu Ltd コンパイラシステム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01136239A (ja) * 1987-11-24 1989-05-29 Fujitsu Ltd プログラム翻訳処理方式
JPH0268631A (ja) * 1988-09-02 1990-03-08 Fujitsu Ltd コンパイラシステム

Similar Documents

Publication Publication Date Title
US8271965B2 (en) Apparatus to guarantee type and initialization safety in multithreaded programs
US6240547B1 (en) Method and apparatus for dynamically deoptimizing compiled activations
JP2666847B2 (ja) 異種言語間連絡方式
Krall Efficient JavaVM just-in-time compilation
US5530870A (en) Arrangement for efficiently transferring program execution between subprograms
US6314560B1 (en) Method and apparatus for a translation system that aggressively optimizes and preserves full synchronous exception state
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
JPH01154267A (ja) 入出力機器制御プログラムのアドレス解決方法
US5987258A (en) Register reservation method for fast context switching in microprocessors
Theobald et al. Overview of the Threaded-C language
EP0621535A2 (en) Interrupt handling
US5826087A (en) Method and apparatus for cross calling programs of different lexical scoping methodology
JP2991242B2 (ja) マルチプロセッサコンピュータシステム使用方法
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
JPS62205434A (ja) 再帰呼出し可能プログラムのコンパイル処理方式
US7162718B1 (en) Language extension for light weight threading in a JVM
JPH03164835A (ja) インタプリタ型言語処理系における大域変数処理のコンパイル方法
JPH0991151A (ja) コンパイル装置及びプロセッサ装置
JPS60200341A (ja) 文字デ−タの仮想先頭アドレツシング方式
JPH0293947A (ja) 電子計算機
JPH04178738A (ja) レジスタアロケーション方式
JPH08115221A (ja) Cコンパイラ
JPH02130637A (ja) ソースコード翻訳方式
JPS62137641A (ja) 高級言語のコンパイラ
JPH02190933A (ja) プログラミング言語翻訳処理装置