本日読了。
良書。単純な言語解説ではなく、言語の思想の勘所を説明してくれるため好感。以下を学んだ。
- 構造体更新記法、let jiro = Person {name: "Jiro".to_String, ..taro}
- イテレータの作り方、impl Iterator for イテレータ構造体 { type Item = 添字型; fn next(&mut self) -> Option<Self::Item> {}
- cargo expand 関数名など でマクロを展開した結果を確認する
- 自身を再帰して定義する型を作る方法、(1) 構造体でOption<Box<Self>>を使う、(2) 列挙型でEmptyと(値, Box<Self>) を定義。Box<T>から値を取り出すには参照外し(*)を利用する
- RC<T>は所有者が複数にできるが不変、RefCell<T>は値の書き換えが可能、組み合わせたRC<RefCell<T>>は値の書き換えが可能で所有者を複数にできる。RC<T>は強い参照だが循環参照の危険がある。Weak<T>は弱い参照で循環参照は発生しないが値が無くなっている可能性がある。Weak<T>を実際に使う場合は、upgrade()が必要
- RCのスレッドセーフ版がArc、RefCellのスレッドセーフ版がMutex
なお、最後のあたりはOnceCellも含めた公式ドキュメントを見るとよい