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では実現できないので、非ボックス化正格レコード配列の場合に対応が難しいケースが出てくるということ。