JPH0934713A - プログラミング言語処理方法及び装置 - Google Patents

プログラミング言語処理方法及び装置

Info

Publication number
JPH0934713A
JPH0934713A JP8171363A JP17136396A JPH0934713A JP H0934713 A JPH0934713 A JP H0934713A JP 8171363 A JP8171363 A JP 8171363A JP 17136396 A JP17136396 A JP 17136396A JP H0934713 A JPH0934713 A JP H0934713A
Authority
JP
Japan
Prior art keywords
instruction
code
programming language
language
record
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.)
Withdrawn
Application number
JP8171363A
Other languages
English (en)
Inventor
Jiyon Kaaserano Kurisutofuaa
ジョン カーセラノ クリストファー
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Publication of JPH0934713A publication Critical patent/JPH0934713A/ja
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】仮想関数と独立コードリソースを含むオブジェ
クト指向言語から、命令コードを自動的にコンパイルす
る。 【解決手段】第1のオブジェクト指向言語の命令コード
の集合を、第2のオブジェクト指向言語の命令コードの
集合に変換する構成において、第1のオブジェクト指向
言語からの一連の命令コードは、所定の構成を含むコー
ドを検出するために構文解析される(ステップ60
3)。その検出された構成は、第2のオブジェクト指向
言語における割り当て及び初期化の構成に自動的に変更
され、変更された命令コードを指し示す参照コードのテ
ーブルが、独立コードリソースのためにジャンプテーブ
ルが形成されるよう、生成される(ステップ619,6
21)。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータコー
ドのコンパイルに関し、特にオブジェクト指向のコード
構造における仮想関数のコンパイルの構成に関する。
【0002】
【従来の技術】良く知られているように、オブジェクト
指向プログラミング言語は、プログラミングのオブジェ
クトの特性に関連するクラスと、そのクラスと同じ特性
を有するサブクラスに基づいた構造を利用している。例
えば、「図形」クラスがオブジェクトの幾何学的特徴に
関連していれば、楕円は「図形」のサブクラスを形成し
ており、円は楕円のサブクラスを形成している。多角形
は、楕円とは異なる「図形」の別のサブクラスを形成し
ている。長方形は多角形のサブクラスを形成しており、
正方形は長方形のサブクラスを構成している。各サブク
ラスは、クラスから派生した特性を有している一方で、
処理が実行された時に考慮されねばならない固有な特性
をも有している。クラス及びサブクラスは共通の特性を
有しているために、描画のようなひとつの処理の最中に
実行される幾つかの関数は同一である。けれども、各ク
ラスの固有な特性により、その描画プロセス中の他の関
数がそのクラスのために特に設計されることが要求され
る。
【0003】オブジェクト指向プログラミングでは、ひ
とつのクラスの関数およびメソッドは、そのサブクラス
に継承し得る。好都合にも、ひとつのクラスの関数にお
ける変更は、そのサブクラス全てに適用され得る。ある
ファンクションがあるひとつのサグクラスにのみ関係し
ているならば、それはそのサブクラスのみに適用されね
ばならない。図形の描画の場合、オブジェクトの領域の
計算のための同一関数はすべてのサブクラスで用いるこ
とができるが、サブクラス中の図形を描画する関数は異
なっている。オブジェクト指向プログラミングは、他の
クラスからの継承していないあるクラスの関数(例えば
仮想関数)の処理が、直接継承した関数の処理と異なる
よう、その仮想関数はそのクラスの固有な特性の記述に
変更されるという、ポリモーフィズムの機能を含んでい
る。
【0004】C++のようなオブジェクト指向言語の命
令コードのコンパイルにおいて、オブジェクト指向言語
C++のソース命令コードをC言語における命令コード
に翻訳する必要がある。その翻訳は、仮想関数の相異な
る処理のために必要とされるコードのセットを提供すべ
く各クラスで宣言された仮想関数用の仮想関数テーブル
(すなわちv-table)の割当てと創出を含んでいなけれ
ばならない。仮想関数テーブルは、大域変数を指し示す
ポインタの配列である。あるアプリケーションプログラ
ムの仮想関数の参照は、そのアプリケーションの参照メ
モリ位置からのオフセットを確定することにより行われ
る(例えば、マッキントッシュ環境におけるA5worl
d)。参照メモリ位置からの同様のオフセットは、ウイ
ンドウズ及びDOS環境で提供されている。
【0005】独立コードリソースは、多くのアプリケー
ションと分離されているが利用されるヘッダあるいはド
ライバ用のコードセグメントがアプリケーションの一部
として処理できるよう、しばしばアプリケーションのプ
ログラミングで用いられる。独立コードリソースは、ア
プリケーションの一部ではなく、それゆえにA5worldの
ように参照メモリ位置を持たないコードモジュールであ
る。従って、リンカは独立コードリソースの位置を定め
るために用いられねばならない。リンカは、各関数の位
置に関する詳細な情報とサイズとを含むジャンプテーブ
ルを作成するよう動作する。
【0006】
【発明が解決しようとする課題】けれども、公知のリン
ク装置は、自動的に実行されることはなく、特殊な処理
を要求していた。1990年10月にアップルデベロッ
プ誌に掲載された、パトリック C.ベアードによる記
事「C++におけるポリモーフィックコードリソース」
の第400−412ページでは、アプリケーション内の
独立コードリソースをリンクするために、それらコード
リソースをそのアプリケーション内に包含する方法が開
示されている。そのアプリケーション中では、個々の特
化したプログラムが多くのタイプの独立コードリソース
の各々のために用意されている。そのかわり、オブジェ
クト指向ソースコードからの翻訳によりコンパイルされ
る、継承クラスの命令コードを処理するために、手操作
による介入が要求されていた。従って、コンピュータの
アプリケーションプログラム用に格納された命令セット
における独立コードの合体は、高価であり、また時間を
浪費する仕事であった。
【0007】本発明は、仮想関数と独立コードリソース
とを含むオブジェクト指向言語から命令コードを自動的
にコンパイルするためのプログラミング言語の処理方法
を提供することを目的とする。
【0008】
【課題を解決するための手段】上記目的を達成するため
に、本発明は次のような構成を有する。すなわち、オブ
ジェクト指向言語の命令レコードを処理するプログラミ
ング言語の処理であって、オブジェクト指向言語の一連
の命令レコードが読み込まれ、前記一連の命令レコード
から所定の構成を含む命令レコードが検出される。検出
された各命令レコードは、格納位置コードを含む置換命
令レコードの集合に置換され、前記命令レコードの置換
に応じて、前記格納位置を指し示すコードのテーブルが
生成される。
【0009】本発明のひとつの形態によれば、前記検出
された各命令レコードは大域変数レコードである。
【0010】本発明の他の形態によれば、前記生成され
た格納位置を指し示すコードのテーブルは、前記大域変
数の仮想関数の格納位置を指し示すコードを含む。
【0011】本発明の更に他の形態によれば、前記置換
命令レコードは、前記大域変数の仮想関数のためのテー
ブルを割り当てる割り当て命令コードを含む。
【0012】添付の図面とともに下記の実施の形態の詳
細な説明を参照することで、本発明に対する理解が深ま
るはずである。
【0013】
【発明の実施の形態】図1は、パーソナルコンピュータ
のアプリケーションプログラムを格納するメモリの構成
を示している。図1に示すように、アプリケーションプ
ログラムコードは、ジャンプテーブル部103と、アプ
リケーションパラメータ部105と、アプリケーション
大域変数部107とを含んでいる。もしそのアプリケー
ションがクイックドロウのような描画コードリソースを
利用するのなら、その大域変数はクイックドロウ大域変
数部109に格納され、アプリケーションパラメータ部
105内で指し示される。表1は、クラスBaseと、クラ
スBaseのサブクラスであるクラスcircle及びsquareとを
含む、クイックドロウを用いるプログラムのためのオブ
ジェクト指向言語C++の命令群である。クラスBase
は、パブリックに宣言された、図形を描画する仮想関数
Drawと図形の特徴を計算する仮想関数Calcとを含む。パ
ラメータの要素xとyは、クラスBase内でのみ使用され
るデータメンバである。クラスcircleは、クラスBaseに
おけるDrawのメソッドと異なる、円を描くためのメソッ
ドを定義する仮想関数Drawを含むクラスBaseのサブクラ
スである。クラスsquareは、円を描くためのメソッドと
は異なる、正方形を描くためのメソッドを定義する仮想
関数Drawを含むクラスBaseのサブクラスである。
【0014】
【表1】
【0015】 C++言語のオブジェクト指向命令をC言語の命令に翻
訳する際、仮想関数テーブル(v-table)が図2に示し
ように生成される。図2を参照すると、クラスBase20
1は、仮想関数Draw203(Base::Draw)及びCalc20
4(Base::Calc)を含んでいる。クラスcircle205
は、仮想関数Draw207(circle::Draw)及びCalc20
8(Base::Calc)を含み、クラスsquare209は、仮想
関数Draw211(square::Draw)及びCalc213(Bas
e::Calc)を含んでいる。v-tableは、そのクラスの仮想
関数へのオフセットポインタを含み、各クラスごとに生
成される。クラスBaseのv-table214は、Baseの仮想
関数Draw(Base::Draw)のコードへのメモリアドレスポ
インタ215と、Baseの仮想関数Calc(Base::Calc)の
コードへのメモリアドレスポインタ217とを含んでい
る。クラスcircleのv-table218は、クラスcircleの
仮想関数Draw(circle::Draw)のコードへのポインタ2
19と、クラスBaseの仮想関数Calcのコードへのポイン
タ221とを含んでいる。クラスsquareのv-table22
2は、クラスsquareの仮想関数Draw(square::Draw)の
コードへのポインタ223と、クラスBaseの仮想関数Ca
lcのコードへのポインタ225とを含んでいる。
【0016】ライン227及び229で示されているよ
うに、クラスBaseの仮想関数Draw203はオフセットポ
インタ215を参照し、クラスBaseの仮想関数Calcはオ
フセットポインタ217を参照する。クラスcircle20
5の仮想関数Calc208及びクラスsquare209の仮想
関数Calc213は、クラスBaseと同じ関数Calcを使用す
る。ライン235及び237で示されるように、関数Ca
lcは、クラスcircle及びsquareのそれぞれのv-table中
のオフセットポインタ221及び225を参照する。け
れども、クラスcircleのDrawメソッドは、クラスBaseの
Drawメソッドとは異なっている。従って、クラスcircle
205は、そのDraw関数のために、ライン241に示さ
れるようにクラスcircleのv-table218中のオフセッ
トポインタ219を参照する。同様に、クラスsquareの
DrawメソッドはクラスBase及びcircleのDrawメソッドと
は異なる。クラスsquare209は、そのDraw関数のため
に、ライン239に示されるようにクラスsquareのv-ta
ble222中のオフセットポインタ223を参照する。
【0017】図3は、マッキントッシュタイプのパーソ
ナルコンピュータにおけるアプリケーションプログラム
の構成を図式的に示している。図3においては、アプリ
ケーションの命令コードは、システムプログラム及びパ
ーソナルコンピュータにより使用される他のリソースを
格納するロ−メモリ325と、ハイメモリ301との間
に位置している。図3のメモリ構造は、A5world部30
5と、アプリケーションスタック310と、未使用メモ
リ部315と、ヒープ320とを含んでいる。ヒープ3
20は、開放され得るコールを通してプログラムに割り
当てられたメモリである。
【0018】良く知られているように、マッキントッシ
ュタイプのパーソナルコンピュータにおけるA5worldの
構成は、アプリケーションのプログラムセグメントのロ
ーディング及びアンローディングを制御するセグメント
ローダマネージャを用いることで多くのキーデータ構造
を間接的に指し示すマイクロプロセッサ中のA5レジス
タの参照に依存している。A5レジスタは、アプリケー
ション中の関数を指し示すための参照位置として使用さ
れる。アプリケーションのコンパイラは大域変数に対す
るA5相対アドレッシングモードを生成し、リンカは実
際のオフセットを決定する。コンパイルにおいて、アプ
リケーションのコンパイルが開始されると、セグメント
ローダは各アプリケーションについてA5worldのための
空間を割り当てる。実行コードは、大域変数空間を指し
示すためにA5を設定するアプリケーションの前部にリ
ンクされる。他のタイプのパーソナルコンピュータは、
アプリケーションセグメントの位置決め用の参照のため
に、他の同様な構成を用いている。
【0019】独立コードは、アプリケーションと異な
り、コンパイルされるのではなく、単にロードされ実行
される。独立コードには、位置を参照するA5worldが無
いため、大域変数のための空間は直ちには割り当てられ
ず、大域変数はすぐに定義できない。その結果、オブジ
ェクト指向言語C++からC言語へのアプリケーション
のための命令セットの変換は、独立コードに関して特別
な措置が必要とされる。本発明によれば、C++言語の
命令コードにおける仮想関数に係る構成は検出され、関
連する関数に係る配置構成に自動的に置換され、その関
連する関数を指し示す参照コードのテーブルが生成され
る。好都合なことに、各アプリケーションに対する特別
なプログラミング、あるいは、そのアプリケーションに
おいて独立コードリソースを提供するために特別なコー
ドの手作業による挿入の必要なく、仮想関数及び独立コ
ードリソースのためにジャンプテーブルが形成される。
【0020】図4は、2つのアプリケーションのための
マッキントッシュパーソナルコンピュータのメモり構成
を示している。図4を参照すると、ハイメモリ部401
と、A5world部403とアプリケーション1のスタック
407とを含む区分405と、未使用メモリ部409
と、A5world部412とアプリケーション2のスタック
414とを含む区分410と、未使用メモリ部416
と、システムヒープ418と、ローメモリ部420とが
示されている。各アプリケーション部は、仮想関数のオ
フセットのための参照ベースを提供する、それ自身のA5
worldを含んでいる。こうして、メモリ中の、多くの独
立したアプリケーションのそれぞれは、それ自身の割り
当てを用いて動作し得る。
【0021】図5はコンピュータアプリケーションのた
めの命令コードのコンパイル及び格納のために用いるこ
とのできる処理装置のブロック図を示している。図5の
処理装置においては、入力ソースコード記憶部503
と、プロセッサ505と、出力コード記憶部507と、
バス501と、入力インターフェース509と、入力デ
バイス511と、出力インターフェース513と、出力
記憶媒体515と、データ記憶部517と、プログラム
記憶部519とがある。バス501は、データ記憶部5
17と、プログラム記憶部519と、プロセッサ505
と、入力ソースコード記憶部503と、出力コード記憶
部507と、入力インターフェース509と、出力イン
ターフェース513とを、情報信号がそれらユニット間
で交換できるように接続している。入力デバイス511
はキーボードや磁気記憶デバイスでよく、入力インター
フェース509を介してバス501に接続され、出力記
憶媒体515は、出力インターフェース513を介して
バス501に接続されている。
【0022】図5の処理装置の命令コードの変換は、プ
ログラム記憶部519に格納された命令コードのセット
により制御されるプロセッサ505で実行される。デー
タ記憶部517は、処理中に要求されたデータを格納す
るよう動作する。動作中、入力デバイス511からの、
C++のようなオブジェクト指向言語の入力命令レコー
ドに対応する信号は、インターフェース509を介して
入力される。入力命令レコードは、手作業で、あるいは
磁気ディスクのような記憶媒体から入力され得る。オブ
ジェクト指向言語C++からC言語への、図5の装置を
用いたコード変換において、入力命令レコードのセット
は、まず入力ソースコード記憶部503に格納される。
プログラム記憶部519に格納されたCFront(C++か
らCへ翻訳する、AT&Tから入手可能なC++言語の
翻訳プログラム)のような変換プログラムは、入力ソー
スコード記憶部593中のC++言語の命令レコードを
C言語に翻訳し、得られたC言語の命令レコードをデー
タ記憶部517に格納するようプロセッサ505を制御
する。CFrontによって生成されたC言語の命令レコード
は、仮想関数テーブルを実現させるレコードを含んでい
る。表2は、その翻訳から得られた、表1に示した命令
コードの大域変数 _vtbl_6square,_vtbl_6circle,_vt
bl_4Baseのための仮想関数テーブルを実現するCFrontの
命令レコードを示している。
【0023】
【表2】
【0024】 1 struct _mptr _vtbl_6square[]={ 2 0, 0, 0, 3 0, 0, (_vptp)Draw_6squareFv, 4 0, 0, (_vptp)Calc_4BaseFv, 5 0, 0, 0 6 }; 7 struct _mptr _vtbl_6circle[]={ 8 0, 0, 0, 9 0, 0, (_vptp)Draw_6circleFv, 10 0, 0, (_vptp)Calc_4BaseFv, 11 0, 0, 0 12 }; 13 struct _mptr _vtbl_4Base[]={ 14 0, 0, 0, 15 0, 0, (_vptp)Draw_4BaseFv, 16 0, 0, (_vptp)Calc_4BaseFv, 17 0, 0, 0 18 }; 独立コードリソースにおける仮想関数テーブルの生成を
支援するために、すべてのコードセグメントのためのジ
ャンプテーブルを生成するリンカを用意する必要があ
る。そのジャンプテーブルは、各関数の位置及びそのサ
イズの詳細な情報を提供する。本発明によれば、CFront
が生成した命令レコードは、仮想関数テーブルを割当て
る命令レコードを用意するために構文解析され、その仮
想関数テーブルは初期化される。
【0025】図5におけるコード変換動作は図6及び図
7のフローチャートに示されている。図6及び図7のス
テップは、プログラム記憶部519に格納された命令に
対応している。図5のブロック図及び図6,図7のフロ
ーチャートを参照すると、第1のオブジェクト指向言語
のソース命令レコードは、入力デバイス513及びイン
ターフェース509を介して入力され、入力ソースコー
ド記憶部503に格納される。第1のオブジェクト指向
言語から得られた命令レコードは、ステップ601でプ
ロセッサ505に入力され、ステップ603で構文が解
析される。そして、ステップ605で、処理中のv-tabl
eがfalseにセットされ、次の順番のレコードがプロセッ
サ505によって読まれ、プロセッサ505のバッファ
ラインに格納される(ステップS607)。そして、フ
ァイルの終了に達したか判定する判定ステップ609に
移る。ステップ609でファイル終了レコードが検出さ
れるまでは、ステップ609からステップ613に進
み、処理中のv-tableがfalseであるか判定される。処理
中のv-tableがfalseであれば、現在レコードが構成"str
uct _mptr _vtbl_"を含むか検出するためにステップ6
13から図7のステップ701に進む。含まなければ、
バッファライン中の現在レコードは出力コード記憶部5
07に書き込まれ、バッファラインに次のレコードを読
み込む図6のステップ607に制御が移される。ステッ
プ701で、構成"struct _mptr _vtbl_"が検出された
なら、処理中のv-tableは、trueに設定され(ステップ
703)、変数vfunctioncntには1が設定され、識別用
に切り出されたクラス名がバッファライン中のレコード
のクラス名として割り当てられる(ステップ707)。
そして、次のレコードがステップ607でバッファライ
ンに読み込まれる。
【0026】バッファライン中の現在レコードは、ファ
イル終了レコードに達したか判定するためにチェックさ
れる(ステップ609)。ファイル終了でなければ、処
理中のv-tableがfalseであるかチェックされる(ステッ
プ613)。ステップ613で処理中のv-tableがtrue
であると判定されると、そのレコードは、仮想関数を示
す"0,0,0};"の構成を含むか判定される。もし含まなけ
れば、ステップ617でvfunctioncntを次に進めてか
ら、再びステップ607にはいる。そうでなければ、構
成"struct _mptr _vtbl_{classname}[vfunctioncnt]"及
び"struct _mptr*_ptbl_{classname}"は、出力コード記
憶部507に出力される。構成"struct _mptr _vtbl_{c
lassname}[vfunctioncnt]"は、出力コードに、検出され
た仮想関数の配置を与え、構成"struct _mptr *_ptbl_
{classname}"は、v-tableがどこに配置されているかに
関して付加的な情報を与える。そして、制御は、v-tabl
eがfalseに設定されるステップ605に渡され、次のレ
コードが読み込まれるステップ607に進む。判定ステ
ップ609でファイル終了レコードが検出されると、図
6及び図7に示した翻訳処理は完了し、制御は、ステッ
プ611におけるコンパイルの次の処理へと渡される。
【0027】例として、表2,表3,表4は、CFrontに
よりCの命令コードに変換されたC++言語の命令コー
ドセットにおける仮想関数の配置と、その仮想関数の創
出を示す。見ての通り、表2はCFrontにより生成された
関数ポインタの配列を含む大域変数として実現された仮
想関数テーブルを示している。CFrontによりC言語のコ
ードに翻訳され、それぞれの実現された仮想関数テーブ
ルを表わす大域変数_vtbl_6square,_vtbl_6circle,_v
tbl_4Baseが、表2に示されている。図1に示したアプ
リケーションのためのジャンプテーブルを用意するため
に、表2の生成されたC言語のソースコードは、図6及
び図7のフローチャートに関して述べたとおり構文解析
される。
【0028】図6及び図7に関して、構成"struct _mpt
r _vtbl_"は、図7のステップ701で、表2の1,
7,13行目に検出され、構成"0,0,0}"は、図6のステ
ップ615で、表2の5,6,11,12,17,18
行目に検出される。表3は、"0,0,0}"をもつ表2の命令
レコードのための置換命令コードを示している。図6及
び図7において、表3の1,2行目の命令レコードは、
表2の1−6行目におけるv-tableの割り当てのために
与えられた割り当てを置換する。表3の3,4行目の命
令レコードは、表2の7−12行目におけるv-tableの
割り当てのために与えられた割り当てを置換し、表3の
5,6行目の命令レコードは、表2の13−18行目に
おけるv-tableの割り当てのために与えられた割り当て
を置換する。
【0029】
【表3】
【0030】 1 struct _mptr _vtbl_6square[4]; 2 struct _mptr *_ptbl_6square; 3 struct _mptr _vtbl_6circle[4]; 4 struct _mptr *_ptbl_6circle; 5 struct _mptr _vtbl_4Base[4]; 6 struct _mptr *_ptbl_4Base; 表4は、表2及び表3を例として仮想関数への各エント
リを初期化する、本発明によるC言語の関数の命令を示
している。表4のC言語の関数は、仮想関数テーブルの
実行時バインディングを提供する。独立コードリソース
へのコールに先立って、仮想関数テーブルを初期化する
ために表4のC言語の関数のコールにより、エントリが
独立コードリソースに供給される。本発明によれば、C
言語における独立コードリソースを用いる仮想関数を含
んだ全仮想関数が支援されるように、C++言語の命令
コードセットをC言語へと変換した後、コンパイルの間
に仮想関数テーブルが自動的に生成される。
【0031】
【表4】
【0032】 void Initialize_VTables_Shapes (void) { /* ClassName = 6square */ memset (&_vtbl_6square, 0, sizeof (_vtbl_6square)); _vtbl_6square[1].f = (_vptp)Draw_6squareFv; _vtbl_6square[2].f = (_vptp)Calc_4BaseFv; _ptbl_6square = _vtbl_6square; /* ClassName = 6circle */ memset (&_vtbl_6circle, 0, sizeof (_vtbl_6circle)); _vtbl_6circle[1].f = (_vptp)Draw_6circleFv; _vtbl_6circle[2].f = (_vptp)Calc_4BaseFv; _ptbl_6circle = _vtbl_6circle; /* ClassName = 4Base */ memset (&_vtbl_4Base, 0, sizeof (_vtbl_4Base)); _vtbl_4Base[1].f = (_vptp)Draw_4BaseFv; _vtbl_4Base[2].f = (_vptp)Calc_4BaseFv; _ptbl_4Base = _vtbl_4Base; 以上、本発明の好適な実施の形態を説明したが、本発明
が上記実施の形態に限定されないこと、および、本発明
の精神及び範囲から逸脱せずに、当業者によって変更あ
るいは修正され得ることが理解されるはずである。
【0033】
【他の実施の形態】なお、本発明は、複数の機器(例え
ばホストコンピュータ,インタフェイス機器,リーダ,
プリンタなど)から構成されるシステムに適用しても、
一つの機器からなる装置(例えば、複写機,ファクシミ
リ装置など)に適用してもよい。
【0034】また、本発明の目的は、前述した実施形態
の機能を実現するソフトウェアのプログラムコードを記
録した記憶媒体を、システムあるいは装置に供給し、そ
のシステムあるいは装置のコンピュータ(またはCPU
やMPU)が記憶媒体に格納されたプログラムコードを
読出し実行することによっても達成される。
【0035】この場合、記憶媒体から読出されたプログ
ラムコード自体が本発明の新規な機能を実現することに
なり、そのプログラムコードを記憶した記憶媒体は本発
明を構成することになる。
【0036】プログラムコードを供給するための記憶媒
体としては、例えば、フロッピディスク,ハードディス
ク,光ディスク,光磁気ディスク,CD−ROM,CD
−R,磁気テープ,不揮発性のメモリカード,ROMな
どを用いることができる。
【0037】また、コンピュータが読出したプログラム
コードを実行することにより、前述した実施形態の機能
が実現されるだけでなく、そのプログラムコードの指示
に基づき、コンピュータ上で稼働しているOS(オペレ
ーティングシステム)などが実際の処理の一部または全
部を行い、その処理によって前述した実施形態の機能が
実現される場合も含まれる。
【0038】さらに、記憶媒体から読出されたプログラ
ムコードが、コンピュータに挿入された機能拡張ボード
やコンピュータに接続された機能拡張ユニットに備わる
メモリに書込まれた後、そのプログラムコードの指示に
基づき、その機能拡張ボードや機能拡張ユニットに備わ
るCPUなどが実際の処理の一部または全部を行い、そ
の処理によって前述した実施形態の機能が実現される場
合も含まれる。
【0039】なお、以上説明したのは本発明のひとつの
実施例であり、本発明の範囲および精神を逸脱しないよ
うこれに変更をくわえることもできる。
【0040】
【発明の効果】以上説明したように、本発明によれば,
仮想関数と独立コードリソースとを含むオブジェクト指
向言語から命令コードを自動的にコンパイルする事が可
能となる。
【0041】
【図面の簡単な説明】
【図1】アプリケーション用の命令コードを含むメモリ
の構成を示す図である。
【図2】本発明によるv-tableの構造を示す図である。
【図3】ひとつのアプリケーション用のコンパイルされ
た命令コードセットを格納するコンピュータメモリの構
成を示す図である。
【図4】ふたつのアプリケーション用のコンパイルされ
た命令コードセットを格納するコンピュータメモリの構
成を示す図である。
【図5】本発明の実施の形態によるオブジェクト指向言
語のソースコードをコンパイルに適応した処理系のブロ
ック図である。
【図6】本発明の実施の形態による、第1のオブジェク
ト指向言語のソースコードを、出力記憶部に記憶するた
めに入力記憶部から第2のオブジェクト指向言語に変換
する際の、図1のプロセッサの動作を示すフローチャー
トである。
【図7】本発明の実施の形態による、第1のオブジェク
ト指向言語のソースコードを、出力記憶部に記憶するた
めに入力記憶部から第2のオブジェクト指向言語に変換
する際の、図1のプロセッサの動作を示すフローチャー
トである。

Claims (32)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向言語の命令レコードを
    処理するプログラミング言語の処理方法であって、 オブジェクト指向言語の一連の命令レコードを読み込む
    工程と、 前記一連の命令レコードから所定の構成を含む命令レコ
    ードを検出する工程と、 検出された各命令レコードを、格納位置コードを含む置
    換命令レコードの集合に置換する工程と、 前記命令レコードの置換に応じて、前記格納位置を指し
    示すコードのテーブルを生成する工程とを備えることを
    特徴とするプログラミング言語の処理方法。
  2. 【請求項2】 前記検出された各命令レコードは大域変
    数レコードであることを特徴とする請求項1に記載のプ
    ログラミング言語の処理方法。
  3. 【請求項3】 前記生成された格納位置を指し示すコー
    ドのテーブルは、前記大域変数の仮想関数の格納位置を
    指し示すコードを含むことを特徴とする請求項2に記載
    のプログラミング言語の処理方法。
  4. 【請求項4】 前記置換命令レコードは、前記大域変数
    の仮想関数のためのテーブルを割り当てる割り当て命令
    コードを含むことを特徴とする請求項3に記載のプログ
    ラミング言語の処理方法。
  5. 【請求項5】 前記仮想関数テーブルを初期化する工程
    を更に備えることを特徴とする請求項4に記載のプログ
    ラミング言語の処理方法。
  6. 【請求項6】 前記割り当てられた仮想関数テーブル
    は、独立コードリソースを指し示すことを特徴とする請
    求項4に記載のプログラミング言語の処理方法。
  7. 【請求項7】 前記置換命令コードと前記格納位置を指
    し示すコードのテーブルとを、記憶媒体に格納する工程
    を更に備えることを特徴とする請求項1に記載のプログ
    ラミング言語の処理方法。
  8. 【請求項8】 入力命令コード記憶部と、プロセッサ
    と、出力コード記憶部とを有するシステムにおいて、第
    1のプログラミング言語の命令レコードを、第2のプロ
    グラミング言語に変換するプログラミング言語処理方法
    であって、 前記入力コード記憶部に第1のプログラミング言語の命
    令レコードを格納する工程と、 前記第1の言語の命令レコードを第2の言語の命令レコ
    ードの集合に翻訳する工程と、 所定の構成を含む前記第2の言語の一連の命令レコード
    を検出するために、前記第2の言語の命令レコードを逐
    次的に読む工程と、 検出された命令レコードを格納位置のコードを含む置換
    命令レコードの集合で置換する工程と、 前記命令の置換に応じて、前記格納位置を指し示すコー
    ドのテーブルを生成する工程とを備えることを特徴とす
    るプログラミング言語の処理方法。
  9. 【請求項9】 前記第1のプログラミング言語は第1の
    オブジェクト指向プログラミング言語であり、前記第2
    のプログラミング言語は第2のオブジェクト指向言語で
    あることを特徴とする請求項8に記載のプログラミング
    言語の処理方法。
  10. 【請求項10】 前記検出された各命令は大域変数のレ
    コードであることを特徴とする請求項9に記載のオブジ
    ェクト指向言語の処理方法。
  11. 【請求項11】 前記生成された格納位置を指し示すコ
    ードのテーブルは、前記大域変数の仮想関数の格納位置
    を指し示すコードを含むことを特徴とする請求項10に
    記載のプログラミング言語の処理方法。
  12. 【請求項12】 前記置換命令レコードは、前記大域変
    数の仮想関数のためのテーブルを割り当てる割り当て命
    令コードを含むことを特徴とする請求項11に記載のプ
    ログラミング言語の処理方法。
  13. 【請求項13】 前記割り当てられた仮想関数テーブル
    は、独立コードリソースを指し示すことを特徴とする請
    求項11に記載のプログラミング言語の処理方法。
  14. 【請求項14】 前記置換命令コードと前記格納位置を
    指し示すコードのテーブルとを、記憶媒体に格納する工
    程を更に備えることを特徴とする請求項8に記載のプロ
    グラミング言語の処理方法。
  15. 【請求項15】 前記置換命令コードと前記格納位置を
    指し示すコードのテーブルとを、記憶媒体に格納する工
    程を更に備えることを特徴とする請求項9に記載のプロ
    グラミング言語の処理方法。
  16. 【請求項16】 コンピュータにより読取り可能なプロ
    グラムコード手段を含むコンピュータで使用できる記憶
    媒体であって、 オブジェクト指向言語の一連の命令レコードを読み込む
    第1のコンピュータ可読プログラムコード手段と、 前記一連の命令レコードから所定の構成を含む命令レコ
    ードを検出する第2のコンピュータ可読プログラムコー
    ド手段と、 検出された各命令レコードを、格納位置コードを含む置
    換命令レコードの集合で置換する第3のコンピュータ可
    読プログラムコード手段と、 前記命令レコードの置換に応じて、前記格納位置を指し
    示すコードのテーブルを生成する第4のコンピュータ可
    読プログラムコード手段とを含むことを特徴とする記憶
    媒体。
  17. 【請求項17】 入力命令コード記憶部と、プロセッサ
    と、出力コード記憶部とを有し、第1のプログラミング
    言語の命令レコードを、第2のプログラミング言語に変
    換するシステムにおいて、コンピュータにより読取り可
    能なプログラムコード手段を含むコンピュータで使用で
    きる記憶媒体であって、 前記入力コード記憶部に第1のプログラミング言語の命
    令レコードを格納する第1のコンピュータ可読プログラ
    ムコード手段と、 前記第1の言語の命令レコードを第2の言語の命令レコ
    ードの集合に翻訳する第2のコンピュータ可読プログラ
    ムコード手段と、 所定の構成を含む前記第2の言語の一連の命令レコード
    を検出するために、前記第2の言語の命令レコードを逐
    次的に読む第3のコンピュータ可読プログラムコード手
    段と、 検出された命令レコードを格納位置のコードを含む置換
    命令レコードの集合で置換する第4のコンピュータ可読
    プログラムコード手段と、 前記命令の置換に応じて、前記格納位置を指し示すコー
    ドのテーブルを生成する第5のコンピュータ可読プログ
    ラムコード手段とを含むことを特徴とする記憶媒体。
  18. 【請求項18】 オブジェクト指向言語の命令レコード
    を処理するプログラミング言語の処理装置であって、 オブジェクト指向言語の一連の命令レコードを格納する
    領域と、コンピュータコードを格納する領域とを含むメ
    モリと、 前記コンピュータコードを実行するプロセッサとを備
    え、 前記コンピュータコードは、(1)オブジェクト指向言
    語の一連の命令レコードを読み込み、(2)前記一連の
    命令レコードから所定の構成を含む命令レコードを検出
    し、(3)検出された各命令レコードを、格納位置コー
    ドを含む置換命令レコードの集合に置換し、(4)前記
    命令レコードの置換に応じて、前記格納位置を指し示す
    コードのテーブルを生成する処理工程を含むことを特徴
    とするプログラミング言語の処理装置。
  19. 【請求項19】 前記検出された各命令レコードは大域
    変数レコードであることを特徴とする請求項18に記載
    のプログラミング言語の処理装置。
  20. 【請求項20】 前記生成された格納位置を指し示すコ
    ードのテーブルは、前記大域変数の仮想関数の格納位置
    を指し示すコードを含むことを特徴とする請求項19に
    記載のプログラミング言語の処理装置。
  21. 【請求項21】 前記置換命令レコードは、前記大域変
    数の仮想関数のためのテーブルを割り当てる割り当て命
    令コードを含むことを特徴とする請求項20に記載のプ
    ログラミング言語の処理装置。
  22. 【請求項22】 前記コンピュータコードは、前記仮想
    関数テーブルを初期化する処理工程を更に備えることを
    特徴とする請求項4に記載のプログラミング言語の処理
    装置。
  23. 【請求項23】 前記割り当てられた仮想関数テーブル
    は、独立コードリソースを指し示すことを特徴とする請
    求項21に記載のプログラミング言語の処理装置。
  24. 【請求項24】 前記コンピュータコードは、前記置換
    命令コードと前記格納位置を指し示すコードのテーブル
    とを、記憶媒体に格納する処理工程を更に備えることを
    特徴とする請求項1に記載のプログラミング言語の処理
    装置。
  25. 【請求項25】 入力命令コード記憶部と、プロセッサ
    と、出力コード記憶部とを有するシステムにおいて、第
    1のプログラミング言語の命令レコードを、第2のプロ
    グラミング言語に変換するプログラミング言語処理装置
    であって、 前記入力コード記憶部に第1のプログラミング言語の命
    令レコードを格納する格納手段と、 前記第1の言語の命令レコードを第2の言語の命令レコ
    ードの集合に翻訳する翻訳手段と、 所定の構成を含む前記第2の言語の命令レコードの並び
    を検出するために、前記第2の言語の命令レコードを逐
    次的に読む逐次読込手段と、 検出された命令レコードを格納位置のコードを含む置換
    命令レコードの集合で置換する置換手段と、 前記命令の置換に応じて、前記格納位置を指し示すコー
    ドのテーブルを生成する生成手段とを備えることを特徴
    とするプログラミング言語の処理装置。
  26. 【請求項26】 前記第1のプログラミング言語は第1
    のオブジェクト指向プログラミング言語であり、前記第
    2のプログラミング言語は第2のオブジェクト指向言語
    であることを特徴とする請求項25に記載のプログラミ
    ング言語の処理装置。
  27. 【請求項27】 前記検出された各命令は大域変数のレ
    コードであることを特徴とする請求項26に記載のオブ
    ジェクト指向言語の処理装置。
  28. 【請求項28】 前記生成された格納位置を指し示すコ
    ードのテーブルは、前記大域変数の仮想関数の格納位置
    を指し示すコードを含むことを特徴とする請求項27に
    記載のプログラミング言語の処理装置。
  29. 【請求項29】 前記置換命令レコードは、前記大域変
    数の仮想関数のためのテーブルを割り当てる割り当て命
    令コードを含むことを特徴とする請求項28に記載のプ
    ログラミング言語の処理装置。
  30. 【請求項30】 前記割り当てられた仮想関数テーブル
    は、独立コードリソースを指し示すことを特徴とする請
    求項28に記載のプログラミング言語の処理装置。
  31. 【請求項31】 前記置換命令コードと前記格納位置を
    指し示すコードのテーブルとを記憶媒体に格納する記憶
    媒体を更に備えることを特徴とする請求項25に記載の
    プログラミング言語の処理装置。
  32. 【請求項32】 前記置換命令コードと前記格納位置を
    指し示すコードのテーブルとを、記憶媒体に格納する記
    憶媒体を更に備えることを特徴とする請求項26に記載
    のプログラミング言語の処理装置。
JP8171363A 1995-06-30 1996-07-01 プログラミング言語処理方法及び装置 Withdrawn JPH0934713A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/497082 1995-06-30
US08/497,082 US5764991A (en) 1995-06-30 1995-06-30 Processing object oriented code and virtual function code

Publications (1)

Publication Number Publication Date
JPH0934713A true JPH0934713A (ja) 1997-02-07

Family

ID=23975386

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8171363A Withdrawn JPH0934713A (ja) 1995-06-30 1996-07-01 プログラミング言語処理方法及び装置

Country Status (4)

Country Link
US (1) US5764991A (ja)
EP (1) EP0751459B1 (ja)
JP (1) JPH0934713A (ja)
DE (1) DE69617542D1 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AUPP365798A0 (en) * 1998-05-22 1998-06-18 Ladd, James Christian Architecture for the execution of program code
US6553403B1 (en) * 1998-06-03 2003-04-22 International Business Machines Corporation System, method and computer program product for monitoring in a distributed computing environment
US6675377B1 (en) * 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP4462676B2 (ja) * 1999-10-27 2010-05-12 富士通株式会社 プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体
EP1186996B1 (en) * 2000-09-08 2011-01-05 Sun Microsystems, Inc. Method of programming for providing polymorphism
RU2206119C2 (ru) * 2000-09-22 2003-06-10 Закрытое акционерное общество "МЦСТ" Способ получения объектного кода
US7406682B2 (en) * 2001-03-26 2008-07-29 Emc Corporation Translator-compiler for converting legacy management software
US7281244B2 (en) 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US7484095B2 (en) 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
US7222331B2 (en) 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US8121955B2 (en) 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US7165246B2 (en) 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US7272830B2 (en) 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
KR100617698B1 (ko) * 2004-06-07 2006-08-28 삼성전자주식회사 기능별 데이터 저장을 위한 바이너리 파일 생성 장치 및방법과 그 방법이 저장된 컴퓨터 판독 가능한 저장 매체
US7992130B2 (en) * 2007-05-07 2011-08-02 Microsoft Corporation Class-based object-oriented features in class-less script language
US20090271765A1 (en) * 2008-04-29 2009-10-29 Microsoft Corporation Consumer and producer specific semantics of shared object protocols
US9164735B2 (en) * 2012-09-27 2015-10-20 Intel Corporation Enabling polymorphic objects across devices in a heterogeneous platform
WO2020041411A2 (en) * 2018-08-21 2020-02-27 Bcdb, Inc. Object oriented smart contracts for utxo-based blockchains
US11694197B2 (en) 2018-08-21 2023-07-04 Bcdb, Inc. Object oriented smart contracts for UTXO-based blockchains

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5361350A (en) * 1991-12-12 1994-11-01 International Business Machines Corporation Object oriented method management system and software for managing class method names in a computer system
US5327562A (en) * 1992-05-06 1994-07-05 Microsoft Corporation Method for implementing virtual function tables in a compiler for an object-oriented programming language
US5515536A (en) * 1992-11-13 1996-05-07 Microsoft Corporation Method and system for invoking methods of an object through a dispatching interface
US5442793A (en) * 1993-02-26 1995-08-15 Microsoft Corporation Method and system for locating an inherited virtual function member of a derived class
US5615400A (en) * 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization

Also Published As

Publication number Publication date
EP0751459B1 (en) 2001-12-05
US5764991A (en) 1998-06-09
EP0751459A2 (en) 1997-01-02
DE69617542D1 (de) 2002-01-17
EP0751459A3 (en) 1997-07-02

Similar Documents

Publication Publication Date Title
JPH0934713A (ja) プログラミング言語処理方法及び装置
US6093216A (en) Method of run-time tracking of object references in Java programs
US6438745B1 (en) Program conversion apparatus
US8793670B2 (en) System and method for early platform dependency preparation of intermediate code representation during bytecode compilation
US8271965B2 (en) Apparatus to guarantee type and initialization safety in multithreaded programs
US6381737B1 (en) Automatic adapter/stub generator
JP5139987B2 (ja) 拡張可能メタデータ
US6988263B1 (en) Apparatus and method for cataloging symbolic data for use in performance analysis of computer programs
EP4099152A1 (en) Extending a virtual machine instruction set architecture
US6158047A (en) Client/server system for fast, user transparent and memory efficient computer language translation
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
US7168071B2 (en) Method and system of permitting stack allocation to programs having open-world features
US6959430B2 (en) Specialized heaps for creation of objects in object-oriented environments
JP2000010790A (ja) グロ―バル衝突判定用のユニタリデ―タ構造体のシステム、方法及びコンピュ―タプログラム製品
US5889995A (en) Using constant selectors for method identification
US6968543B2 (en) Information processing apparatus
US20210294586A1 (en) Modeling foreign functions using executable references
CN115700470A (zh) 文件加载的处理方法和装置,计算机存储介质和电子设备
US8056061B2 (en) Data processing device and method using predesignated register
JP5506936B2 (ja) 意味論的値を利用するオブジェクト・レベルの互換性及びクラスのサイズ変更
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
EP0790555B1 (en) Compile apparatus and method
GB2342200A (en) Initializing global registers
EP4291988B1 (en) Tracking frame states of call stack frames including colorless roots
US7039905B1 (en) Compiler device and computer-readable recording medium recorded with compiler program

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20030902