差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行は
このように表示します。
- [[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 にしなければなりません。
---)