next up previous contents index
Next: 輸出表 Up: 外部参照ポインタ Previous: 表現形式

ジェネリック・オブジェクトを用いた実現

外部参照ポインタはジェネリック・オブジェクトを用いて実現した. ポインタに対しては「参照値の読出し (dereference)」と「ユニフィケーション」を 行うことがある. 前者の処理は値の生成要求と考えられるので generate メソッドで実現し, 後者は unify メソッドで実現した.

外部参照ポインタの生成時は二つの処理とも行いうるのでジェネレータ・オブジェクトで実現する. ゴールの実行において, あるポインタの指す値が必要になると, 処理系核は そのポインタを実現しているジェネレータ・オブジェクトの generate メソッドを呼び出す. generate メソッドは読出し処理を行い, オブジェクトはジェネレータからコンシューマへ変化する. もはや読出し処理を行う必要はないからである. コンシューマに変わることにより冗長な読出し処理を防ぐことができる.

コンシューマ(群)がフックしている変数に対してユニフィケーションが行われると, 処理系核は各コンシューマの unify メソッドを呼び出す. このメソッドの実行により分散ユニフィケーションが行われる.

外部参照ポインタを表わすオブジェクト (ジェネレータ, コンシューマ) を以下では それぞれ ジェネレータ外部参照オブジェクト, コンシューマ外部参照オブジェクトと呼ぶ.  

また単に外部参照オブジェクトと呼んだ時は ジェネレータ外部参照オブジェクトあるいはコンシューマ外部参照オブジェクトであることを示す.

ジェネレータ外部参照オブジェクト はexrefなるクラス名称のgeneratorとして、runtime/ge_exref.cにて 定義されている。コンシューマ外部参照オブジェクトはread_hook なる名称のconsumerとして runtime/ge_readhook として定義されている。



Sekita Daigo
1998-05-18