Chapelメモ - 1

Chapelの仕様を読んでいて気になった部分をメモしていく。

zipとtensor

zipが次。

for (i, j) in (1..3, 4..6) do
   write(i, " ", j, " ");

これは

1 4 2 5 3 6

と表示される。
一方tensorは次。

for (i, j) in [1..3, 4..6] do
   write(i, " ", j, " ");

これは

1 4 1 5 1 6 2 4 2 5 2 6 3 4 3 5 3 6 

になる。内積外積やね。

値渡し・参照渡し

通常の変数は値渡し、クラス・配列・ドメインは参照渡しになる。ただし、インテントというものを付け加えることで制御することが可能。

blank
何もつけないこと。通常の挙動。レコードは値渡しなので注意。値渡しのオブジェクトには代入不可。
in
すべてコピーされて渡される。関数内で代入も可能。ドメインをinで渡すことはできない。
out
出力のみ、もちろん代入可能。ドメインをoutで渡すことはできない。
inout
inしてoutする。ドメインは不可能。