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とほぼ同じ構造だが、インデックスアクセスする点に違いがある。