Rust

The Rust Programming Language 日本語版 を 自分で学習したときのメモ

4. Ownership を理解する


Ownership のおかげで Rust はガベージコレクタ無で安全性を担保できる。
  1. Ownership (所有権) とは何か
  2. Rust ではメモリは、コンパイラがコンパイル時にチェックする一定の規則とともに、所有権システムで管理される。

    Ownership Rules (所有権規則)

    Variable Scope (変数のスコープ)

    ownwership の最初の例として 変数の scope について説明する。 scope は、プログラムの中であるアイテムが valid な範囲のことである。
    変数のscopeの例
    {                      // s はvalid(有効)ではない
        let s = "hello";  // s は valid
        // s を使う       // s は valid
    }                     // scope を抜けたので sはもはや valid ではない。
    o
    

    String 型

    既に3章で紹介したデータ型はどれも既知のサイズであり、スタックの上に保存され、 scopeを抜けると捨てられるものであった。 ownership を理解するにはもう少し複雑なデータ型が必要になる。 異なるスコープで同じ値を使う必要がある場合は、新しい独立したインスタンスがコピーによって生成される。 しかしここでは、ヒープに保存されるデータを扱って、Rust がいかにしてその値が消去される時を知るかを見ていく。 String型がよい例となることだろう。 今まで見てきた String literal は immutable (変更付加) である。 ユーザ入力を保存するのには String 型がある。 String は mutable (変更可)できる。 String 型は heap にデータを割り当てる。 String 型のtextの量はコンパイル時には不明である。
    String型変数の例
    let mut s = String::from("hello");
    
    s.push_str(", world"); // push_str() はStringにリテラルを追加する
    println!("{s}""); // this will begin
    

    Memory and Allocation (メモリと割り当て)

    String literal の場合は、コンパイル時にサイズが確定しているのでテクストが最終の実行可能ファイルに 直接ハードコーディングされる。
  3. References (参照) and Borrowing (借用)
  4. The Slice Type


http://ynitta.net