実践Rust入門 7日目 その1

7章1節のみ。

所有権システムってこんなのだよというお話。
7章で学ぶことの予告であり、総括的な感じっぽい。

おぼえがき
  • Rustが保証するメモリ安全性

    • メモリの2重開放によるRustでの未定義動作を起こさない
    • ダングリング(解放済み領域など無効なメモリを指すポインタ)を作らない
    • マルチスレッドでデータ競合が起こらない(コンパイラが検出できる範囲で?)
  • 所有権システムの役割

    • リソース(メモリ,ファイルディスクリプタ,ソケットなど)の自動解放
    • ダングリングポインタの防止
  • コンパイル時に下記を解析して実現する

    • 所有権
      • 値を所有できる権利のこと
      • 変数は値の所有者になれる。値自身も他の値の所有者になれる
      • 値には所有権が1つだけ(ある時点で所有権を持つのは1人だけ)
      • 所有者は値を指す不変/可変の参照を作り、他者に値を貸し出せる
      • 所有者は所有権を他者に譲渡できる。元の所有者は所有権を失う
      • 所有者がスコープを抜けると、値のライフタイムが尽き、リソースが解放される
    • ムーブセマンティクスとコピーセマンティクス
      • ある変数から別の変数に代入する際、値の型によってプログラムの意味がかわる
        • ムーブセマンティクス(所有権が移動)
        • コピーセマンティクス(所有権は移動せず、代入先の複製された値を所有)
    • 借用
      • 値を指す参照を作ると、所有権の観点からは「借用」していると表現するらしい
      • 不変/可変の借用がある
    • ライフタイム (2種類ある)
      • 値のライフタイム (値のスコープ)
        • 値が構築されて破棄されるまでの期間
      • 参照のライフタイム
        • 値への参照が使用される期間
    • 借用規則
      • コンパイラは以下の規則をも守ることで、メモリ安全性を保証する
        1. 参照のライフタイムが値のスコープより短いこと
        2. 値が共有されている間、値の変更を許さない。下記状態のみを許す。
        3. 任意の不変の参照&Tを持つ
        4. ただ1つの可変の借用&mut Tを持つ

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]