Concurrent Clean : CleanJ : create_array_
メモリ上に配列領域を確保する命令は、create_array_です。
create_array_ Descr ASize BSize Descr :: 型名(INT, REAL, レコード型名など。指定のない場合は'_') ASize :: ボックス化されたオブジェクト1つ分の領域のサイズ BSize :: 基本値1つ分の領域のサイズ
たとえば、長さ3のボックス化INT型配列を作るには、
pushI 3 create_array_ Int 1 0
長さ5の非ボックス化INT型の配列を作るには、
pushI 5 create_array_ INT 0 1
長さ5の非ボックス化REAL型配列は、
pushI 5 create_array_ REAL 0 2
レコード型も非ボックス化できるので、
::Myrec = {x::Int, y::Int} ::MyrecS = {z::!Int, w::!Int}
に対して、{#Myrec}の場合(対応するDescriptorをr4とする)は、
create_array_ r4 2 0
{#MyrecS}の場合は
create_array_ r4 0 2
問題は、基本値の型が混在するような配列は、Javaでは実現できないので、非ボックス化正格レコード配列の場合に対応が難しいケースが出てくるということ。