JP2958386B2 - 計算機システム - Google Patents
計算機システムInfo
- Publication number
- JP2958386B2 JP2958386B2 JP24768288A JP24768288A JP2958386B2 JP 2958386 B2 JP2958386 B2 JP 2958386B2 JP 24768288 A JP24768288 A JP 24768288A JP 24768288 A JP24768288 A JP 24768288A JP 2958386 B2 JP2958386 B2 JP 2958386B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- language
- bytecode
- computer system
- converted
- 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
Description
【発明の詳細な説明】 〔産業上の利用分野〕 本発明は他言語で記述されたプログラムをエミュレー
トして実行する計算機システムに関する。
トして実行する計算機システムに関する。
従来、マイクロマシン上で動作するプログラム言語
(例えば、LISP言語やSMALLTALK言語)は、通常様々な
プログラム言語で記述されるプログラムをコンパクトな
オブジェクトサイズで実行させるためにマイクロで実現
された中間コードインタフェース(例えば、Dマシンの
バイトコードインタフェース)を持っている。
(例えば、LISP言語やSMALLTALK言語)は、通常様々な
プログラム言語で記述されるプログラムをコンパクトな
オブジェクトサイズで実行させるためにマイクロで実現
された中間コードインタフェース(例えば、Dマシンの
バイトコードインタフェース)を持っている。
これらのプログラム言語で記述されたプログラムを汎
用マシン(計算機)上で動かそうとしたときの1手法と
して、上記中間コードインタフェースをエミュレートす
る方法が実現されている。
用マシン(計算機)上で動かそうとしたときの1手法と
して、上記中間コードインタフェースをエミュレートす
る方法が実現されている。
〔発明が解決しようとする課題〕 ところで、上記従来の汎用マシン(計算機)では、マ
イクロマシン上においてマイクロ(ハード、ウェア)で
中間コードを翻訳していたことを、ソフトウェアで翻訳
しなければならず、プログラムの実行速度が遅いという
欠点があった。
イクロマシン上においてマイクロ(ハード、ウェア)で
中間コードを翻訳していたことを、ソフトウェアで翻訳
しなければならず、プログラムの実行速度が遅いという
欠点があった。
本発明は上記欠点を解消し、プログラムの実行速度を
向上させることのできる計算機システムを提供すること
を目的とする。
向上させることのできる計算機システムを提供すること
を目的とする。
本発明は、仮想マシン上で実行可能な中間コードから
なるプログラムをコンパイラ言語のプログラムに変換す
る際に、該中間コードのプログラムに内在する特定の複
数命令列からなる中間コードのまとまりを前記コンパイ
ラ言語の特定の1ステートメントに変換する変換手段
と、前記変換手段が変換したコンパイラ言語のプログラ
ムをコンパイルし、ネイティブコードに変換するコンパ
イル手段とを具備したことを特徴とする。
なるプログラムをコンパイラ言語のプログラムに変換す
る際に、該中間コードのプログラムに内在する特定の複
数命令列からなる中間コードのまとまりを前記コンパイ
ラ言語の特定の1ステートメントに変換する変換手段
と、前記変換手段が変換したコンパイラ言語のプログラ
ムをコンパイルし、ネイティブコードに変換するコンパ
イル手段とを具備したことを特徴とする。
また、本発明は、前記コンパイル手段がコンパイルし
たネイティブコードを実行する実行手段をさらに具備し
たことを特徴とする。
たネイティブコードを実行する実行手段をさらに具備し
たことを特徴とする。
以下、本発明に係る計算機システムの実施例を添付図
面を参照して説明する。
面を参照して説明する。
第1図は本発明に係る計算機システムの一実施例を示
す概略構成図である。同図において、計算機システム
は、バイトコードエミュレータ1とホストコンパイラ2
とを有する計算機3と、ファイル4とを有している。
す概略構成図である。同図において、計算機システム
は、バイトコードエミュレータ1とホストコンパイラ2
とを有する計算機3と、ファイル4とを有している。
バイトコードエミュレータ1は、前記計算機3用の言
語(第1のプログラム言語)とは異なる言語(第2のプ
ログラム言語)で記述されている中間コード(以下、バ
イトコードという)オブジェクトプログラムを自己の内
部形式(自己の計算機用の高級言語)に変換するトラン
スレータ11と、ネイティブコードをファイルに保存した
り実行するためにロードするローダ12と、バイトコード
オブジェクトプログラム13Aおよびファイル4からロー
ドされたネイティブコード13Bを記憶するメモリ13とを
有している。
語(第1のプログラム言語)とは異なる言語(第2のプ
ログラム言語)で記述されている中間コード(以下、バ
イトコードという)オブジェクトプログラムを自己の内
部形式(自己の計算機用の高級言語)に変換するトラン
スレータ11と、ネイティブコードをファイルに保存した
り実行するためにロードするローダ12と、バイトコード
オブジェクトプログラム13Aおよびファイル4からロー
ドされたネイティブコード13Bを記憶するメモリ13とを
有している。
ホストコンパイラ2は、トランスレータ11によって内
部形式に変換されたバイトコードオブジェクトをコンパ
イルしてネイティブコードを生成するものであり、ファ
イル4は生成されたネイティブコードを格納する。
部形式に変換されたバイトコードオブジェクトをコンパ
イルしてネイティブコードを生成するものであり、ファ
イル4は生成されたネイティブコードを格納する。
なお、本実施例では、変換手段は、ホストコンパイラ
2とトランスレータ11とを有して構成されている。ま
た、計算機システムは、第1のプログラム言語(例え
ば、C言語)で記述されたプログラムを実行する汎用マ
シンであるワークステーションに設定している。
2とトランスレータ11とを有して構成されている。ま
た、計算機システムは、第1のプログラム言語(例え
ば、C言語)で記述されたプログラムを実行する汎用マ
シンであるワークステーションに設定している。
次に、上記計算機システムが、マイクロマシンである
Dマシンが実行する第2のプログラム言語(例えば、LI
SP言語)で記述されたプログラムをC言語に変換して実
行する動作を具体的に説明する。
Dマシンが実行する第2のプログラム言語(例えば、LI
SP言語)で記述されたプログラムをC言語に変換して実
行する動作を具体的に説明する。
上記図示しないDマシンは、第2図に示すBYTECODE S
EQUENCE欄に示すようなバイトコードインタフェースを
持っている。
EQUENCE欄に示すようなバイトコードインタフェースを
持っている。
バイトコードエミュレータ1は、C言語で記述され、
計算機3の1プロセス上で実行される。その計算機3の
プロセスには、LISP空間もシュミレートされ、そのLISP
空間にバイトコードオブジェクトが存在している。
計算機3の1プロセス上で実行される。その計算機3の
プロセスには、LISP空間もシュミレートされ、そのLISP
空間にバイトコードオブジェクトが存在している。
トランスレータ11は、メモリ13に記憶されているバイ
トコードオブジェクト(中間コードオブジェクト)13A
をサーチし、該サーチした複数のバイトコードオブジェ
クトからなる有意のバイトコード列(中間コード列)、
つまりある意味を持ったまとまりのバイトコード列を見
つけると、該バイトコード列を実行効率の良い内部形
式、この場合はC言語に置き換える。
トコードオブジェクト(中間コードオブジェクト)13A
をサーチし、該サーチした複数のバイトコードオブジェ
クトからなる有意のバイトコード列(中間コード列)、
つまりある意味を持ったまとまりのバイトコード列を見
つけると、該バイトコード列を実行効率の良い内部形
式、この場合はC言語に置き換える。
ここで、LISP言語におけるベンチマーク関数(TAK)
のC言語への変換の一列を示したプログラム例を第3図
に示している。
のC言語への変換の一列を示したプログラム例を第3図
に示している。
なお、第2図に示したTAK(LISP言語におけるベンチ
マーク関数)のプログラム例では、例えば、IVARX_のバ
イトコードとPOPのバイトコードとがまとまって、IVAR
[2]=POPのように、実行効率の良いCコード列にな
っている。すなわち、IVARX_のバイトコードとPOPのバ
イトコードとの2つのバイトコードで、“2番目の引数
にスタックから値を積みなさい”という意味で、それを
バイトコードエミュレータ1の中で効率良く実現すると
IVARX_=POPのような書き方になる。
マーク関数)のプログラム例では、例えば、IVARX_のバ
イトコードとPOPのバイトコードとがまとまって、IVAR
[2]=POPのように、実行効率の良いCコード列にな
っている。すなわち、IVARX_のバイトコードとPOPのバ
イトコードとの2つのバイトコードで、“2番目の引数
にスタックから値を積みなさい”という意味で、それを
バイトコードエミュレータ1の中で効率良く実現すると
IVARX_=POPのような書き方になる。
このようなトランスレータ11は、バイトコード列のあ
る意味を持ったまとまりと、それに対応するC言語のイ
ンストラクションを用意しておき、前記バイトコード列
(IVAR[2]=POP)を、一旦、計算機3用の内部形式
(C言語)に変換した後、ホストコンパイラ2でコンパ
イルしてネイティブコードオブジェクトを作成する。
る意味を持ったまとまりと、それに対応するC言語のイ
ンストラクションを用意しておき、前記バイトコード列
(IVAR[2]=POP)を、一旦、計算機3用の内部形式
(C言語)に変換した後、ホストコンパイラ2でコンパ
イルしてネイティブコードオブジェクトを作成する。
ネイティブコードオブジェクトは、LISP空間でも、こ
のプロセス内の他の空間でも良いが、ネイティブに変換
したい関数のエントリを、内部形式(C言語)に変更す
る必要がある。またネイティブコードオブジェクトのフ
ァイルへのセーブおよびロードも基本的にC言語の入出
力関数で行い、LISP関数エントリーの変更は、上記同様
に、内部形式(C言語)に変更する必要がある。
のプロセス内の他の空間でも良いが、ネイティブに変換
したい関数のエントリを、内部形式(C言語)に変更す
る必要がある。またネイティブコードオブジェクトのフ
ァイルへのセーブおよびロードも基本的にC言語の入出
力関数で行い、LISP関数エントリーの変更は、上記同様
に、内部形式(C言語)に変更する必要がある。
なお、上述したようなトランスレータ11がないと、IV
ARX_のバイトコードとPOPのバイトコードとがそれぞれ
エミュレートされ、エミュレートされたそれぞれの値が
一度スタッフに積まれてから、そのスタッフに積まれた
値を取ってきて引数領域へ格納するという2度手間にな
ってしまう。
ARX_のバイトコードとPOPのバイトコードとがそれぞれ
エミュレートされ、エミュレートされたそれぞれの値が
一度スタッフに積まれてから、そのスタッフに積まれた
値を取ってきて引数領域へ格納するという2度手間にな
ってしまう。
上記実施例によれば、有意のバイトコード列(中間コ
ード列)を、内部形式に変換し、該変換された有意のバ
イトコード列をコンパイルして、ネイティブコードを生
成するようにしたので、プログラムの実行の際には、実
行効率の良いネイティブコードを実行すれば良いことと
なり、プログラムの実行速度の向上を図ることができ
る。
ード列)を、内部形式に変換し、該変換された有意のバ
イトコード列をコンパイルして、ネイティブコードを生
成するようにしたので、プログラムの実行の際には、実
行効率の良いネイティブコードを実行すれば良いことと
なり、プログラムの実行速度の向上を図ることができ
る。
以上説明したように、仮想マシンで実行可能な中間コ
ードからなるプログラムをコンパイラ言語のプログラム
に変換する際に、該中間コードのプログラムに内在する
特定の複数命令列からなる中間コードのまとまりをコン
パイラ言語の特定の1ステートメントに変換し、変換し
たコンパイラ言語のプログラムをコンパイルし、ネイテ
ィブコードに変換するよう構成したので、仮想マシン上
で実行可能な中間コードからなるプログラムを効率良く
ネイティブコードに変換することができる。
ードからなるプログラムをコンパイラ言語のプログラム
に変換する際に、該中間コードのプログラムに内在する
特定の複数命令列からなる中間コードのまとまりをコン
パイラ言語の特定の1ステートメントに変換し、変換し
たコンパイラ言語のプログラムをコンパイルし、ネイテ
ィブコードに変換するよう構成したので、仮想マシン上
で実行可能な中間コードからなるプログラムを効率良く
ネイティブコードに変換することができる。
第1図は本発明に係る計算機システムの一実施例を示す
概略構成図、第2図はバイトコードインタフェースのプ
ログラムの一例を示す図、第3図はトランスレータの内
部形式への変換を示すプログラムの一例を示す図であ
る。 1……バイトコードエミュレータ、2……ホストコンパ
イラ、3……計算機、4……ファイル、11……トランス
レータ、12……ローダ、13……メモリ。
概略構成図、第2図はバイトコードインタフェースのプ
ログラムの一例を示す図、第3図はトランスレータの内
部形式への変換を示すプログラムの一例を示す図であ
る。 1……バイトコードエミュレータ、2……ホストコンパ
イラ、3……計算機、4……ファイル、11……トランス
レータ、12……ローダ、13……メモリ。
フロントページの続き (56)参考文献 「ACM SIGPLAN Noti ce」Vol.22,No.10(1987− 10)p.112−116 「Conf.rec.of Annu al ACM Symposium o n Principles of Pr ogramming Languag e」Vol.11,(1983)p.297−302 「情報処理」Vol.29,No.4 (1988−4)p.352−358 (58)調査した分野(Int.Cl.6,DB名) G06F 9/44
Claims (2)
- 【請求項1】仮想マシン上で実行可能な中間コードから
なるプログラムをコンパイラ言語のプログラムに変換す
る際に、該中間コードのプログラムに内在する特定の複
数命令列からなる中間コードのまとまりを前記コンパイ
ラ言語の特定の1ステートメントに変換する変換手段
と、 前記変換手段が変換したコンパイラ言語のプログラムを
コンパイルし、ネイティブコードに変換するコンパイル
手段と を具備したことを特徴とする計算機システム。 - 【請求項2】前記コンパイル手段がコンパイルしたネイ
ティブコードを実行する実行手段をさらに具備したこと
を特徴とする請求項(1)記載の計算機システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24768288A JP2958386B2 (ja) | 1988-09-30 | 1988-09-30 | 計算機システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24768288A JP2958386B2 (ja) | 1988-09-30 | 1988-09-30 | 計算機システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0293948A JPH0293948A (ja) | 1990-04-04 |
JP2958386B2 true JP2958386B2 (ja) | 1999-10-06 |
Family
ID=17167082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP24768288A Expired - Fee Related JP2958386B2 (ja) | 1988-09-30 | 1988-09-30 | 計算機システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2958386B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69942011D1 (de) * | 1998-10-10 | 2010-03-25 | Ibm | Programmkodekonvertierung mit verringerter Übersetzung |
US20120155267A1 (en) | 2010-12-16 | 2012-06-21 | International Business Machines Corporation | Selection of receive-queue based on packet attributes |
-
1988
- 1988-09-30 JP JP24768288A patent/JP2958386B2/ja not_active Expired - Fee Related
Non-Patent Citations (3)
Title |
---|
「ACM SIGPLAN Notice」Vol.22,No.10(1987−10)p.112−116 |
「Conf.rec.of Annual ACM Symposium on Principles of Programming Language」Vol.11,(1983)p.297−302 |
「情報処理」Vol.29,No.4(1988−4)p.352−358 |
Also Published As
Publication number | Publication date |
---|---|
JPH0293948A (ja) | 1990-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5586328A (en) | Module dependency based incremental compiler and method | |
AU774467B2 (en) | Automatic stub/adapter generator | |
EP0911726B1 (en) | Mixed execution stack and exception handling | |
US6247172B1 (en) | Method for a translation system that aggressively optimizes and preserves full synchronous exception state | |
US5884083A (en) | Computer system to compile non-incremental computer source code to execute within an incremental type computer system | |
US6851109B1 (en) | Process and system for dynamically compiling a partially interpreted method | |
US20070033572A1 (en) | Method, apparatus, and computer program product for adaptively generating code for a computer program | |
US8196120B2 (en) | Computer emulator employing direct execution of compiled functions | |
JPH0731604B2 (ja) | 目標コンピュータ・システム、異なるコンピュータ・システム間でプログラムを実行する方法 | |
JPH0731605B2 (ja) | コンピュータ・プログラムの第一バージョン処理方法 | |
Bowen et al. | The design and implementation of a high-speed incremental portable Prolog compiler | |
JPS63201834A (ja) | オブジエクト・モジユール生成方法 | |
JPH11327916A (ja) | コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術 | |
EP3350696A1 (en) | Overriding a migrated method of an updated type | |
US20040083467A1 (en) | System and method for executing intermediate code | |
US20230057055A1 (en) | Modeling foreign functions using executable references | |
JP2958386B2 (ja) | 計算機システム | |
US20030154467A1 (en) | Preprocessing of interfaces to allow fast call through | |
Wakeling | Compiling lazy functional programs for the Java Virtual Machine | |
US11875168B2 (en) | Optimizing execution of foreign method handles on a virtual machine | |
Sondahl et al. | Breeding faster turtles: Progress towards a NetLogo compiler | |
Rogers et al. | JikesNODE and PearColator: A Jikes RVM operating system and legacy code execution environment | |
Bushell et al. | Using C as a compiler target language for native code generation in persistent systems | |
Bloss | Language processors | |
JP3424596B2 (ja) | シンボル参照情報のキャッシュ方法ならびに装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |