JPH06103085A - オブジェクト指向型プログラム言語のためのコンパイラに仮想ファンクションテーブルをインプリメントする方法 - Google Patents
オブジェクト指向型プログラム言語のためのコンパイラに仮想ファンクションテーブルをインプリメントする方法Info
- Publication number
- JPH06103085A JPH06103085A JP5105708A JP10570893A JPH06103085A JP H06103085 A JPH06103085 A JP H06103085A JP 5105708 A JP5105708 A JP 5105708A JP 10570893 A JP10570893 A JP 10570893A JP H06103085 A JPH06103085 A JP H06103085A
- Authority
- JP
- Japan
- Prior art keywords
- class
- virtual function
- sub
- function
- tile
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
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)
Abstract
(57)【要約】 (修正有)
【目的】 オブジェクト指向プログラム言語のためのコ
ンピュータコンパイラのために、仮想ファンクションを
インプリメントする。 【構成】 クラスのための仮想ファンクションテーブル
は、タイルテーブルおよび複数のサブテーブルを含む。
タイルテーブルは、サブテーブルに対するポインタを含
み、サブテーブルは、そのクラスの仮想ファンクション
メンバーに対するポインタを含む。各子クラスは、その
子クラスがそのサブテーブルにおけるファンクションを
オーバーライドしないときに、その親クラスのサブテー
ブルを共用する。もし、子クラスがファンクションをオ
ーバーライドするならば、子クラスには、それ自身のサ
ブテーブルが割り当てられる。クラスのための各仮想フ
ァンクションメンバーは、タイルテーブルオフセットお
よびサブテーブルオフセットによって識別される。
ンピュータコンパイラのために、仮想ファンクションを
インプリメントする。 【構成】 クラスのための仮想ファンクションテーブル
は、タイルテーブルおよび複数のサブテーブルを含む。
タイルテーブルは、サブテーブルに対するポインタを含
み、サブテーブルは、そのクラスの仮想ファンクション
メンバーに対するポインタを含む。各子クラスは、その
子クラスがそのサブテーブルにおけるファンクションを
オーバーライドしないときに、その親クラスのサブテー
ブルを共用する。もし、子クラスがファンクションをオ
ーバーライドするならば、子クラスには、それ自身のサ
ブテーブルが割り当てられる。クラスのための各仮想フ
ァンクションメンバーは、タイルテーブルオフセットお
よびサブテーブルオフセットによって識別される。
Description
【0001】
【産業上の利用分野】本発明は、一般的には、コンピュ
ータプログラム言語のためのコンパイラの分野に関す
る。もっと詳細には、本発明は、オブジェクト指向の特
徴を持った言語のためのコンパイラに関する。
ータプログラム言語のためのコンパイラの分野に関す
る。もっと詳細には、本発明は、オブジェクト指向の特
徴を持った言語のためのコンパイラに関する。
【0002】
【発明の背景技術】 オブジェクト指向型プログラム
技術を使用することは、複雑なコンピュータプログラム
の発展に寄与する。オブジェクト指向型技術の助けとな
るプログラム言語が開発されている。このようなプログ
ラム言語の一つがC++である。オブジェクト指向型プロ
グラム言語の2つの特徴は、データ封入のためのサポー
トとデータ形式の継承のためのサポートである。データ
封入とは、ファンクション及びデータを拘束することを
意味する。継承とは、あるデータの形式を他のデータ形
式で表現する能力である。C++言語では、オブジェクト
指向型技術がクラスを使用することによりサポートされ
る。クラスは、使用者が定義する形式である。クラスを
表現することは、そのクラスのデータメンバーとファン
クションメンバーを記述することである。たとえば、次
の記述は、CIRCLEという名のクラスのデータメンバーと
ファンクションメンバーを定義する。
技術を使用することは、複雑なコンピュータプログラム
の発展に寄与する。オブジェクト指向型技術の助けとな
るプログラム言語が開発されている。このようなプログ
ラム言語の一つがC++である。オブジェクト指向型プロ
グラム言語の2つの特徴は、データ封入のためのサポー
トとデータ形式の継承のためのサポートである。データ
封入とは、ファンクション及びデータを拘束することを
意味する。継承とは、あるデータの形式を他のデータ形
式で表現する能力である。C++言語では、オブジェクト
指向型技術がクラスを使用することによりサポートされ
る。クラスは、使用者が定義する形式である。クラスを
表現することは、そのクラスのデータメンバーとファン
クションメンバーを記述することである。たとえば、次
の記述は、CIRCLEという名のクラスのデータメンバーと
ファンクションメンバーを定義する。
【0003】 ここに、変数x及びyは、円の中心の位置を定めるもの
であり、変数radiusは、円の半径を定めるものである。
これらの変数は、クラスCIRCLEのデータメンバーと呼ば
れる。ファンクションdrawは、使用者が定義するファン
クションであり、特定の半径の円を特定の位置に描くこ
とを意味する。クラスのデータメンバーとファンクショ
ンメンバーは、互いに束縛されて、ファンクションがそ
のクラスのインスタンスで作動するようになる。クラス
のインスタンスとは、クラスのオブジェクトと呼ばれる
ものである。
であり、変数radiusは、円の半径を定めるものである。
これらの変数は、クラスCIRCLEのデータメンバーと呼ば
れる。ファンクションdrawは、使用者が定義するファン
クションであり、特定の半径の円を特定の位置に描くこ
とを意味する。クラスのデータメンバーとファンクショ
ンメンバーは、互いに束縛されて、ファンクションがそ
のクラスのインスタンスで作動するようになる。クラス
のインスタンスとは、クラスのオブジェクトと呼ばれる
ものである。
【0004】C++のシンタックスでは、次の記述がクラ
スCIRCLEという形式に該当するオブジェクトa及びbを
表現する。 CIRCLE a,b; この表現がオブジェクトa及びbのためのメモリの位置
を決めることになり、この位置がクラスのインスタンス
と呼ばれる。次の記述がオブジェクトa及びbのデータ
メンバーにデータを当てはめる。 a.x = 2; a.y = 2; a.radius= 1; b.x = 4; b.y = 5; b.radius= 2; オブジェクトaとbで定義されたサークルを描くために
次のステートメントが用いられる。
スCIRCLEという形式に該当するオブジェクトa及びbを
表現する。 CIRCLE a,b; この表現がオブジェクトa及びbのためのメモリの位置
を決めることになり、この位置がクラスのインスタンス
と呼ばれる。次の記述がオブジェクトa及びbのデータ
メンバーにデータを当てはめる。 a.x = 2; a.y = 2; a.radius= 1; b.x = 4; b.y = 5; b.radius= 2; オブジェクトaとbで定義されたサークルを描くために
次のステートメントが用いられる。
【0005】 a.ドロー(draw)(); b.ドロー(draw)(); 導き出されたクラスはそのベースクラスの特性−データ
メンバーとファンクションメンバー−を受け継ぐクラス
である。例えば、次の導き出されたクラス、サークル
フィル(CIRCLE FILL) はベースクラスであるサークル
の特性を受け継ぐ。 このデクラレーション(declaration)はクラス サーク
ル フィル(class CIRCLE FILL)が、クラス サーク
ル フィル即ちデータメンバーパターンと機能メンバー
フィルのデクラレーションに誘導されたこれらのデータ
とファンクションメンバーに加えて、クラス サークル
にある全てのデータとファンクションメンバーを有して
いることを記述している。この例において、クラス サ
ークル フィルはデータメンバーx,y,半径及びパター
ンとファンクションメンバードローとフィルを有してい
る。クラス サークル フィルはクラス サークルの特
性を“受け継ぐ”言われる。たのクラスの特性を受け継
ぐクラスは導き出されたクラス(例えば、サークル フ
ィル(CIRCLE FILL)である。他のクラスの特性を受け
継がないクラスはプライマリークラス(CIRCLE)であ
る。他のクラスによって受け継がれるクラスの特性はベ
ースクラスである(例えば、サークルはサークル フィ
ルのベースクラスである)。導き出された幾つかのクラ
スの特性を受け継ぐこともできる。即ち、導き出された
クラスは幾つかのベースクラスを有していてもよい。こ
れはマルチプル インヘリタンス(multiple inheritan
ce)と呼ばれる。
メンバーとファンクションメンバー−を受け継ぐクラス
である。例えば、次の導き出されたクラス、サークル
フィル(CIRCLE FILL) はベースクラスであるサークル
の特性を受け継ぐ。 このデクラレーション(declaration)はクラス サーク
ル フィル(class CIRCLE FILL)が、クラス サーク
ル フィル即ちデータメンバーパターンと機能メンバー
フィルのデクラレーションに誘導されたこれらのデータ
とファンクションメンバーに加えて、クラス サークル
にある全てのデータとファンクションメンバーを有して
いることを記述している。この例において、クラス サ
ークル フィルはデータメンバーx,y,半径及びパター
ンとファンクションメンバードローとフィルを有してい
る。クラス サークル フィルはクラス サークルの特
性を“受け継ぐ”言われる。たのクラスの特性を受け継
ぐクラスは導き出されたクラス(例えば、サークル フ
ィル(CIRCLE FILL)である。他のクラスの特性を受け
継がないクラスはプライマリークラス(CIRCLE)であ
る。他のクラスによって受け継がれるクラスの特性はベ
ースクラスである(例えば、サークルはサークル フィ
ルのベースクラスである)。導き出された幾つかのクラ
スの特性を受け継ぐこともできる。即ち、導き出された
クラスは幾つかのベースクラスを有していてもよい。こ
れはマルチプル インヘリタンス(multiple inheritan
ce)と呼ばれる。
【0006】クラスはそのファンクションメンバーは事
実上受け継がれるべきである。ファンクションメンバー
が仮想的であることを宣言することは、機能が導き出さ
れたクラス中の同じ名前と形のファンクションによって
取り消されることを意味する。以下の例において、ファ
ンクションドローはクラス サークルとサークル フィ
ルにおいて仮想的であることが宣言される。 class CIRCLE { int x,y; virtual void draw(); }; class CIRCLE FILL:CIRCLE { int pattern; virtual void draw(); }; 例を続けると、以下のステートメントはクラス サーク
ルのタイプであるべきオブジェクトとクラス サークル
フィルのタイプであるべきオブジェクトを宣言する。
実上受け継がれるべきである。ファンクションメンバー
が仮想的であることを宣言することは、機能が導き出さ
れたクラス中の同じ名前と形のファンクションによって
取り消されることを意味する。以下の例において、ファ
ンクションドローはクラス サークルとサークル フィ
ルにおいて仮想的であることが宣言される。 class CIRCLE { int x,y; virtual void draw(); }; class CIRCLE FILL:CIRCLE { int pattern; virtual void draw(); }; 例を続けると、以下のステートメントはクラス サーク
ルのタイプであるべきオブジェクトとクラス サークル
フィルのタイプであるべきオブジェクトを宣言する。
【0007】 CIRCLE a; CIRCLE FILL b; 次のステートメントはクラスCIRCLEにおいて定義
されるファンクション・ドローを参照する。 a.draw() 一方、次のステートメントは、クラスCIRCLE F
ILLで定義されるファンクション・ドローを参照す
る。 b.draw() さらに、つぎにステートメントタイプは、オブジェクト
bをあるオブジェクトのタイプのクラスCIRCLEに
割り当てて、クラスCIRCLE FILLで定義され
るファンクション・ドローを引き出す。
されるファンクション・ドローを参照する。 a.draw() 一方、次のステートメントは、クラスCIRCLE F
ILLで定義されるファンクション・ドローを参照す
る。 b.draw() さらに、つぎにステートメントタイプは、オブジェクト
bをあるオブジェクトのタイプのクラスCIRCLEに
割り当てて、クラスCIRCLE FILLで定義され
るファンクション・ドローを引き出す。
【0008】 CIRCLE c; c ptr*CIRCLE; c ptr=&b; c ptr−>draw();//CIRCLE FIL::draw() したがって、このタイプ割当は重複するファンクション
CIRCLE FILL::draw()へのコールを
保持する。オブジェクト指向型技術は複雑なコンピュー
タプログラムの開発を容易にするものであるが、この結
果できたコンピュータプログラムは、実行速度の面で効
率が悪く、オブジェクト指向型の技術を用いないで開発
されたプログラムよりも多くのメモリを必要とする。オ
ブジェクト指向型プログラムの技術を実現する方法とシ
ステムの実行速度を改善し、コンピュータプログラムの
所要メモリを減少させることが望まれる。
CIRCLE FILL::draw()へのコールを
保持する。オブジェクト指向型技術は複雑なコンピュー
タプログラムの開発を容易にするものであるが、この結
果できたコンピュータプログラムは、実行速度の面で効
率が悪く、オブジェクト指向型の技術を用いないで開発
されたプログラムよりも多くのメモリを必要とする。オ
ブジェクト指向型プログラムの技術を実現する方法とシ
ステムの実行速度を改善し、コンピュータプログラムの
所要メモリを減少させることが望まれる。
【0009】
【課題を解決するための手段】本発明の目的は、オブジ
ェクト指向型プログラム言語のためのコンパイラにおけ
る仮想ファンクションをインプリメントする改良された
方法を提供することである。本発明の別の目的は、ある
クラスのための所要実行時間容量を減少するオブジェク
ト指向型プログラム言語のための改良されたコンパイラ
を提供することである。本発明の他の目的は、仮想ファ
ンクション・テーブルがベースクラスと誘導クラスとで
共用できるオブジェクト指向型プログラム言語のための
コンパイラにおける方法を提供することである。
ェクト指向型プログラム言語のためのコンパイラにおけ
る仮想ファンクションをインプリメントする改良された
方法を提供することである。本発明の別の目的は、ある
クラスのための所要実行時間容量を減少するオブジェク
ト指向型プログラム言語のための改良されたコンパイラ
を提供することである。本発明の他の目的は、仮想ファ
ンクション・テーブルがベースクラスと誘導クラスとで
共用できるオブジェクト指向型プログラム言語のための
コンパイラにおける方法を提供することである。
【0010】本発明の上記及び他の目的は、本発明の以
下により詳細に説明することにより明らかになるであろ
うが、改良されたコンピュータシステムを提供すること
によって達成されるものである。このコンピュータシス
テムは、複数のファンクションメンバーを有するクラス
のための仮想ファンクションテーブルを与える。この仮
想ファンクションテーブルは1つのタイルテーブルと複
数のサブテーブルを含む。このコンピュータシステムは
複数のサブテーブルを割当て、各サブテーブルはエント
リを有する。さらにコンピュータシステムは、そのクラ
スに対し、1つのタイルテーブルを割り当てる。該タイ
ルテーブルは、それぞれ割当てられたサブテーブルにた
めの1つのエントリを含んでいる。そして、コンピュー
タシステムは、各サブテーブルエントリにおいて仮想フ
ァンクションメンバーと協働する実行可能なコードに対
するポインタをストアする。好ましい態様では、子クラ
スがそれ自身のタイルテーブルに割り当てられるが、こ
の子クラスはサブテーブルと協働するいずれのファンク
ションとも重複しないとき、子クラスは親クラスのサブ
テーブルを共用する。
下により詳細に説明することにより明らかになるであろ
うが、改良されたコンピュータシステムを提供すること
によって達成されるものである。このコンピュータシス
テムは、複数のファンクションメンバーを有するクラス
のための仮想ファンクションテーブルを与える。この仮
想ファンクションテーブルは1つのタイルテーブルと複
数のサブテーブルを含む。このコンピュータシステムは
複数のサブテーブルを割当て、各サブテーブルはエント
リを有する。さらにコンピュータシステムは、そのクラ
スに対し、1つのタイルテーブルを割り当てる。該タイ
ルテーブルは、それぞれ割当てられたサブテーブルにた
めの1つのエントリを含んでいる。そして、コンピュー
タシステムは、各サブテーブルエントリにおいて仮想フ
ァンクションメンバーと協働する実行可能なコードに対
するポインタをストアする。好ましい態様では、子クラ
スがそれ自身のタイルテーブルに割り当てられるが、こ
の子クラスはサブテーブルと協働するいずれのファンク
ションとも重複しないとき、子クラスは親クラスのサブ
テーブルを共用する。
【0011】
【実施例】本発明は、仮想ファンクションのオブジェク
ト指向技術を実行するための改良方法及び装置を与え
る。本発明のより好ましい実施例は、本明細書に述べら
れているように、仮想ファンクションを実行するC++
コンパイラである。本発明は、C++プログラミング言
語用のコンパイラの見地から記述されているが、本発明
の方法が仮想ファンクションを支持する他のプログラミ
ング言語にも適用可能であることは、当業者に明かであ
ろう。より好ましい実施例において、コンパイラは、各
クラスに対するオブジェクトデータ構造を定義する。あ
るクラスが仮想ファンクションを導入し、あるいはオー
バーライディング機能(overriding function)を有して
いる場合、コンパイラはそのクラスに対して仮想ファン
クションテーブルを割り当てる。クラスオブジェクトデ
ータ構造には、データメンバーのレイアウトと仮想ファ
ンクションテーブルポインタが含まれる。仮想ファンク
ションテーブルポインタは、実行時間中に初期化され、
そのクラスに関連する仮想ファンクションを指し示す。
コンパイル時間中、コンパイラは、仮想ファンクション
に対応するアドレスを用いて仮想ファンクションテーブ
ルを初期化する。 仮想ファンクションテーブル 一つのクラスの仮想ファンクションテーブルはそのクラ
スに関係する仮想ファンクションメンバーに対応するア
ドレスを有する。仮想ファンクションテーブルは仮想フ
ァンクションを間接的に実施するためにラン時間におい
て使用される。一つの仮想ファンクションメンバーを備
えた各主クラスは関係する仮想ファンクションテーブル
を有する。仮想ファンクションテーブルは各仮想ファン
クションメンバーのアドレスを含む。そのようなクラス
のオブジェクトデータ構造は仮想ファンクションテーブ
ルポインタ(vfptr)を有する。オブジェクトのメ
モリがラン時間において割り当てられるとき、仮想ファ
ンクションテーブルポインタが関係する仮想ファンクシ
ョンテーブルのアドレスにより初期化される。そこで、
同種のクラスのすべてのオブジェクトが同じ仮想ファン
クションテーブルを示す。仮想ファンクションを実施す
るために、コンパイラが仮想ファンクションテーブルを
介して仮想ファンクションメンバーをアクセスするコー
ドを発生する。
ト指向技術を実行するための改良方法及び装置を与え
る。本発明のより好ましい実施例は、本明細書に述べら
れているように、仮想ファンクションを実行するC++
コンパイラである。本発明は、C++プログラミング言
語用のコンパイラの見地から記述されているが、本発明
の方法が仮想ファンクションを支持する他のプログラミ
ング言語にも適用可能であることは、当業者に明かであ
ろう。より好ましい実施例において、コンパイラは、各
クラスに対するオブジェクトデータ構造を定義する。あ
るクラスが仮想ファンクションを導入し、あるいはオー
バーライディング機能(overriding function)を有して
いる場合、コンパイラはそのクラスに対して仮想ファン
クションテーブルを割り当てる。クラスオブジェクトデ
ータ構造には、データメンバーのレイアウトと仮想ファ
ンクションテーブルポインタが含まれる。仮想ファンク
ションテーブルポインタは、実行時間中に初期化され、
そのクラスに関連する仮想ファンクションを指し示す。
コンパイル時間中、コンパイラは、仮想ファンクション
に対応するアドレスを用いて仮想ファンクションテーブ
ルを初期化する。 仮想ファンクションテーブル 一つのクラスの仮想ファンクションテーブルはそのクラ
スに関係する仮想ファンクションメンバーに対応するア
ドレスを有する。仮想ファンクションテーブルは仮想フ
ァンクションを間接的に実施するためにラン時間におい
て使用される。一つの仮想ファンクションメンバーを備
えた各主クラスは関係する仮想ファンクションテーブル
を有する。仮想ファンクションテーブルは各仮想ファン
クションメンバーのアドレスを含む。そのようなクラス
のオブジェクトデータ構造は仮想ファンクションテーブ
ルポインタ(vfptr)を有する。オブジェクトのメ
モリがラン時間において割り当てられるとき、仮想ファ
ンクションテーブルポインタが関係する仮想ファンクシ
ョンテーブルのアドレスにより初期化される。そこで、
同種のクラスのすべてのオブジェクトが同じ仮想ファン
クションテーブルを示す。仮想ファンクションを実施す
るために、コンパイラが仮想ファンクションテーブルを
介して仮想ファンクションメンバーをアクセスするコー
ドを発生する。
【0012】以下に示すクラスAおよびBが本発明の方
法を表すために使用される。クラスAは4個のデータメ
ンバーと10個の仮想ファンクションメンバーを備えた
主クラスの例である。 クラスBは、クラスAのデータとファンクションメンバ
ーを受け継いで2個のデータメンバーおよび5個のファ
ンクションメンバーを示す派生したクラスの例である。
ファンクションメンバーfa7()およびfa8()は
クラスAから受け継がれた同じ名前のファンクションを
オーバーライドする。また、クラスBはファンクション
メンバーfb11()、fb12()およびfb1
3()を導入する。
法を表すために使用される。クラスAは4個のデータメ
ンバーと10個の仮想ファンクションメンバーを備えた
主クラスの例である。 クラスBは、クラスAのデータとファンクションメンバ
ーを受け継いで2個のデータメンバーおよび5個のファ
ンクションメンバーを示す派生したクラスの例である。
ファンクションメンバーfa7()およびfa8()は
クラスAから受け継がれた同じ名前のファンクションを
オーバーライドする。また、クラスBはファンクション
メンバーfb11()、fb12()およびfb1
3()を導入する。
【0013】 図1は、従来のシステムのクラスAのオブジェクトデー
タ構造101、仮想ファンクションテーブル102およ
びファンクションメンバー103〜112の概略図であ
る。オブジェクトデータ構造101は仮想ファンクショ
ンポインタA::vfptr並びにそのデータメンバー
A::ma1、A::ma2、A::ma3および
A::ma4を含む。仮想ファンクションテーブル10
2はファンクションメンバー103〜112の各々に対
するポインタを含む。ファンクションメンバー103〜
112はファンクションのためのコードを含む。図2
は、クラスAのデータ構造並びに従来のシステムのクラ
スBのオブジェクトデータ構造151、仮想ファンクシ
ョンテーブル152および導入されたオーバーライドフ
ァンクションメンバー153〜157である。オブジェ
クトデータ構造151はクラスBの仮想ファンクション
テーブル152に対する仮想ファンクションポインタ
B::vfptr並びにクラスAに定められたデータメ
ンバーおよびクラスBのデータメンバーB::mb1、
B::mb2を含む。仮想ファンクションテーブル15
2はクラスBのファンクションメンバー103〜10
8、111、112および153〜157を含む。この
従来のシステムでは、各派生したクラスは仮想ファンク
ションテーブルを有し、この仮想ファンクションファン
クションテーブルは、親クラスの各仮想ファンクション
のエントリおよび派生したクラスに導入された各ファン
クションのエントリを含む。一つのクラスの仮想ファン
クションはそのクラスの仮想ファンクションテーブルに
オフセットを入れることにより認識される。1つのオブ
ジェクトについて仮想ファンクションを実行すべきであ
るとき、そのオブジェクトに対する仮想ファンクション
テーブルポインタがリトリーブされ、ファンクションオ
フセットが付加され、ファンクションのアドレスがリト
リーブされる。
タ構造101、仮想ファンクションテーブル102およ
びファンクションメンバー103〜112の概略図であ
る。オブジェクトデータ構造101は仮想ファンクショ
ンポインタA::vfptr並びにそのデータメンバー
A::ma1、A::ma2、A::ma3および
A::ma4を含む。仮想ファンクションテーブル10
2はファンクションメンバー103〜112の各々に対
するポインタを含む。ファンクションメンバー103〜
112はファンクションのためのコードを含む。図2
は、クラスAのデータ構造並びに従来のシステムのクラ
スBのオブジェクトデータ構造151、仮想ファンクシ
ョンテーブル152および導入されたオーバーライドフ
ァンクションメンバー153〜157である。オブジェ
クトデータ構造151はクラスBの仮想ファンクション
テーブル152に対する仮想ファンクションポインタ
B::vfptr並びにクラスAに定められたデータメ
ンバーおよびクラスBのデータメンバーB::mb1、
B::mb2を含む。仮想ファンクションテーブル15
2はクラスBのファンクションメンバー103〜10
8、111、112および153〜157を含む。この
従来のシステムでは、各派生したクラスは仮想ファンク
ションテーブルを有し、この仮想ファンクションファン
クションテーブルは、親クラスの各仮想ファンクション
のエントリおよび派生したクラスに導入された各ファン
クションのエントリを含む。一つのクラスの仮想ファン
クションはそのクラスの仮想ファンクションテーブルに
オフセットを入れることにより認識される。1つのオブ
ジェクトについて仮想ファンクションを実行すべきであ
るとき、そのオブジェクトに対する仮想ファンクション
テーブルポインタがリトリーブされ、ファンクションオ
フセットが付加され、ファンクションのアドレスがリト
リーブされる。
【0014】図7は、クラスAのデータ構成及びオブジ
ェクトデータ構成171、仮想ファンクションテーブル
172、そして別の従来技術によるシステムのクラスB
の優先して導入されたファンクションメンバー173ー
177を示す図である。オブジェクトデータ構成171
は、クラスBの仮想ファンクションテーブル172に対
する仮想ファンクションポインタB::vfptr 、クラスA
のデータメンバー、及びクラスBのデータメンバーB::
mb1 及びB::mb2 を含む。仮想ファンクションテーブル
172は、クラスBの優先して導入されたファンクショ
ンメンバー173ー177に対するポインタ及びその名
前、及びクラスAの仮想ファンクションテーブル102
に対する仮想ファンクションポインタA::vfptr を含
む。ファンクションメンバー173ー177は、クラス
Bの優先して導入されたファンクションの符号を含む。
図3に示された従来のシステムにおいて、仮想ファンク
ションテーブル最小数の入力を用いている。即ち、導入
され又は優先する各仮想ファンクションメンバーに対し
て1つの入力、そして各ベースクラスに対して1つの入
力である。誘導クラスは、そのベースクラスの仮想ファ
ンクションテーブルを効果的に共有する。各仮想ファン
クションテーブル入力は、ファンクションに対するポイ
ンタに加えてファンクションの名前を含む。誘導クラス
のファンクションの位置を決定するために、動作時間中
システムは仮想ファンクションテーブルを走査して誘導
クラスを得、その後仮想ファンクションテーブルを走査
してベースクラスを得て、ついにその名前を有するファ
ンクションを見つける。
ェクトデータ構成171、仮想ファンクションテーブル
172、そして別の従来技術によるシステムのクラスB
の優先して導入されたファンクションメンバー173ー
177を示す図である。オブジェクトデータ構成171
は、クラスBの仮想ファンクションテーブル172に対
する仮想ファンクションポインタB::vfptr 、クラスA
のデータメンバー、及びクラスBのデータメンバーB::
mb1 及びB::mb2 を含む。仮想ファンクションテーブル
172は、クラスBの優先して導入されたファンクショ
ンメンバー173ー177に対するポインタ及びその名
前、及びクラスAの仮想ファンクションテーブル102
に対する仮想ファンクションポインタA::vfptr を含
む。ファンクションメンバー173ー177は、クラス
Bの優先して導入されたファンクションの符号を含む。
図3に示された従来のシステムにおいて、仮想ファンク
ションテーブル最小数の入力を用いている。即ち、導入
され又は優先する各仮想ファンクションメンバーに対し
て1つの入力、そして各ベースクラスに対して1つの入
力である。誘導クラスは、そのベースクラスの仮想ファ
ンクションテーブルを効果的に共有する。各仮想ファン
クションテーブル入力は、ファンクションに対するポイ
ンタに加えてファンクションの名前を含む。誘導クラス
のファンクションの位置を決定するために、動作時間中
システムは仮想ファンクションテーブルを走査して誘導
クラスを得、その後仮想ファンクションテーブルを走査
してベースクラスを得て、ついにその名前を有するファ
ンクションを見つける。
【0015】図4は、オブジェクトデータ構成201、
仮想ファンクションテーブル202、及び本発明の好ま
しい実施例におけるクラスAのファンクションメンバー
203ー212を示す。オブジェクトデータ構成201
は、仮想ファンクションテーブル・ポインタA::vfptr
及びデータメンバーA::ma1 、A::ma2 、A::ma3 及び
A::ma4 を含む。ファンクション203ー204は、仮
想ファンクションA::fa1 からA::fa10までに対する符
号を含む。仮想ファンクションテーブル202は、タイ
ル・テーブル220及びサブ・テーブル221、22
2、223を含む。仮想ファンクションテーブル202
は、仮想ファンクションに対して2段階の間接的なアド
レッシングを与える。タイル・テーブル220は、サブ
・テーブル221、222、223に対するポインタを
含む。サブ・テーブルは、仮想ファンクション203ー
212に対するポインタを含む。各サブ・テーブルは、
最後を除き4つのポインタを含む。好ましい実施例にお
いては、サブ・テーブルの大きさは、2の巾乗である。
目的データ構成201の仮想ファンクションテーブル・
ポインタA::vfptr はタイル・テーブル220を指す。
図5は、クラスAのクラス構成、オブジェクトデータ構
成251、仮想ファンクションテーブル252、及びク
ラスBの優先する導入されたファンクション253ー2
57を示す。オブジェクトデータ構成252は、仮想フ
ァンクションテーブル・ポインタB::vfptr 、クラスA
のデータメンバー、及びクラスBのデータメンバーB::
mb1 及びB::mb2 を含む。仮想ファンクションテーブル
252は、タイル・テーブル270、及びサブ・テーブ
ル271ー273を含む。タイル・テーブル270は、
サブ・テーブル271ー273に対するポインタを含
む。ファンクションメンバー253ー257は、クラス
Bの優先する導入されたファンクションに対する符号を
含む。好ましい実施例において、ファンクションは、タ
イル・テーブル・インデックス及びサブ・テーブル・イ
ンデックスによって識別される。サブ・テーブルの大き
さが2の巾乗である場合、ファンクション識別子は整数
として便宜的に示される。例えば、サブ・テーブルの大
きさが16である場合、低いオーダの4ビットはサブ・
テーブル内のインデックスを示し、残りの高いオーダの
ビットはタイル・テーブル内のインデックスを示す。
仮想ファンクションテーブル202、及び本発明の好ま
しい実施例におけるクラスAのファンクションメンバー
203ー212を示す。オブジェクトデータ構成201
は、仮想ファンクションテーブル・ポインタA::vfptr
及びデータメンバーA::ma1 、A::ma2 、A::ma3 及び
A::ma4 を含む。ファンクション203ー204は、仮
想ファンクションA::fa1 からA::fa10までに対する符
号を含む。仮想ファンクションテーブル202は、タイ
ル・テーブル220及びサブ・テーブル221、22
2、223を含む。仮想ファンクションテーブル202
は、仮想ファンクションに対して2段階の間接的なアド
レッシングを与える。タイル・テーブル220は、サブ
・テーブル221、222、223に対するポインタを
含む。サブ・テーブルは、仮想ファンクション203ー
212に対するポインタを含む。各サブ・テーブルは、
最後を除き4つのポインタを含む。好ましい実施例にお
いては、サブ・テーブルの大きさは、2の巾乗である。
目的データ構成201の仮想ファンクションテーブル・
ポインタA::vfptr はタイル・テーブル220を指す。
図5は、クラスAのクラス構成、オブジェクトデータ構
成251、仮想ファンクションテーブル252、及びク
ラスBの優先する導入されたファンクション253ー2
57を示す。オブジェクトデータ構成252は、仮想フ
ァンクションテーブル・ポインタB::vfptr 、クラスA
のデータメンバー、及びクラスBのデータメンバーB::
mb1 及びB::mb2 を含む。仮想ファンクションテーブル
252は、タイル・テーブル270、及びサブ・テーブ
ル271ー273を含む。タイル・テーブル270は、
サブ・テーブル271ー273に対するポインタを含
む。ファンクションメンバー253ー257は、クラス
Bの優先する導入されたファンクションに対する符号を
含む。好ましい実施例において、ファンクションは、タ
イル・テーブル・インデックス及びサブ・テーブル・イ
ンデックスによって識別される。サブ・テーブルの大き
さが2の巾乗である場合、ファンクション識別子は整数
として便宜的に示される。例えば、サブ・テーブルの大
きさが16である場合、低いオーダの4ビットはサブ・
テーブル内のインデックスを示し、残りの高いオーダの
ビットはタイル・テーブル内のインデックスを示す。
【0016】図6は、本発明の実施例における仮想ファ
ンクションテーブルの割り当てのフロー図である。ステ
ップ301において、システムは入力クラスのタイルテ
ーブルを割り当てる。タイルテーブルのサイズは、継承
された仮想ファンクションの数と導入された仮想ファン
クションの数との和の最高値をサブテーブルの標準サイ
ズで割ったものである。例えば、図5において、クラス
Bが、10個の仮想ファンクションを継承し、3個の仮
想ファンクションを導入する。サブテーブルの標準サイ
ズは4である。従って、タイルテーブル270は4個の
エントリー
ンクションテーブルの割り当てのフロー図である。ステ
ップ301において、システムは入力クラスのタイルテ
ーブルを割り当てる。タイルテーブルのサイズは、継承
された仮想ファンクションの数と導入された仮想ファン
クションの数との和の最高値をサブテーブルの標準サイ
ズで割ったものである。例えば、図5において、クラス
Bが、10個の仮想ファンクションを継承し、3個の仮
想ファンクションを導入する。サブテーブルの標準サイ
ズは4である。従って、タイルテーブル270は4個の
エントリー
【0017】
【数1】
【0018】を有する。最後のサブテーブルのサイズ
は、ファンクション(継承仮想ファンクション+導入仮
想ファンクション)数が標準サブテーブルサイズの偶数
の倍数でないとき、標準サブテーブルサイズより小さ
い。ステップ302において、システムは、次のn個
(nは標準サブテーブルサイズ)の継承された仮想ファ
ンクションを選択する。ステップ303において、入力
クラスが選択した継承仮想ファンクションをオーバライ
ドすると、新しいサブテーブルが必要とされてステップ
304に続き、そうでない場合には、システムはステッ
プ305に続く。ステップ304において、システムは
入力クラスのために新サブテーブル割り当てる。ステッ
プ305において、全ての継承仮想ファンクションが選
択されると、システムはステップ306に続き、そうで
ない場合には、システムはステップ302にループし
て、次の継承仮想ファンクションを選択する。ステップ
306において、入力クラスが仮想ファンクションを導
入すると、システムはステップ307に続き、そうでな
い場合には、割り当てが行われてシステムはリターンす
る。ステップ307において、導入仮想ファンクション
への全てのポインタを保持するように処理されるサブテ
ーブルに十分な余地があるとき、割り当てが行われて、
システムはリターンし、そうでない場合には、システム
はステップ308に続く。ステップ308において、シ
ステムは、導入仮想ファンクションに対する十分なサブ
テーブルを割り当てて、リターンする。
は、ファンクション(継承仮想ファンクション+導入仮
想ファンクション)数が標準サブテーブルサイズの偶数
の倍数でないとき、標準サブテーブルサイズより小さ
い。ステップ302において、システムは、次のn個
(nは標準サブテーブルサイズ)の継承された仮想ファ
ンクションを選択する。ステップ303において、入力
クラスが選択した継承仮想ファンクションをオーバライ
ドすると、新しいサブテーブルが必要とされてステップ
304に続き、そうでない場合には、システムはステッ
プ305に続く。ステップ304において、システムは
入力クラスのために新サブテーブル割り当てる。ステッ
プ305において、全ての継承仮想ファンクションが選
択されると、システムはステップ306に続き、そうで
ない場合には、システムはステップ302にループし
て、次の継承仮想ファンクションを選択する。ステップ
306において、入力クラスが仮想ファンクションを導
入すると、システムはステップ307に続き、そうでな
い場合には、割り当てが行われてシステムはリターンす
る。ステップ307において、導入仮想ファンクション
への全てのポインタを保持するように処理されるサブテ
ーブルに十分な余地があるとき、割り当てが行われて、
システムはリターンし、そうでない場合には、システム
はステップ308に続く。ステップ308において、シ
ステムは、導入仮想ファンクションに対する十分なサブ
テーブルを割り当てて、リターンする。
【0019】図7は、本発明の好適な実施例の仮想ファ
ンクションテーブルを初期化する方法の流れ図である。
この方法の入力はクラス定義及び割り当てられた仮想フ
ァンクションテーブルである。ステップ401におい
て、システムは入力クラスの親クラスのタイルテーブル
を入力クラスのタイルテーブルにコピーする。ステップ
402乃至407において、システムは、図6の方法で
割り当てられたポインターを有するサブテーブルを、引
き継がれた又は優先するファンクションに対するポイン
ターで初期化する。ステップ402において、システム
は、先ず、次のタイルテーブルエントリ及び対応するサ
ブテーブルを選択する。ステップ403において、親ク
ラスからコピーされたタイルテーブルエントリ全てが処
理された場合、システムは、ブロック408に続き、異
なる場合システムはステップ404に続く。ステップ4
04において、入力クラスが選択されたサブテーブル内
の優先するファンクションを定める場合、システムはス
テップ405に続き、異なる場合入力クラスは親クラス
のサブテーブルを共用し、システムはステップ402に
ループし、次のサブテーブルを選択する。ステップ40
5において、システムは、選択されたサブテーブルを入
力クラスに対して割り当てられたサブテーブルにコピー
する。ステップ406において、システムは割り当てら
れたサブテーブル内の優先される(服従する)ファンク
ションに対するポインターを優先するファンクションに
対するポインターに置き換える。ステップ407におい
て、システムは選択されたタイルテーブルエントリを、
入力クラスに対して割り当てられたサブテーブルに対す
るポインターに置き換え、ステップ402にループし、
次のタイルテーブルエントリ及びサブテーブルを処理す
る。ステップ408乃至413において、システムは導
入された仮想ファンクションに対するポインターを割り
当てられたサブテーブル内に記憶する。ステップ408
において、入力クラスが仮想ファンクションを導入する
場合、システムはステップ409に続く、異なる場合初
期化が達成され、システムは復帰する。ステップ409
において、図6の方法で割り当てられた最終サブテーブ
ルに空きがある場合、システムはステップ410に続
き、異なる場合、システムはステップ412に続く。ス
テップ410において、システムは割り当てられた最終
サブテーブルに、導入された仮想ファンクションに対す
るポインターを充填する。ステップ411において、割
り当てられた最終サブテーブルに適合できる以上のより
多くの導入仮想ファンクションがある場合、システムは
ステップ412へ続き、異なる場合、初期化が行われ、
システムは復帰する。ステップ412において、システ
ムは残りの割り当てられたサブテーブル内に、導入され
た仮想ファンクションに対するポインターを充填する。
ステップ413において、システムはタイルテーブル
に、導入された仮想ファンクションのみを含む割り当て
られたテーブルに対するポインターを充填する。
ンクションテーブルを初期化する方法の流れ図である。
この方法の入力はクラス定義及び割り当てられた仮想フ
ァンクションテーブルである。ステップ401におい
て、システムは入力クラスの親クラスのタイルテーブル
を入力クラスのタイルテーブルにコピーする。ステップ
402乃至407において、システムは、図6の方法で
割り当てられたポインターを有するサブテーブルを、引
き継がれた又は優先するファンクションに対するポイン
ターで初期化する。ステップ402において、システム
は、先ず、次のタイルテーブルエントリ及び対応するサ
ブテーブルを選択する。ステップ403において、親ク
ラスからコピーされたタイルテーブルエントリ全てが処
理された場合、システムは、ブロック408に続き、異
なる場合システムはステップ404に続く。ステップ4
04において、入力クラスが選択されたサブテーブル内
の優先するファンクションを定める場合、システムはス
テップ405に続き、異なる場合入力クラスは親クラス
のサブテーブルを共用し、システムはステップ402に
ループし、次のサブテーブルを選択する。ステップ40
5において、システムは、選択されたサブテーブルを入
力クラスに対して割り当てられたサブテーブルにコピー
する。ステップ406において、システムは割り当てら
れたサブテーブル内の優先される(服従する)ファンク
ションに対するポインターを優先するファンクションに
対するポインターに置き換える。ステップ407におい
て、システムは選択されたタイルテーブルエントリを、
入力クラスに対して割り当てられたサブテーブルに対す
るポインターに置き換え、ステップ402にループし、
次のタイルテーブルエントリ及びサブテーブルを処理す
る。ステップ408乃至413において、システムは導
入された仮想ファンクションに対するポインターを割り
当てられたサブテーブル内に記憶する。ステップ408
において、入力クラスが仮想ファンクションを導入する
場合、システムはステップ409に続く、異なる場合初
期化が達成され、システムは復帰する。ステップ409
において、図6の方法で割り当てられた最終サブテーブ
ルに空きがある場合、システムはステップ410に続
き、異なる場合、システムはステップ412に続く。ス
テップ410において、システムは割り当てられた最終
サブテーブルに、導入された仮想ファンクションに対す
るポインターを充填する。ステップ411において、割
り当てられた最終サブテーブルに適合できる以上のより
多くの導入仮想ファンクションがある場合、システムは
ステップ412へ続き、異なる場合、初期化が行われ、
システムは復帰する。ステップ412において、システ
ムは残りの割り当てられたサブテーブル内に、導入され
た仮想ファンクションに対するポインターを充填する。
ステップ413において、システムはタイルテーブル
に、導入された仮想ファンクションのみを含む割り当て
られたテーブルに対するポインターを充填する。
【0020】本発明の方法が、多重の引き継ぎを参照す
ること無しに記述されたが、本発明は、"A METHOD FOR
IMPLEMENTING VIRTUAL FUNCTIONS AND VIRTUAL BASES I
N ACOMPILER FOR AN OBJECT-ORIENTED PROGRAMING LANG
UAGE"と題される米国特許出願第07/682,537に記述され
る方法に容易に適合される。本発明の方法及びシステム
は、C++ プログラミング言語に対するコンパイラで使用
される様設計された好適な実施例に主に関連して、開示
され記述されたが、本発明がこの様な実施例によって制
限されることは意図していない。むしろ、本発明は、仮
想ファンクションを実施する他のプログラミング言語で
使用する様設計される均等な実施例も含むことが意図さ
れている。
ること無しに記述されたが、本発明は、"A METHOD FOR
IMPLEMENTING VIRTUAL FUNCTIONS AND VIRTUAL BASES I
N ACOMPILER FOR AN OBJECT-ORIENTED PROGRAMING LANG
UAGE"と題される米国特許出願第07/682,537に記述され
る方法に容易に適合される。本発明の方法及びシステム
は、C++ プログラミング言語に対するコンパイラで使用
される様設計された好適な実施例に主に関連して、開示
され記述されたが、本発明がこの様な実施例によって制
限されることは意図していない。むしろ、本発明は、仮
想ファンクションを実施する他のプログラミング言語で
使用する様設計される均等な実施例も含むことが意図さ
れている。
【図1】従来装置のクラスAの、オブジェクトデータ構
造、仮想ファンクションテーブルおよびファンクション
メンバーを示す図。
造、仮想ファンクションテーブルおよびファンクション
メンバーを示す図。
【図2】クラスAに対するデータ構造と、従来装置のク
ラスBの、オブジェクトデータ構造、仮想ファンクショ
ンテーブルおよび導入型オーバーライディングファンク
ションメンバーを示す図。
ラスBの、オブジェクトデータ構造、仮想ファンクショ
ンテーブルおよび導入型オーバーライディングファンク
ションメンバーを示す図。
【図3】クラスAに対するデータ構造と、従来装置のク
ラスBの、オブジェクトデータ構造、仮想ファンクショ
ンテーブルおよびオーバーライディング導入型ファンク
ションメンバーを示す図。
ラスBの、オブジェクトデータ構造、仮想ファンクショ
ンテーブルおよびオーバーライディング導入型ファンク
ションメンバーを示す図。
【図4】本発明のより好ましい実施例におけるクラスA
の、オブジェクトデータ構造、仮想ファンクションテー
ブルおよびファンクションメンバーを示す図。
の、オブジェクトデータ構造、仮想ファンクションテー
ブルおよびファンクションメンバーを示す図。
【図5】クラスAに対するデータ構造と、本発明のより
好ましい実施例におけるクラスBの、オブジェクトデー
タ構造、仮想ファンクションテーブルおよびオーバーラ
イディング導入型ファンクションを示す図。
好ましい実施例におけるクラスBの、オブジェクトデー
タ構造、仮想ファンクションテーブルおよびオーバーラ
イディング導入型ファンクションを示す図。
【図6】本発明のより好ましい実施例における仮想ファ
ンクションテーブルの割当方法を示す流れ図。
ンクションテーブルの割当方法を示す流れ図。
【図7】本発明のより好ましい実施例における仮想ファ
ンクションテーブルの初期化方法を示す流れ図。
ンクションテーブルの初期化方法を示す流れ図。
201 オブジェクトデータ構造 202 仮想ファンクションテーブル 203−212 ファンクション 220 タイルテーブル 221−223 サブテーブル
Claims (3)
- 【請求項1】 コンピュータシステムにおいて、関連し
た実行可能なコードを各々有する複数の仮想ファンクシ
ョンメンバーを有するクラスのための仮想ファンクショ
ンテーブルであって、タイルテーブルおよび複数のサブ
テーブルを有する仮想ファンクションテーブルを定める
ための方法において、エントリを各々有する複数のサブ
テーブルを割り当てし、前記クラスのために、各割り当
てられたサブテーブルを含むタイルテーブルを割り当て
し、割り当てられるサブテーブルに対するポインタを各
タイルテーブルエントリに記憶させ、仮想ファンクショ
ンメンバーに関連した実行可能なコードに対するポイン
タを各サブテーブルエントリに記憶させることを特徴と
する方法。 - 【請求項2】 コンピュータシステムにおいて、子クラ
スのための仮想ファンクションテーブルを定めるための
方法において、前記子クラスは、親クラスおよびファン
クションメンバーの形にて定義され、前記親クラスは、
複数の仮想ファンクションメンバーを有し、且つ仮想フ
ァンクションテーブルを有し、親仮想ファンクションテ
ーブルは、親タイルテーブルおよび複数の親サブテーブ
ルを備えており、前記親タイルテーブルは、前記親サブ
テーブルに対するポインタを含んでおり、前記親サブテ
ーブルは、前記親仮想ファンクションメンバーに対する
ポインタを含んでおり、前記子クラスは、前記親クラス
の仮想ファンクションメンバーをオーバーライドするフ
ァンクションメンバーを有しており、前記子クラスのた
めに、前記親クラスにおける各サブテーブルのためのエ
ントリを含む子タイルテーブルを割り当てし、各親タイ
ルテーブルエントリのために、前記親タイルテーブルエ
ントリによって指定されたサブテーブルが前記子クラス
においてオーバーライドされる仮想ファンクションメン
バーに対するポインタを含んでいないときには、前記親
タイルテーブルエントリを前記子タイルテーブルに記憶
させ、前記親タイルテーブルエントリによって指定され
たサブテーブルが前記子クラスにおいてオーバーライド
されるファンクションメンバーに対するポインタを含む
ときには、前記割り当てられたサブテーブルに対するポ
インタを前記子タイルテーブルに記憶させ、且つ前記オ
ーバーライドするファンクションに対するポインタを前
記割り当てられたサブテーブルに記憶させることを特徴
とする方法。 - 【請求項3】 コンピュータシステムにおいて、クラス
のための仮想ファンクションメンバーにアクセスするた
めの方法において、前記クラスは、仮想ファンクション
テーブルおよび複数の仮想ファンクションメンバーを有
しており、前記仮想ファンクションメンバーは、関連し
た実行可能なコードを有しており、前記仮想ファンクシ
ョンテーブルは、タイルテーブルおよび複数のサブテー
ブルを有しており、前記タイルテーブルは、前記サブテ
ーブルに対するポインタを含んでおり、前記サブテーブ
ルは、前記仮想ファンクションメンバーの前記実行可能
なコードに対するポインタを含んでおり、各仮想ファン
クションメンバーは、独特な識別子を有しており、前記
独特な識別子は、タイルテーブルエントリおよびサブテ
ーブルエントリを指示しており、前記クラスの仮想ファ
ンクションメンバーのために前記独特な識別子を受け、
該受け取られた独特な識別子によって指示される仮想フ
ァンクションテーブルのタイルテーブルエントリを検索
し、該検索されたタイルテーブルエントリによって指定
されたサブテーブルから、前記受け取られた独特な識別
子によって指示されたサブテーブルエントリを検索し、
該検索されたサブテーブルエントリによって指定された
実行可能なコードを実行して前記クラスのための仮想フ
ァンクションメンバーのアクセスを行うことを特徴とす
る方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US07/880168 | 1992-05-06 | ||
| US07/880,168 US5327562A (en) | 1992-05-06 | 1992-05-06 | Method for implementing virtual function tables in a compiler for an object-oriented programming language |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH06103085A true JPH06103085A (ja) | 1994-04-15 |
Family
ID=25375642
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5105708A Pending JPH06103085A (ja) | 1992-05-06 | 1993-05-06 | オブジェクト指向型プログラム言語のためのコンパイラに仮想ファンクションテーブルをインプリメントする方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US5327562A (ja) |
| EP (1) | EP0569861A1 (ja) |
| JP (1) | JPH06103085A (ja) |
| CA (1) | CA2095692A1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006163686A (ja) * | 2004-12-06 | 2006-06-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 |
Families Citing this family (79)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5481708A (en) * | 1992-06-05 | 1996-01-02 | Borland International, Inc. | System and methods for optimizing object-oriented compilations |
| US5404525A (en) * | 1992-09-30 | 1995-04-04 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
| US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
| US5442793A (en) * | 1993-02-26 | 1995-08-15 | Microsoft Corporation | Method and system for locating an inherited virtual function member of a derived class |
| US7043407B2 (en) * | 1997-03-10 | 2006-05-09 | Trilogy Development Group, Inc. | Method and apparatus for configuring systems |
| CA2097540C (en) * | 1993-06-01 | 1998-05-12 | William G. O'farrell | Accessing remote data objects in a distributed memory environment |
| US5379432A (en) | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
| US6684261B1 (en) | 1993-07-19 | 2004-01-27 | Object Technology Licensing Corporation | Object-oriented operating system |
| US5586317A (en) * | 1993-07-30 | 1996-12-17 | Apple Computer, Inc. | Method and apparatus for implementing I/O in a frame-based computer system |
| US5588141A (en) * | 1993-07-30 | 1996-12-24 | Apple Computer, Inc. | System for executing different functions associated with different contexts corresponding to different screen events based upon information stored in unified data structure |
| US5485617A (en) * | 1993-12-13 | 1996-01-16 | Microsoft Corporation | Method and system for dynamically generating object connections |
| US5548779A (en) * | 1993-12-21 | 1996-08-20 | Taligent | System for providing system services for a device to a client using stack definition and stack description of a stack having top, intermediate, and bottom service objects |
| US5465362A (en) * | 1993-12-30 | 1995-11-07 | Taligent, Inc. | Object-oriented view-system for displaying information in a windowing environment |
| FR2717280B1 (fr) * | 1994-03-10 | 1996-04-05 | Bull Sa | Procédé de gestion de l'héritage multiple d'objets persistants et partagés. |
| DE69526165T2 (de) * | 1994-09-19 | 2002-10-31 | Sun Microsystems, Inc. | Verfahren und Einrichtung für das Aufrufen von Objekten mit Schnittstellenvererbung |
| US5729745A (en) * | 1994-11-14 | 1998-03-17 | Microsoft Corporation | Methods and apparatus for creating a base class for manipulating external data connections in a computer generated document |
| DE69508627T2 (de) * | 1995-03-20 | 2000-04-06 | Object Technology Licensing Corp. | Laufzeitsystem eines betriebssystems mit unterstützung von binärkompatibilität zwischen versionen |
| US6715148B1 (en) | 1995-04-03 | 2004-03-30 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
| US5713045A (en) * | 1995-06-29 | 1998-01-27 | Object Technology Licensing Corporation | System for processing user events with input device entity associated with event producer which further links communication from event consumer to the event producer |
| US5764991A (en) * | 1995-06-30 | 1998-06-09 | Canon Kabushiki Kaisha | Processing object oriented code and virtual function code |
| US5911070A (en) * | 1995-08-07 | 1999-06-08 | Inprise Corporation | Development system with methods for bi-directional application program code generation |
| DE19535519C2 (de) * | 1995-09-25 | 1999-03-04 | Ibm | Verfahren zur Reduzierung des Umfanges von Computerprogrammen |
| US5732263A (en) * | 1995-10-03 | 1998-03-24 | International Business Machines Corporation | Systems, methods and computer program products for generating and validating user defined object classes in an object oriented programming environment after build time |
| US6112253A (en) * | 1995-10-12 | 2000-08-29 | International Business Machines Corporation | Object-oriented method maintenance mechanism that does not require cessation of the computer system or its programs |
| US5724589A (en) * | 1995-10-13 | 1998-03-03 | Borland International, Inc. | Development system with a property-method-event programming model for developing context-free reusable software components |
| US5872973A (en) * | 1995-10-26 | 1999-02-16 | Viewsoft, Inc. | Method for managing dynamic relations between objects in dynamic object-oriented languages |
| US5812850A (en) * | 1995-11-13 | 1998-09-22 | Object Technology Licensing Corp. | Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution |
| US5787245A (en) * | 1995-11-13 | 1998-07-28 | Object Technology Licensing Corporation | Portable debugging service utilizing a client debugger object and a server debugger object |
| US5956479A (en) * | 1995-11-13 | 1999-09-21 | Object Technology Licensing Corporation | Demand based generation of symbolic information |
| US6158045A (en) * | 1995-11-13 | 2000-12-05 | Object Technology Licensing Corporation | Portable debugging services utilizing a client debugger object and a server debugger object with flexible addressing support |
| US5778230A (en) * | 1995-11-13 | 1998-07-07 | Object Technology Licensing Corp. | Goal directed object-oriented debugging system |
| US5815653A (en) * | 1995-11-13 | 1998-09-29 | You; Lawrence L. | Debugging system with portable debug environment-independent client and non-portable platform-specific server |
| JP3019915B2 (ja) * | 1995-11-20 | 2000-03-15 | 日本電気株式会社 | 手続き呼出し方法 |
| US5790132A (en) * | 1995-12-07 | 1998-08-04 | Object Technology Licensing Corp. | Image rendering system with extensible mechanism for providing visual user feedback when an image graphic is selected |
| US5822580A (en) * | 1996-01-19 | 1998-10-13 | Object Technology Licensing Corp. | Object oriented programming based global registry system, method, and article of manufacture |
| US5970242A (en) * | 1996-01-24 | 1999-10-19 | Sun Microsystems, Inc. | Replicating code to eliminate a level of indirection during execution of an object oriented computer program |
| US5848274A (en) * | 1996-02-29 | 1998-12-08 | Supercede, Inc. | Incremental byte code compilation system |
| US5764989A (en) * | 1996-02-29 | 1998-06-09 | Supercede, Inc. | Interactive software development system |
| CA2171898C (en) * | 1996-03-15 | 2000-02-01 | Brian Ward Thomson | Linker optimization for compiled object oriented programs |
| US6704802B1 (en) * | 1996-03-27 | 2004-03-09 | Dell Usa, Lp | Method and system for communicating between independent software modules |
| US6067413A (en) * | 1996-06-13 | 2000-05-23 | Instantations, Inc. | Data representation for mixed-language program development |
| US5877768A (en) | 1996-06-19 | 1999-03-02 | Object Technology Licensing Corp. | Method and system using a sorting table to order 2D shapes and 2D projections of 3D shapes for rendering a composite drawing |
| US6038590A (en) * | 1996-07-01 | 2000-03-14 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server state machine in an interprise computing framework system |
| US6266709B1 (en) | 1996-07-01 | 2001-07-24 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server failure reporting process |
| US5999972A (en) * | 1996-07-01 | 1999-12-07 | Sun Microsystems, Inc. | System, method and article of manufacture for a distributed computer system framework |
| US6304893B1 (en) | 1996-07-01 | 2001-10-16 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server event driven message framework in an interprise computing framework system |
| US6434598B1 (en) | 1996-07-01 | 2002-08-13 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server graphical user interface (#9) framework in an interprise computing framework system |
| US5848246A (en) * | 1996-07-01 | 1998-12-08 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server session manager in an interprise computing framework system |
| US5987245A (en) * | 1996-07-01 | 1999-11-16 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture (#12) for a client-server state machine framework |
| US6272555B1 (en) | 1996-07-01 | 2001-08-07 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server-centric interprise computing framework system |
| US6424991B1 (en) | 1996-07-01 | 2002-07-23 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server communication framework |
| US5794041A (en) * | 1996-12-06 | 1998-08-11 | International Business Machines Corporation | C++ ojbect model alternatives |
| US5920720A (en) * | 1997-02-25 | 1999-07-06 | Microsoft Corporation | Efficient computer based virtual machine object structure |
| US6320592B1 (en) * | 1997-06-30 | 2001-11-20 | Sun Microsystems, Inc. | Method and apparatus for separating image data from a color system in image processing |
| US6446259B2 (en) | 1997-09-15 | 2002-09-03 | Compaq Computer Corporation | System and method for generating an object structure at run time in an object-oriented programming language |
| US6141723A (en) * | 1998-04-07 | 2000-10-31 | Microware | Virtual machine system for accessing external subprogram functions |
| CA2236064A1 (en) * | 1998-04-28 | 1999-10-28 | Ibm Canada Limited - Ibm Canada Limitee | Method and system for constructing hybrid virtual function tables |
| US6704924B1 (en) * | 1999-02-03 | 2004-03-09 | William H. Gates, III | Method and system for implementing virtual functions of an interface |
| US6725280B1 (en) * | 1999-08-13 | 2004-04-20 | Sun Microsystems, Inc. | Method and apparatus for constructing dispatch tables which enable transitive method override |
| US6687760B1 (en) | 1999-08-13 | 2004-02-03 | Sun Microsystems, Inc. | Method and apparatus for preforming method lookup in the presence of modularity constructs to support transitive method override |
| US6687759B1 (en) | 1999-08-13 | 2004-02-03 | Sun Microsystems, Inc. | Method and apparatus for performing method lookup in the presence of modularity constructs to support transitive method override |
| US6356933B2 (en) * | 1999-09-07 | 2002-03-12 | Citrix Systems, Inc. | Methods and apparatus for efficiently transmitting interactive application data between a client and a server using markup language |
| US7346842B1 (en) | 2000-11-02 | 2008-03-18 | Citrix Systems, Inc. | Methods and apparatus for incorporating a partial page on a client |
| US7194743B2 (en) * | 2000-12-12 | 2007-03-20 | Citrix Systems, Inc. | Methods and apparatus for communicating changes between a user interface and an executing application using property paths |
| US7010791B2 (en) * | 2001-09-20 | 2006-03-07 | Intel Corporation | Method for implementing multiple type hierarchies |
| US7103878B2 (en) * | 2001-12-13 | 2006-09-05 | Hewlett-Packard Development Company, L.P. | Method and system to instrument virtual function calls |
| US7243342B2 (en) * | 2002-06-11 | 2007-07-10 | Intel Corporation | Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time |
| US7024663B2 (en) * | 2002-07-10 | 2006-04-04 | Micron Technology, Inc. | Method and system for generating object code to facilitate predictive memory retrieval |
| US6954836B2 (en) * | 2002-07-11 | 2005-10-11 | Micron Technology, Inc. | System and method for processor with predictive memory retrieval assist |
| US7512956B1 (en) * | 2003-08-14 | 2009-03-31 | Hewlett-Packard Development Company, L.P. | System and method for supporting non-standard procedure calls |
| US7992130B2 (en) * | 2007-05-07 | 2011-08-02 | Microsoft Corporation | Class-based object-oriented features in class-less script language |
| US7925640B2 (en) * | 2008-02-14 | 2011-04-12 | Oracle America, Inc. | Dynamic multiple inheritance method dispatch data structure including an m-table size, i-table containing one or more holder addressor regions and type extension testing by frugal perfect hashing |
| US8307350B2 (en) * | 2009-01-14 | 2012-11-06 | Microsoft Corporation | Multi level virtual function tables |
| US8429632B1 (en) * | 2009-06-30 | 2013-04-23 | Google Inc. | Method and system for debugging merged functions within a program |
| US8458681B1 (en) * | 2009-06-30 | 2013-06-04 | Google Inc. | Method and system for optimizing the object code of a program |
| US8683583B2 (en) | 2010-12-02 | 2014-03-25 | Microsoft Corporation | Using virtual table protections to prevent the exploitation of object corruption vulnerabilities |
| US8683455B1 (en) | 2011-01-12 | 2014-03-25 | Google Inc. | Method and system for optimizing an executable program by selectively merging identical program entities |
| US8689200B1 (en) | 2011-01-12 | 2014-04-01 | Google Inc. | Method and system for optimizing an executable program by generating special operations for identical program entities |
| US10572275B2 (en) * | 2017-06-15 | 2020-02-25 | Microsoft Technology Licensing, Llc | Compatible dictionary layout |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5093914A (en) * | 1989-12-15 | 1992-03-03 | At&T Bell Laboratories | Method of controlling the execution of object-oriented programs |
| EP0495279B1 (en) * | 1991-01-18 | 1997-07-16 | International Business Machines Corporation | Object oriented programming platform |
-
1992
- 1992-05-06 US US07/880,168 patent/US5327562A/en not_active Expired - Lifetime
-
1993
- 1993-05-06 JP JP5105708A patent/JPH06103085A/ja active Pending
- 1993-05-06 CA CA002095692A patent/CA2095692A1/en not_active Abandoned
- 1993-05-06 EP EP93107387A patent/EP0569861A1/en not_active Withdrawn
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006163686A (ja) * | 2004-12-06 | 2006-06-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 |
Also Published As
| Publication number | Publication date |
|---|---|
| CA2095692A1 (en) | 1993-11-07 |
| EP0569861A1 (en) | 1993-11-18 |
| US5327562A (en) | 1994-07-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH06103085A (ja) | オブジェクト指向型プログラム言語のためのコンパイラに仮想ファンクションテーブルをインプリメントする方法 | |
| US5790857A (en) | Method for associating and storing arbitrary data with graphical user interface elements | |
| US6038565A (en) | Object oriented data format mapping mechanism | |
| US6643711B2 (en) | Method and apparatus for dispatch table construction | |
| US6480856B1 (en) | Method and system for implementing software objects | |
| JPH0827774B2 (ja) | 修正可能な機能をサーバ上で実行する方法 | |
| JP4541877B2 (ja) | オブジェクトをプログラミングするための簡略化されたメモリの割当ての取消 | |
| US6829761B1 (en) | Method and apparatus for managing shared memory in a run-time environment | |
| US6141723A (en) | Virtual machine system for accessing external subprogram functions | |
| Goglin et al. | Hardware topology management in MPI applications through hierarchical communicators | |
| US6078931A (en) | Method and system for resetting references to deleted software structures | |
| JP2003022186A (ja) | オブジェクト集合方法およびシステム | |
| CN111008056B (zh) | 一种bios设置界面语言配置方法和装置 | |
| US20060080644A1 (en) | Parameterization of programming structures | |
| JPH03209526A (ja) | オブジェクト指向コンピュータシステム | |
| US7024657B2 (en) | Program generation apparatus for program execution system, replaces variable name in each class file by assigned offset number so that same offset numbers are assigned to non-dependent variables with same variable name | |
| JP2001075805A (ja) | メソッドの遷移型オーバーライドを可能にするディスパッチ・テーブルの構成方法および装置 | |
| JP3019915B2 (ja) | 手続き呼出し方法 | |
| JP2002328935A (ja) | オブジェクト指向データベースのデータ操作においてスキーマに自由度を持たせるプログラム及びデータ操作装置 | |
| US20050065938A1 (en) | Object oriented framework mechanism and method for product configuration selection determination | |
| Braverman | CASTE: A class system for Tcl | |
| Bryant et al. | GRAS: a general framework for combining automatic code generation and register allocation | |
| Liu | An advanced C++ library for symbolic computing | |
| Handout | Final Code Generation | |
| JP2003271393A (ja) | インライン割付による最適化方法およびそのコンパイラ |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20030421 |