Concurrent Clean : CleanJ : レコード型 : 実装方針

Cleanのオブジェクトは次の4つに分類できる。

基本型
× 実行
× カリー化
○ 非ボックス化配列 int[ ], double[ ], char[ ], boolean[ ]
関数オブジェクト
○ 実行
○ カリー化
× 非ボックス化配列
代数データ型
× 実行
○ カリー化
× 非ボックス化配列
レコード型
× 実行
× カリー化
○ 非ボックス化配列 CleanRecordArrayクラス

ボックス化配列は、全て Object[ ] を利用。
レコード型は、次のようなクラスを用意する。

class CleanRecord {
  int[] types;
  Object[] as;
  int[] is;
  double[] rs;
  boolean[] bs;
}
class CleanRecordArray extends CleanRecord {
}

typesは、レコード型の要素情報をもつフィールド。上2bitが {Object, int, double, boolean} の区別を示すタグで、残りの30bitが実際の要素を示すインデックスになる。
CleanRecordArrayもCleanRecordとほぼ同じ構造だが、インデックスアクセスする点に違いがある。