Chapelの仕様を読んでいて気になった部分をメモしていく。
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する。ドメインは不可能。