next up previous contents index
Next: ジェネリック・オブジェクトの種類 Up: データ構造 Previous: タグ関連のマクロ

      
ジェネリック・オブジェクト

KLIC では組み込みデータ型である基本データ型を、 ポインタの下位数ビットを使って表現する方式にしため、 その組み込みデータ型の種類に限りがあり、 一般的なユーザが必要とするデータ型を全てそれらで サポートしているわけではない。 また、ユーザが必要とするデータ型を自分で定義してシステムに 組み込んだり、他言語とのインターフェイスを確保したいという要求に 答える機能は、KLIC の目指す汎用的な言語システムにとって必要であろう。 これらの問題を解決し、言語システムの容易な拡張を実現するものとして、 ジェネリック・ オブジェクトなる機構を導入した。

ジェネリック・オブジェクトとして実現されたデータは、 単一化や GC など 様々な局面での自分自身の処理の仕方を記述したメソッドを集めた メソッド表、及びデータ領域から成る。 データの領域のサイズや構成は、オブジェクトクラスにより定義され、 KLICシステムの実行時カーネルは感知しない。 このメソッド表がオブジェクトのクラス定義に当たるものである。 なお、メソッドは実際にはCの関数により実装されている。

 

ユーザはメソッド表に含めるべきメソッド、オブジェクト生成のための ルーチン、データ領域の構成などを、ジェネリック・オブジェクト定義用 に作成したマクロや関数 を使用しつつ、C言語で記述することで、 ジェネリック・オブジェクトを定義する。 ジェネリック・オブジェクトのデータ領域は KL1 の組み込みデータ型 や C で定義可能なデータ型から構成することが可能であり、 様々なデータをジェネリック・オブジェクトに持たせることが出来る。

ジェネリック・オブジェクトの定義に当たっては、 KLIC システムの実行時カーネルに一切手を入れる必要はない。 KLIC の組み込みデータ型のデータが KLIC システムの実行時カーネルによって処理されるのに対し、 ジェネリック・オブジェクト型のデータでは、 実行時カーネル及び KL1 プログラムからの要求に応じ、オブジェクトが 自分で処理を行う。 実行時カーネルは、ジェネリック・オブジェクトのメソッドの中身やデータ領域の 構成については何も知らず、従って扱い方も知らない

現在、KLICに組み込みとして備えられているデータ型のうち、以下のようなものは このジェネリック・オブジェクトの機構により実装されている。

また、以下の、プロセスのインターフェースを持つオブジェクトも、ジェネリック・ オブジェクトにより実装されている。

さらに、並列化のために導入されている、KL1レベルのユーザには全く見えない ようなデータ構造などについてもジェネリック・オブジェクトにより実装されている。

さらに、この枠組を利用することにより、ユーザは新しい機能をKLICに 導入することも可能である。



 

Sekita Daigo
1998-05-18