JP2666847B2 - 異種言語間連絡方式 - Google Patents
異種言語間連絡方式Info
- Publication number
- JP2666847B2 JP2666847B2 JP63137397A JP13739788A JP2666847B2 JP 2666847 B2 JP2666847 B2 JP 2666847B2 JP 63137397 A JP63137397 A JP 63137397A JP 13739788 A JP13739788 A JP 13739788A JP 2666847 B2 JP2666847 B2 JP 2666847B2
- Authority
- JP
- Japan
- Prior art keywords
- module
- language
- interpreter
- compiler
- compatible
- 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
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
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、インタプリタ言語で記述されたモジュール
からコンパイラ言語で記述およびコンパイルされたモジ
ュールを呼び出す他言語呼び出し機能において、このコ
ンパイラ言語で記述およびコンパイルされたモジュール
から、さらにインタプリタ言語で記述された他のモジュ
ールを呼び出す異種言語間連絡方式に関する。
からコンパイラ言語で記述およびコンパイルされたモジ
ュールを呼び出す他言語呼び出し機能において、このコ
ンパイラ言語で記述およびコンパイルされたモジュール
から、さらにインタプリタ言語で記述された他のモジュ
ールを呼び出す異種言語間連絡方式に関する。
従来、Lisp等のインタプリタ言語で記述されたモジュ
ール(以下、インタプリタモジュールとする)と、C等
のコンパイラ言語で記述およびコンパイルされたモジュ
ール(以下、他言語モジュールとする)とにおいては、
インタプリタモジュールが、他言語モジュールを呼び出
すことが広く行なわれている。この従来の技術の第1の
目的は、利用者の既存のモジュールあるいはシステムに
よって提供されるライブラリ等のコンパイラ言語対応モ
ジュールをインタプリタの環境で利用することにある。
第2の目的は、例えば、高速性が特に要求される数値計
算処理をFORTRANを用いて記述する等、各言語の特長を
生かした処理を行なうことにある。このような他言語モ
ジュールをインタプリタから呼び出す機能は『他言語呼
び出し』と呼ばれ、利用者が該他言語呼び出しを使用す
る際のインタフェースは、2つに大別される。すなわ
ち、 (1)他言語モジュールを呼び出すための専用のモジュ
ールが提供され、利用者はそのモジュールを窓口として
他言語モジュールを呼び出し、返却値があれば受けとる
というインタフェース。
ール(以下、インタプリタモジュールとする)と、C等
のコンパイラ言語で記述およびコンパイルされたモジュ
ール(以下、他言語モジュールとする)とにおいては、
インタプリタモジュールが、他言語モジュールを呼び出
すことが広く行なわれている。この従来の技術の第1の
目的は、利用者の既存のモジュールあるいはシステムに
よって提供されるライブラリ等のコンパイラ言語対応モ
ジュールをインタプリタの環境で利用することにある。
第2の目的は、例えば、高速性が特に要求される数値計
算処理をFORTRANを用いて記述する等、各言語の特長を
生かした処理を行なうことにある。このような他言語モ
ジュールをインタプリタから呼び出す機能は『他言語呼
び出し』と呼ばれ、利用者が該他言語呼び出しを使用す
る際のインタフェースは、2つに大別される。すなわ
ち、 (1)他言語モジュールを呼び出すための専用のモジュ
ールが提供され、利用者はそのモジュールを窓口として
他言語モジュールを呼び出し、返却値があれば受けとる
というインタフェース。
(2)利用者が他言語モジュールの言語種別、引数およ
び返却値の型等を宣言することによって、インタプリタ
言語で記述されている場合と同一の手順で該他言語モジ
ュールを呼び出すことを可能とするインタフェース。
び返却値の型等を宣言することによって、インタプリタ
言語で記述されている場合と同一の手順で該他言語モジ
ュールを呼び出すことを可能とするインタフェース。
いずれにせよ、上述した他言語呼び出しにおいては、
他言語モジュールに引数を渡し、他言語モジュールがそ
れを用いて何らかの処理を行ない、返却値を戻すという
実行形態を採っている。
他言語モジュールに引数を渡し、他言語モジュールがそ
れを用いて何らかの処理を行ない、返却値を戻すという
実行形態を採っている。
この他言語呼び出しに加え、さらに呼び出された他言
語モジュールから他のインタプリタモジュールを呼び出
すようにすることにより、例えば他言語モジュールが、
処理の途中結果を引数にしてインタプリタモジュールを
呼び出し、その結果を自身の動作の制御に利用するとい
った柔軟な処理が可能となる。上述した他言語呼び出し
と同様に、他言語モジュールがインタプリタモジュール
を呼び出す際の利用者のインタフェースは、次の2つに
大別される。
語モジュールから他のインタプリタモジュールを呼び出
すようにすることにより、例えば他言語モジュールが、
処理の途中結果を引数にしてインタプリタモジュールを
呼び出し、その結果を自身の動作の制御に利用するとい
った柔軟な処理が可能となる。上述した他言語呼び出し
と同様に、他言語モジュールがインタプリタモジュール
を呼び出す際の利用者のインタフェースは、次の2つに
大別される。
(3)インタプリタモジュールを呼び出すための、コン
パイラ言語のモジュールが提供され、利用者は他言語モ
ジュールの中で該モジュールを窓口としてインタプリタ
モジュールを呼び出すというインタフェース。
パイラ言語のモジュールが提供され、利用者は他言語モ
ジュールの中で該モジュールを窓口としてインタプリタ
モジュールを呼び出すというインタフェース。
(4)利用者は、他言語モジュールの中で、インタプリ
タモジュールをあたかも該他言語で記述されているよう
にその参照を記述してコンパイラする一方、該他言語モ
ジュールがインタプリタ内に動的にリンクされる以前に
インタプリタモジュールを定義し、また、該インタプリ
タモジュールを呼び出す他言語の言語種別、引数および
返却値の型等を宣言しておくというインタフェース。
タモジュールをあたかも該他言語で記述されているよう
にその参照を記述してコンパイラする一方、該他言語モ
ジュールがインタプリタ内に動的にリンクされる以前に
インタプリタモジュールを定義し、また、該インタプリ
タモジュールを呼び出す他言語の言語種別、引数および
返却値の型等を宣言しておくというインタフェース。
こういった利用技術を可能としている処理系におい
て、その実現方法およびその使用の際の手順はそれぞれ
の処理系に依存した方式がとられている。上記(3)に
よるインタフェースを実現している例としては、Lispの
処理系が、CからLispを呼うためのモジュールとしてli
sp−call(index,arg1,arg2,…,argn)というモジュー
ルを提供している例がある。引数のうち、indexは、呼
び出すべきLispモジュールのアドレスを格納した表(以
後、アドレス格納表と呼ぶ)の要素の番号である、残り
の引数は全て該Lispモジュールに渡すべき引数である。
利用者は、上記lisp−callを用いて、Lispモジュールを
呼び出すCのモジュールを記述し、コンパイルする。つ
いでLispを起動し、前記コンパイルによって得られたオ
ブジェクトファイルに関する参照の解決を動的に行な
い、ロードし、次に上記(2)のインタフェースに従っ
て、該Cモジュールを呼び出すLispモジュールを作成す
る。この動的なリンク処理にはオペレーティングシステ
ムが提供している静的リンカを動的に呼び出す手法を用
いている。次に、上記lisp−callから呼ばれるべきLisp
モジュールを定義し、そのアドレスを上記アドレス格納
表に格納し、その後、その表の要素の番号を、たとえば
引数として渡すことにより、該アドレス格納表の対応す
るモジュールアドレスを得て、利用者のCモジュールか
ら該Lispモジュールを呼び出すインタフェースを実現し
ている。
て、その実現方法およびその使用の際の手順はそれぞれ
の処理系に依存した方式がとられている。上記(3)に
よるインタフェースを実現している例としては、Lispの
処理系が、CからLispを呼うためのモジュールとしてli
sp−call(index,arg1,arg2,…,argn)というモジュー
ルを提供している例がある。引数のうち、indexは、呼
び出すべきLispモジュールのアドレスを格納した表(以
後、アドレス格納表と呼ぶ)の要素の番号である、残り
の引数は全て該Lispモジュールに渡すべき引数である。
利用者は、上記lisp−callを用いて、Lispモジュールを
呼び出すCのモジュールを記述し、コンパイルする。つ
いでLispを起動し、前記コンパイルによって得られたオ
ブジェクトファイルに関する参照の解決を動的に行な
い、ロードし、次に上記(2)のインタフェースに従っ
て、該Cモジュールを呼び出すLispモジュールを作成す
る。この動的なリンク処理にはオペレーティングシステ
ムが提供している静的リンカを動的に呼び出す手法を用
いている。次に、上記lisp−callから呼ばれるべきLisp
モジュールを定義し、そのアドレスを上記アドレス格納
表に格納し、その後、その表の要素の番号を、たとえば
引数として渡すことにより、該アドレス格納表の対応す
るモジュールアドレスを得て、利用者のCモジュールか
ら該Lispモジュールを呼び出すインタフェースを実現し
ている。
また、上記(4)によるインタフェースを実現してい
る例としては、Lispにおいて、define−foreign−entry
というモジュールを提供し、このモジュールにLispのモ
ジュール名、該Lispモジュールを参照する他言語モジュ
ールの格納領域名、引数および返却値の属性等を引数と
して与え、さらに動的リンクを実行することにより、Li
spモジュールを他言語モジュールから同一モジュール名
で呼び出し可能としている例がある。
る例としては、Lispにおいて、define−foreign−entry
というモジュールを提供し、このモジュールにLispのモ
ジュール名、該Lispモジュールを参照する他言語モジュ
ールの格納領域名、引数および返却値の属性等を引数と
して与え、さらに動的リンクを実行することにより、Li
spモジュールを他言語モジュールから同一モジュール名
で呼び出し可能としている例がある。
上述した従来の技術において、(3)の例はインタプ
リタモジュールを起動するための窓口用モジュールを有
することにより既存の静的リンカを用いて動的リンクを
行なう処理が可能となり、処理系作成者の負担が軽い反
面、利用者は常にその窓口を固定的に使用して呼び出し
を行わねばならない。さらに、上記(3)によると、該
窓口用モジュールの第1引数はインタプリタ内部の管理
表の要素番号であり、利用者がインタプリタ内部の仕様
を認識していなければならないという欠点がある。ま
た、(4)の例は他言語モジュールの記述の面において
は(3)の欠点を除去しているインタフェースである
が、上記define−foreign−entryの実行において、その
引数として該Lispモジュールを参照とする他言語モジュ
ールの格納領域名を指定することが必須となる。すなわ
ち、利用者は他言語モジュールの格納場所を指定する該
機能を使用しなければならないという欠点がある。ま
た、かかる格納領域を管理する処理に起因するオーバー
ヘッドが不可避であるという欠点がある。
リタモジュールを起動するための窓口用モジュールを有
することにより既存の静的リンカを用いて動的リンクを
行なう処理が可能となり、処理系作成者の負担が軽い反
面、利用者は常にその窓口を固定的に使用して呼び出し
を行わねばならない。さらに、上記(3)によると、該
窓口用モジュールの第1引数はインタプリタ内部の管理
表の要素番号であり、利用者がインタプリタ内部の仕様
を認識していなければならないという欠点がある。ま
た、(4)の例は他言語モジュールの記述の面において
は(3)の欠点を除去しているインタフェースである
が、上記define−foreign−entryの実行において、その
引数として該Lispモジュールを参照とする他言語モジュ
ールの格納領域名を指定することが必須となる。すなわ
ち、利用者は他言語モジュールの格納場所を指定する該
機能を使用しなければならないという欠点がある。ま
た、かかる格納領域を管理する処理に起因するオーバー
ヘッドが不可避であるという欠点がある。
本発明の目的は、インタプリタシステムが他言語モジ
ュールを呼び出す他言語呼び出し機能において、該他言
語モジュールからインタプリタモジュールへの参照の解
決を動的リンカを用いて自動的に行なうことにより、該
他言語モジュールから該インタプリタモジュールを呼び
出すことができるようにすることにある。
ュールを呼び出す他言語呼び出し機能において、該他言
語モジュールからインタプリタモジュールへの参照の解
決を動的リンカを用いて自動的に行なうことにより、該
他言語モジュールから該インタプリタモジュールを呼び
出すことができるようにすることにある。
本発明の他の目的は、利用者が他言語モジュールやイ
ンタプリタモジュールの格納領域の位置や領域名を指示
することなく、他言語モジュールからインタプリタモジ
ュールを呼び出すことができるようにすることにあり、
さらに該他言語モジュールの格納領域の管理に係るオー
バヘッドを不要とすることができるようにすることにあ
る。
ンタプリタモジュールの格納領域の位置や領域名を指示
することなく、他言語モジュールからインタプリタモジ
ュールを呼び出すことができるようにすることにあり、
さらに該他言語モジュールの格納領域の管理に係るオー
バヘッドを不要とすることができるようにすることにあ
る。
本発明による異種言語間連絡方式は、コンパイラ言語
で記述およびコンパイルされた他言語モジュールを記憶
する補助記憶装置と、インタプリタ言語で記述された第
1のインタプリタモジュールと第2のインタプリタモジ
ュールとを含むインタプリタと、前記第2のインタプリ
タモジュールを前記他言語モジュールから呼び出すこと
ができる形式に変換したコンパイラ言語対応モジュール
と、前記他言語モジュールおよび前記コンパイラ言語対
応モジュールの所在情報を外部名登録表に登録する外部
名登録手段と、前記外部名登録表に登録されている所在
情報を参照して、前記他言語モジュールおよび前記コン
パイラ言語対応モジュールをロードし、起動元のモジュ
ールにリンクする動的リンク手段とを備え、前記第1の
インタプリタモジュールが、前記動的リンク手段を起動
することにより、前記他言語モジュールを前記補助記憶
装置から主記憶装置へロードして自身へリンクし、前記
他言語モジュールが、前記第1のインタプリタモジュー
ルにリンクされると、前記動的リンクを起動することに
より、前記コンパイラ言語対応モジュールに対応する前
記第2のインタプリタモジュールを自身へリンクするこ
とを特徴とする。
で記述およびコンパイルされた他言語モジュールを記憶
する補助記憶装置と、インタプリタ言語で記述された第
1のインタプリタモジュールと第2のインタプリタモジ
ュールとを含むインタプリタと、前記第2のインタプリ
タモジュールを前記他言語モジュールから呼び出すこと
ができる形式に変換したコンパイラ言語対応モジュール
と、前記他言語モジュールおよび前記コンパイラ言語対
応モジュールの所在情報を外部名登録表に登録する外部
名登録手段と、前記外部名登録表に登録されている所在
情報を参照して、前記他言語モジュールおよび前記コン
パイラ言語対応モジュールをロードし、起動元のモジュ
ールにリンクする動的リンク手段とを備え、前記第1の
インタプリタモジュールが、前記動的リンク手段を起動
することにより、前記他言語モジュールを前記補助記憶
装置から主記憶装置へロードして自身へリンクし、前記
他言語モジュールが、前記第1のインタプリタモジュー
ルにリンクされると、前記動的リンクを起動することに
より、前記コンパイラ言語対応モジュールに対応する前
記第2のインタプリタモジュールを自身へリンクするこ
とを特徴とする。
次に、本発明を図面を参照して説明する。
第1図は本発明の一実施例による異種言語間連絡方式
を実現するインタプリタシステムの構成を示すブロック
図である。インタプリタ3が主記憶装置1にロードさ
れ、実行中である。インタプリタ3においては利用者が
予め作成した任意の機能を行うインタプリタモジュール
4が実行可能な状態にある。
を実現するインタプリタシステムの構成を示すブロック
図である。インタプリタ3が主記憶装置1にロードさ
れ、実行中である。インタプリタ3においては利用者が
予め作成した任意の機能を行うインタプリタモジュール
4が実行可能な状態にある。
利用者は、コンパイラ言語対応モジュール出力手段5
により、該インタプリタモジュール4を、他言語モジュ
ール11から呼び出すことができるコンパイラ言語対応モ
ジュール9に変換して出力する。このコンパイラ言語対
応モジュール出力手段5によって出力されたコンパイラ
言語対応モジュール9は、外部名登録手段6によりイン
タプリタ内にある外部モジュールとして、動的リンク手
段7の処理対象とされる。
により、該インタプリタモジュール4を、他言語モジュ
ール11から呼び出すことができるコンパイラ言語対応モ
ジュール9に変換して出力する。このコンパイラ言語対
応モジュール出力手段5によって出力されたコンパイラ
言語対応モジュール9は、外部名登録手段6によりイン
タプリタ内にある外部モジュールとして、動的リンク手
段7の処理対象とされる。
動的リンク手段7は、インタプリタモジュール4を参
照する他言語モジュール11を含んだオブジェクトファイ
ル名を指定して起動され、補助記憶装置2から該オブジ
ェクトファイル名に対応する他言語モジュール11を主記
憶装置1にロードするとともに、該他言語モジュール11
からのインタプリンタモジュール4に対する参照をコン
パイラ言語対応モジュール9に対する参照として解決す
る(コンパイラ言語対応モジュール9を呼び出すこと
が、実際にはインタプリタモジュール4を呼び出すこと
になる)。
照する他言語モジュール11を含んだオブジェクトファイ
ル名を指定して起動され、補助記憶装置2から該オブジ
ェクトファイル名に対応する他言語モジュール11を主記
憶装置1にロードするとともに、該他言語モジュール11
からのインタプリンタモジュール4に対する参照をコン
パイラ言語対応モジュール9に対する参照として解決す
る(コンパイラ言語対応モジュール9を呼び出すこと
が、実際にはインタプリタモジュール4を呼び出すこと
になる)。
動的リンク手段7によりロードされた他言語モジュー
ル11へのインタフェースは、インタプリタ言語対応モジ
ュール出力手段8によりインタプリタモジュール12とし
て出力される。該インタプリタモジュール12が起動され
ると他言語モジュール11に制御が移る。該制御における
インタプリタモジュール4の呼び出しは、コンパイラ言
語対応モジュール9を介して行なわれる。他言語モジュ
ール11から制御が戻るの、インタプリタモジュール12を
経由して、該インタプリタモジュール12を起動した呼び
出し元に制御が戻る。
ル11へのインタフェースは、インタプリタ言語対応モジ
ュール出力手段8によりインタプリタモジュール12とし
て出力される。該インタプリタモジュール12が起動され
ると他言語モジュール11に制御が移る。該制御における
インタプリタモジュール4の呼び出しは、コンパイラ言
語対応モジュール9を介して行なわれる。他言語モジュ
ール11から制御が戻るの、インタプリタモジュール12を
経由して、該インタプリタモジュール12を起動した呼び
出し元に制御が戻る。
次に、第2図を参照して、コンパイラ言語対応モジュ
ール出力手段5の動作について説明する。まず、ステッ
プ21において、利用者がインタプリタモジュール4の名
称、インタプリタモジュール4を呼び出す他言語モジュ
ール11の言語処理系名、インタプリタモジュール4の戻
り値のデータ型名、および各引数のデータ型名の合計4
つの情報を入力する。一般に、モジュール呼び出しの際
の引数の渡し方および戻り値の受けとり方は、データの
内部表現と同様に、各言語処理系に依存する。したがっ
て、上記4つの入力情報において、言語処理系名は必須
である。また、本実施例ではモジュールとしているが、
戻り値をもたないようなモジュールを呼び出す場合に
は、戻り値のデータ型名を省略することもできる。つい
で、これらの情報をもとに、ステップ22において、コン
パイラ言語対応モジュール9を出力する。コンパイラ言
語対応モジュール9は第3図に示す処理を行うモジュー
ルであり、外部名登録手段6によりインタプリタ内にあ
る外部モジュールとして、動的リンク手段7の処理対象
とされる。場合に応じてレジスタの退避・復活あるいは
例外ハンドラの設定・解除等を行なう処理を付加するこ
ともできる。
ール出力手段5の動作について説明する。まず、ステッ
プ21において、利用者がインタプリタモジュール4の名
称、インタプリタモジュール4を呼び出す他言語モジュ
ール11の言語処理系名、インタプリタモジュール4の戻
り値のデータ型名、および各引数のデータ型名の合計4
つの情報を入力する。一般に、モジュール呼び出しの際
の引数の渡し方および戻り値の受けとり方は、データの
内部表現と同様に、各言語処理系に依存する。したがっ
て、上記4つの入力情報において、言語処理系名は必須
である。また、本実施例ではモジュールとしているが、
戻り値をもたないようなモジュールを呼び出す場合に
は、戻り値のデータ型名を省略することもできる。つい
で、これらの情報をもとに、ステップ22において、コン
パイラ言語対応モジュール9を出力する。コンパイラ言
語対応モジュール9は第3図に示す処理を行うモジュー
ルであり、外部名登録手段6によりインタプリタ内にあ
る外部モジュールとして、動的リンク手段7の処理対象
とされる。場合に応じてレジスタの退避・復活あるいは
例外ハンドラの設定・解除等を行なう処理を付加するこ
ともできる。
コンパイラ言語対応モジュール出力手段5が終了した
時点において、主記憶装置1上の状態は第4図に示すよ
うになっている。
時点において、主記憶装置1上の状態は第4図に示すよ
うになっている。
次に外部名登録手段6が起動され、後述する動的リン
ク手段7で使用される外部名登録表10がコンパイラ言語
対応モジュール9に対して出力される。
ク手段7で使用される外部名登録表10がコンパイラ言語
対応モジュール9に対して出力される。
外部名登録表10は、第5図に見られるように、4つの
情報からなる。外部名文字列アドレス51は、外部モジュ
ールであるコンパイラ言語対応モジュール9の名称を格
納した領域のアドレスを格納する。入口アドレス52は、
該外部モジュールの入口アドレスを格納する。標識53
は、該外部モジュールが定義済かあるいは参照されてい
るのみかを示すもので、本外部名登録手段6において
は、常に定義済である旨の内容が記入される。次チェイ
ン54は、動的リンカが該外部モジュールに対する外部名
登録表10を検索する際に用いるチェインである。外部名
登録手段6が終了した時点において、主記憶領域1の状
態は、第6図に示す状態になっている。
情報からなる。外部名文字列アドレス51は、外部モジュ
ールであるコンパイラ言語対応モジュール9の名称を格
納した領域のアドレスを格納する。入口アドレス52は、
該外部モジュールの入口アドレスを格納する。標識53
は、該外部モジュールが定義済かあるいは参照されてい
るのみかを示すもので、本外部名登録手段6において
は、常に定義済である旨の内容が記入される。次チェイ
ン54は、動的リンカが該外部モジュールに対する外部名
登録表10を検索する際に用いるチェインである。外部名
登録手段6が終了した時点において、主記憶領域1の状
態は、第6図に示す状態になっている。
次に、インタプリタモジュール4を参照する他言語モ
ジュール11を含むオブジェクトファイル名を指定して動
的リンク手段7が起動される。動的リンク手段7は、指
令されたオブジェクトファイル名に対応する他言語モジ
ュール11を補助記憶装置2から読み出し、該他言語モジ
ュール11およびオブジェクトファイルに格納されている
全てのモジュールについて参照を解決すなわち全てのモ
ジュールに係る外部名文字列アドレス51、入口アドレス
52、標識53および次チェイン54の情報を外部名登録表10
に登録し、再配置すなわちこれらのすべてのモジュール
のアドレスをインタプリタ3が動作するアドレス空間で
のアドレスにマッピングし、主記憶装置1に外部モジュ
ールとしてロードする。これらの処理は、静的リンカに
よって広く行なわれている処理とほぼ同様であるが、前
記外部名登録表10を用いる点が異なる。すなわち、動的
リンク手段7は、オブジェクトファイル内に存在する外
部名のみならず、主記憶装置1内に存在する外部名登録
表10によってその存在が知られる外部モジュールをも処
理対象とする。したがって、複数回に及び動的リンク処
理を行なうことにより、使用可能な外部モジュールを拡
張的に増加させることが可能である。動的リンク手段7
が終了した時点において、主記憶装置1内の状態は第7
図に見られる状態となる。
ジュール11を含むオブジェクトファイル名を指定して動
的リンク手段7が起動される。動的リンク手段7は、指
令されたオブジェクトファイル名に対応する他言語モジ
ュール11を補助記憶装置2から読み出し、該他言語モジ
ュール11およびオブジェクトファイルに格納されている
全てのモジュールについて参照を解決すなわち全てのモ
ジュールに係る外部名文字列アドレス51、入口アドレス
52、標識53および次チェイン54の情報を外部名登録表10
に登録し、再配置すなわちこれらのすべてのモジュール
のアドレスをインタプリタ3が動作するアドレス空間で
のアドレスにマッピングし、主記憶装置1に外部モジュ
ールとしてロードする。これらの処理は、静的リンカに
よって広く行なわれている処理とほぼ同様であるが、前
記外部名登録表10を用いる点が異なる。すなわち、動的
リンク手段7は、オブジェクトファイル内に存在する外
部名のみならず、主記憶装置1内に存在する外部名登録
表10によってその存在が知られる外部モジュールをも処
理対象とする。したがって、複数回に及び動的リンク処
理を行なうことにより、使用可能な外部モジュールを拡
張的に増加させることが可能である。動的リンク手段7
が終了した時点において、主記憶装置1内の状態は第7
図に見られる状態となる。
動的リンク手段7により、他言語モジュール11が主記
憶装置1内にロードされ、該他言語モジュール11はコン
パイラ言語対応モジュール9を介してインタプリタモジ
ュール4を呼び出すことが可能となる。
憶装置1内にロードされ、該他言語モジュール11はコン
パイラ言語対応モジュール9を介してインタプリタモジ
ュール4を呼び出すことが可能となる。
この時点で制御はインタプリタ3にある。他言語モジ
ュール11に制御を渡すには、インタプリタ3内のモジュ
ールから直接渡すか、インタプリタ3内のモジュールか
ら制御を渡された別の他言語モジュール11から渡すかの
いずれかであるが、いずれの場合も、インタプリタ3か
らある他言語モジュール11に制御を渡すことを可能とす
ることが必要かつ十分である。これを可能とするのは前
述した従来技術の(2)に対応するものであり、前述し
たように他言語呼び出し機能を提供している近年の処理
系によって多く実現されている。
ュール11に制御を渡すには、インタプリタ3内のモジュ
ールから直接渡すか、インタプリタ3内のモジュールか
ら制御を渡された別の他言語モジュール11から渡すかの
いずれかであるが、いずれの場合も、インタプリタ3か
らある他言語モジュール11に制御を渡すことを可能とす
ることが必要かつ十分である。これを可能とするのは前
述した従来技術の(2)に対応するものであり、前述し
たように他言語呼び出し機能を提供している近年の処理
系によって多く実現されている。
本発明のインタプリタ言語対応モジュール出力手段8
は、この実現法の1つであるため、ここでの説明は省略
する。該インタプリタモジュール出力手段8により、イ
ンタプリタモジュール12が出力され、主記憶装置1内の
状態は第8図に見られる状態となり、他言語モジュール
11に対し、インタプリタ3から制御を渡すことが可能と
なる。
は、この実現法の1つであるため、ここでの説明は省略
する。該インタプリタモジュール出力手段8により、イ
ンタプリタモジュール12が出力され、主記憶装置1内の
状態は第8図に見られる状態となり、他言語モジュール
11に対し、インタプリタ3から制御を渡すことが可能と
なる。
このように、インタプリタ3は、インタプリタモジュ
ール12を起動して他言語モジュール11を呼び出す。その
際、該インタプリタモジュール12は、動的リンク手段7
により外部名登録表10に登録された該他言語モジュール
11の情報に基づいて該他言語モジュールの参照を解決し
て該他言語モジュール11を呼び出す。また、該他言語モ
ジュール11は、コンパイラ言語対応モジュール9を介し
てインタプリタモジュール4を呼び出す。その際、該他
言語モジュール11は、動的リンク手段7により外部名登
録表10に登録された該コンパイラ言語対応モジュール9
の情報に基づいて該インタプリタモジュール4の参照を
解決して該インタプリタモジュール4を呼び出す。
ール12を起動して他言語モジュール11を呼び出す。その
際、該インタプリタモジュール12は、動的リンク手段7
により外部名登録表10に登録された該他言語モジュール
11の情報に基づいて該他言語モジュールの参照を解決し
て該他言語モジュール11を呼び出す。また、該他言語モ
ジュール11は、コンパイラ言語対応モジュール9を介し
てインタプリタモジュール4を呼び出す。その際、該他
言語モジュール11は、動的リンク手段7により外部名登
録表10に登録された該コンパイラ言語対応モジュール9
の情報に基づいて該インタプリタモジュール4の参照を
解決して該インタプリタモジュール4を呼び出す。
以上説明したように、本発明は、インタプリタシステ
ムが他言語モジュールを呼び出す他言語呼び出し機能に
おいて、該他言語モジュールからインタプリタモジュー
ルへの参照の解決を動的リンクを用いて自動的に行なう
ことにより、該他言語モジュールから該インタプリタモ
ジュールを呼び出すことができる効果を有している。
ムが他言語モジュールを呼び出す他言語呼び出し機能に
おいて、該他言語モジュールからインタプリタモジュー
ルへの参照の解決を動的リンクを用いて自動的に行なう
ことにより、該他言語モジュールから該インタプリタモ
ジュールを呼び出すことができる効果を有している。
また、利用者が他言語モジュールやインタプリタモジ
ュールの格納領域の位置や領域名を指示することなく、
他言語モジュールからインタプリタモジュールを呼び出
すことができ、さらに該他言語モジュールの格納領域の
管理に係るオーバヘッドを不要とすることができる効果
を有している。
ュールの格納領域の位置や領域名を指示することなく、
他言語モジュールからインタプリタモジュールを呼び出
すことができ、さらに該他言語モジュールの格納領域の
管理に係るオーバヘッドを不要とすることができる効果
を有している。
第1図は本発明の一実施例による異種言語間連絡方式を
実現するインタプリタシステムの構成を示すブロック
図、第2図はコンパイラ言語対応モジュール出力手段の
処理フローを示す図、第3図はコンパイラ言語対応モジ
ュール出力手段によって出力されたコンパイラ言語対応
モジュールの処理フローを示す図、第4図はコンパイラ
言語対応モジュールが出力された際の主記憶装置内の状
態を示す図、第5図は外部名登録表の説明図、第6図は
外部名登録手段によって外部名登録が出力された際の主
記憶装置内の状態を示す図、第7図は動的リンク手段に
よって他言語モジュールがロードされた際の主記憶装置
内の状態を示す図、第8図はインタプリタモジュール出
力手段によってインタプリタモジュールが出力された際
の主記憶装置内の状態を示す図である。 1……主記憶装置、2……補助記憶装置、3……インタ
プリタ、4……インタプリタモジュール、5……コンパ
イラ言語対応モジュール出力手段、6……外部名登録手
段、7……動的リンク手段、8……インタプリタモジュ
ール出力手段、9……コンパイラ言語対応モジュール、
10……外部名登録表、11……他言語モジュール、12……
インタプリタモジュール。
実現するインタプリタシステムの構成を示すブロック
図、第2図はコンパイラ言語対応モジュール出力手段の
処理フローを示す図、第3図はコンパイラ言語対応モジ
ュール出力手段によって出力されたコンパイラ言語対応
モジュールの処理フローを示す図、第4図はコンパイラ
言語対応モジュールが出力された際の主記憶装置内の状
態を示す図、第5図は外部名登録表の説明図、第6図は
外部名登録手段によって外部名登録が出力された際の主
記憶装置内の状態を示す図、第7図は動的リンク手段に
よって他言語モジュールがロードされた際の主記憶装置
内の状態を示す図、第8図はインタプリタモジュール出
力手段によってインタプリタモジュールが出力された際
の主記憶装置内の状態を示す図である。 1……主記憶装置、2……補助記憶装置、3……インタ
プリタ、4……インタプリタモジュール、5……コンパ
イラ言語対応モジュール出力手段、6……外部名登録手
段、7……動的リンク手段、8……インタプリタモジュ
ール出力手段、9……コンパイラ言語対応モジュール、
10……外部名登録表、11……他言語モジュール、12……
インタプリタモジュール。
Claims (1)
- 【請求項1】コンパイラ言語で記述およびコンパイルさ
れた他言語モジュールを記憶する補助記憶装置と、 インタプリタ言語で記述された第1のインタプリタモジ
ュールと第2のインタプリタモジュールとを含むインタ
プリタと、 前記第2のインタプリタモジュールを前記他言語モジュ
ールから呼び出すことができる形式に変換したコンパイ
ラ言語対応モジュールと、 前記他言語モジュールおよび前記コンパイラ言語対応モ
ジュールの所在情報を外部名登録表に登録する外部名登
録手段と、 前記外部名登録表に登録されている所在情報を参照し
て、前記他言語モジュールおよび前記コンパイラ言語対
応モジュールをロードし、起動元のモジュールにリンク
する動的リンク手段とを備え、 前記第1のインタプリタモジュールが、前記動的リンク
手段を起動することにより、前記他言語モジュールを前
記補助記憶装置から主記憶装置へロードして自身へリン
クし、 前記他言語モジュールが、前記第1のインタプリタモジ
ュールにリンクされると、前記動的リンクを起動するこ
とにより、前記コンパイラ言語対応モジュールに対応す
る前記第2のインタプリタモジュールを自身へリンクす
ることを特徴とする異種言語間連絡方式。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63137397A JP2666847B2 (ja) | 1988-06-06 | 1988-06-06 | 異種言語間連絡方式 |
US07/361,056 US5210876A (en) | 1988-06-06 | 1989-06-05 | Method for calling interpreter language procedure from compiler language procedure |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63137397A JP2666847B2 (ja) | 1988-06-06 | 1988-06-06 | 異種言語間連絡方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH01306923A JPH01306923A (ja) | 1989-12-11 |
JP2666847B2 true JP2666847B2 (ja) | 1997-10-22 |
Family
ID=15197706
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP63137397A Expired - Fee Related JP2666847B2 (ja) | 1988-06-06 | 1988-06-06 | 異種言語間連絡方式 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5210876A (ja) |
JP (1) | JP2666847B2 (ja) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE416331T1 (de) * | 1989-08-31 | 1991-07-04 | Yokogawa Electric Corp., Musashino, Tokio/Tokyo | Line computer. |
US5339422A (en) * | 1991-03-07 | 1994-08-16 | Digital Equipment Corporation | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment |
CA2082066C (en) * | 1991-03-07 | 1998-04-21 | James A. Wooldridge | Software debugging system and method especially adapted for code debugging within a multi-architecture environment |
US5469574A (en) * | 1993-06-18 | 1995-11-21 | International Business Machines Corporation | Method and system for interfacing interpreted applications with compiled procedures using signature files |
JP3233245B2 (ja) * | 1993-07-01 | 2001-11-26 | 日本電気株式会社 | 言語処理方法 |
US5581769A (en) * | 1993-12-29 | 1996-12-03 | International Business Machines Corporation | Multipurpose program object linkage protocol for upward compatibility among different compilers |
US5732270A (en) * | 1994-09-15 | 1998-03-24 | Visual Edge Software Limited | System and method for providing interoperability among heterogeneous object systems |
US5850550A (en) * | 1995-08-31 | 1998-12-15 | International Business Machine Corporation | No preprocessor and a source level debugger for embedded SQL in a 3GL |
US5675804A (en) * | 1995-08-31 | 1997-10-07 | International Business Machines Corporation | System and method for enabling a compiled computer program to invoke an interpretive computer program |
US5826087A (en) * | 1995-10-02 | 1998-10-20 | Lohmann; William C. | Method and apparatus for cross calling programs of different lexical scoping methodology |
US5771379A (en) * | 1995-11-01 | 1998-06-23 | International Business Machines Corporation | File system and method for file system object customization which automatically invokes procedures in response to accessing an inode |
US5896535A (en) * | 1996-08-20 | 1999-04-20 | Telefonaktiebolaget L M Ericsson (Publ) | Method and system for testing computer system software |
KR100329063B1 (ko) | 1996-10-25 | 2002-03-18 | 디디어 레묀 | 마이크로컨트롤러를 이용한 고급 프로그래밍 언어 사용 |
CA2194848C (en) * | 1997-01-10 | 2003-12-23 | Jonathan Layes | Condition handling using script interpreters |
US6006235A (en) * | 1997-11-26 | 1999-12-21 | International Business Machines Corporation | Method and apparatus for invoking a stored procedure or a user defined interpreted language function in a database management system |
GB9825102D0 (en) | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US7757225B2 (en) * | 2001-06-29 | 2010-07-13 | Microsoft Corporation | Linktime recognition of alternative implementations of programmed functionality |
US6976254B2 (en) | 2001-11-28 | 2005-12-13 | Esmertec Ag | Inter-method control transfer for execution engines with memory constraints |
US7124237B2 (en) * | 2002-10-03 | 2006-10-17 | Seagate Technology Llc | Virtual machine emulation in the memory space of a programmable processor |
US7611405B2 (en) * | 2002-10-15 | 2009-11-03 | Igt | Dynamic menu system |
US7510478B2 (en) * | 2003-09-11 | 2009-03-31 | Igt | Gaming apparatus software employing a script file |
US8046777B2 (en) * | 2005-06-02 | 2011-10-25 | The Mathworks, Inc. | Calling of late bound functions from an external program environment |
JP2007304840A (ja) * | 2006-05-11 | 2007-11-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム |
US20080005727A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity |
US20080005728A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment |
US8762976B2 (en) * | 2007-03-09 | 2014-06-24 | Microsoft Corporation | Static extensibility models with dynamic languages and scripts |
US8707257B2 (en) * | 2007-11-28 | 2014-04-22 | Red Hat, Inc. | Automatic object instantiation |
US8504986B2 (en) * | 2008-01-23 | 2013-08-06 | Red Hat, Inc. | Calling functions as methods |
US20090249021A1 (en) * | 2008-03-26 | 2009-10-01 | Morris Robert P | Method And Systems For Invoking An Advice Operation Associated With A Joinpoint |
US10783058B2 (en) * | 2019-02-14 | 2020-09-22 | Microsoft Technology Licensing, Llc | Extensible device driver verification |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4787034A (en) * | 1984-11-14 | 1988-11-22 | Pal Szoke | Program access system |
US4736321A (en) * | 1986-05-05 | 1988-04-05 | International Business Machines Corporation | Communication method between an interactive language processor workspace and external processes |
US4949255A (en) * | 1988-09-07 | 1990-08-14 | International Business Machines Corp. | Message interface and method for recursive calling between interpretive and compiled computer processes |
-
1988
- 1988-06-06 JP JP63137397A patent/JP2666847B2/ja not_active Expired - Fee Related
-
1989
- 1989-06-05 US US07/361,056 patent/US5210876A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US5210876A (en) | 1993-05-11 |
JPH01306923A (ja) | 1989-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2666847B2 (ja) | 異種言語間連絡方式 | |
US8156471B2 (en) | Multi-language execution method | |
US6003095A (en) | Apparatus and method for demand loading a dynamic link library | |
KR960035260A (ko) | 소프트웨어 매크로 호출내에 검출된 에러의 위치를 표시하기 위한 방법 및 장치 | |
JPH11110194A (ja) | 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体 | |
US6948170B2 (en) | Computer and computer-readable storage medium for command interpretation | |
JPH07230386A (ja) | データ処理装置及び制御ルーチン呼出し方法 | |
US5404531A (en) | Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory | |
JPH03229352A (ja) | プログラム変更方法 | |
US11429358B2 (en) | Representing asynchronous state machine in intermediate code | |
CN111008056B (zh) | 一种bios设置界面语言配置方法和装置 | |
JP2003076547A (ja) | 制御ソフトウェア自動生成システムおよび方法 | |
JP2002312167A (ja) | 変数の値をコンピュータに算出させるためのプログラム、コンパイルプログラム、変数値確定方法およびプログラム生成方法 | |
JP2002132502A (ja) | 言語機能解釈による分散オブジェクト自動生成システム及び方法 | |
JPH0430239A (ja) | コマンドオプション指定処理装置 | |
JPH064498A (ja) | マルチプロセッサ処理装置 | |
JP2000231494A (ja) | ソフトウェア実行システム及びソフトウェア実行方法 | |
JPS63317831A (ja) | プログラム翻訳処理方法 | |
JPH056278A (ja) | Fortranコンパイル処理装置 | |
JPH07105014A (ja) | 言語処理システムのシンボル処理方式 | |
JP2013080281A (ja) | 実行制御プログラム、コンパイラ、実行制御装置および実行制御方法 | |
JP2000132405A (ja) | インライン展開処理装置及び方法 | |
JPH02236732A (ja) | ソースプログラム作成方式 | |
JPH05120025A (ja) | ソースプログラムのインライン展開方法 | |
JPS62205434A (ja) | 再帰呼出し可能プログラムのコンパイル処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |