next up previous contents index
Next: Generator Up: ジェネリック・オブジェクトのデータ構造 Previous: Data object

Consumer

Consumer objectを表現するデータ構造を、図2.7に示す。  

consumer object の本体は、中断構造([*]ページ、第2.4.5章参照)の中に、その変数に suspend しているゴールに混ざって並んでいる。つまり、 consumer object は フックされた変数の顔をしている。この変数に対する active unification が起き、中断構造([*]ページ、第2.4.5章参照) 中のゴールがエンキューされていく中で、 consumer object に対して active unify メソッドが発行される。 この局面、及びGC局面以外の局面では、 consumer object は hook したゴールと 類似の扱いを実行時カーネルから受ける。

この構造については第2.4.5章 ([*]ページ)でさらに詳細に説明するが、ここであげた 中断構造([*]ページ、第2.4.5章参照)は、中断原因である 未定義変数より特殊な構造(susprec)を経由して 指されている。この「中断原因の変数セル」とsusprecとは互いに参照しあう 「二重ループ構造」になっている。

Consumer objectのメソッド表の構造は、include/klic/g_methtab.h にて consumer_object_method_table として定義されている。


  
Figure 2.7: consumer object の実装
\begin{figure}\begin{center}
\epsfile{file=m_nakamu_coi.eps,width=.8\textwidth}
\end{center}\end{figure}



Sekita Daigo
1998-05-18