next up previous contents index
Next: CONSとファンクタ Up: KL1レベルのデータ構造 Previous: KL1レベルのデータ構造

     
ワード

KL1の1ワードは基本的に32bitであり、全てのヒープに置かれるデータは みなこの整数倍で表現される。 64bit計算機では1ワードは64bit確保され、データを格納するためには60bitが利用 されている(ポインタの表現のためには当然64bit全てを利用している)。

この1ワードはinclude/klic/struct.h内で、qという名称の型として 定義されており、これは架空の構造gazonkを指すポインタとして 定義されている(この架空の構造を指すポインタ型としている理由は、 ポインタを手繰りすぎた場合、コンパイラが知らない型を検出してエラーとする ことを利用した、バグ除けである)。このq型のデータを今後``セル''と呼ぶことにする

おのおののセルはワード境界に置かれるようにしているため、 これらのセルへのポインタは下位2bitは必ず0になっている。 この下位2bitをタグとして用いている。タグとデータ型との関係を 表2.1に記す。


  
Table 2.1: タグとデータ型
タグ(2進)
00 CONS, ファンクタ以外への参照(REF)
01 CONSへの参照
10 アトミックデータ
11 ファンクタへの参照


さらに、アトミックなデータ、すなわち、 記号アトム(以下アトム)、整数についてはもう2bit(つまり下位4bit)を タグとして用いている(表2.2参照)


  
Table 2.2: アトム型のタグ
タグ(下位4bit2進)
0010 整数
0110 アトム
1010 予約
1110 予約


よって、KLICでの整数値は32bit計算機では28ビットしかなく、 通常の32bit整数値を格納すると溢れる。64bit計算機では60bitまで用いることが できる。

なお、これまでの解説で明かなように、アトムは、実装レベルでは、 28ビット(タグ付き32bit)のデータにエンコードされて実装されており、 そのコードと実際の印字表現との関係は、別途表 (include/klic/atomstuffs.h中の配列atomname)にて管理される。



Sekita Daigo
1998-05-18