// // An integer managed box, allocated on the local heap. // // Note that `x` itself is a *pointer* to the managed box on the heap. // let x = @10; // // An integer owned box, allocated on the exchange heap. // // Note that `x` itself is a *pointer* to the owned box on the heap. // let x = ~10; Owned box (~T) ヒープ上に獲得された領域の事を指します。 Owned box は、 C++ の unique_ptr のように、単一の変数のみが所有権を持ちます。 Managed box (@T) ヒープ上に獲得された領域の事を指します。 Managed box は、C++ の shared_ptr のように、複数の変数から同一の領域を指すことが可能 ~ も @ もつけない変数はスタックに確保される Borrowed pointer (&T) C++ の参照型のようなもので、任意の値を参照するために用いることができます。 また、指し示した値が無効にならないことを、コンパイラが静的に保証 exchange heap と、 local heap という2種類のヒープが用意されています。 exchange heap 上の値は複数のタスク (スレッドのようなもの) から同時にアクセス可能ですが、 local heap 上の値は単一タスクからしかアクセスできません (タスク毎に固有の local heap があります)。 owned box は exchange heap 上に獲得され、managed box は local heap 上に獲得されます。 すなわち、タスク間でデータをやりとりする場合は、必ず owned box にしなければなりません。 |