7章1節のみ。
所有権システムってこんなのだよというお話。
7章で学ぶことの予告であり、総括的な感じっぽい。
おぼえがき
Rustが保証するメモリ安全性
- メモリの2重開放によるRustでの未定義動作を起こさない
- ダングリング(解放済み領域など無効なメモリを指すポインタ)を作らない
- マルチスレッドでデータ競合が起こらない(コンパイラが検出できる範囲で?)
所有権システムの役割
- リソース(メモリ,ファイルディスクリプタ,ソケットなど)の自動解放
- ダングリングポインタの防止
コンパイル時に下記を解析して実現する
- 所有権
- 値を所有できる権利のこと
- 変数は値の所有者になれる。値自身も他の値の所有者になれる
- 値には所有権が1つだけ(ある時点で所有権を持つのは1人だけ)
- 所有者は値を指す不変/可変の参照を作り、他者に値を貸し出せる
- 所有者は所有権を他者に譲渡できる。元の所有者は所有権を失う
- 所有者がスコープを抜けると、値のライフタイムが尽き、リソースが解放される
- ムーブセマンティクスとコピーセマンティクス
- ある変数から別の変数に代入する際、値の型によってプログラムの意味がかわる
- ムーブセマンティクス(所有権が移動)
- コピーセマンティクス(所有権は移動せず、代入先の複製された値を所有)
- ある変数から別の変数に代入する際、値の型によってプログラムの意味がかわる
- 借用
- 値を指す参照を作ると、所有権の観点からは「借用」していると表現するらしい
- 不変/可変の借用がある
- ライフタイム (2種類ある)
- 値のライフタイム (値のスコープ)
- 値が構築されて破棄されるまでの期間
- 参照のライフタイム
- 値への参照が使用される期間
- 値のライフタイム (値のスコープ)
- 借用規則
- コンパイラは以下の規則をも守ることで、メモリ安全性を保証する
- 参照のライフタイムが値のスコープより短いこと
- 値が共有されている間、値の変更を許さない。下記状態のみを許す。
- 任意の不変の参照&Tを持つ
- ただ1つの可変の借用&mut Tを持つ
- コンパイラは以下の規則をも守ることで、メモリ安全性を保証する
- 所有権
- 作者: κeen,河野達也,小松礼人
- 出版社/メーカー: 技術評論社
- 発売日: 2019/05/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る