差分表示

  • 最後の更新で追加された行はこのように表示します。
  • 最後の更新で削除された行はこのように表示します。

- [[Rust 基礎文法最速マスター (rust 0.7 編) - gifnksmの雑多なメモ>http://gifnksm.hatenablog.jp/entry/2013/07/15/170736]]
-- Rust のメモリモデル
-- ヒープの種類

- [[2.15 What is the difference between a managed box pointer (@) and an owned box pointer (~)?>http://web.mit.edu/rust-lang_v0.9/doc/complement-lang-faq.html#what-is-the-difference-between-a-managed-box-pointer-and-an-owned-box-pointer]]

- http://web.mit.edu/rust-lang_v0.9/doc/complement-lang-faq.html#have-you-seen-this-google-language-go-how-does-rust-compare
-- Minimal GC impact - By not having shared mutable data, Rust can avoid global GC, hence Rust never stops the world to collect garbage. With multiple allocation options, individual tasks can completely avoid GC.
- [[Rust 基礎文法最速マスター (rust 0.7 編) - gifnksmの雑多なメモ>http://gifnksm.hatenablog.jp/entry/2013/07/15/170736]]

-- Rust のメモリモデル

-- ヒープの種類



- [[2.15 What is the difference between a managed box pointer (@) and an owned box pointer (~)?>http://web.mit.edu/rust-lang_v0.9/doc/complement-lang-faq.html#what-is-the-difference-between-a-managed-box-pointer-and-an-owned-box-pointer]]



- http://web.mit.edu/rust-lang_v0.9/doc/complement-lang-faq.html#have-you-seen-this-google-language-go-how-does-rust-compare

-- Minimal GC impact - By not having shared mutable data, Rust can avoid global GC, hence Rust never stops the world to collect garbage. With multiple allocation options, individual tasks can completely avoid GC.



---(

//

// 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 にしなければなりません。

---)