目次

Rustの勉強[unsafe その2]

ぎじゅつ

はじめに

#

https://doc.rust-jp.rs/book-ja/ch19-01-unsafe-rust.html を読んでいる

お勉強

#

NO IMAGEUnsafe Rust - The Rust Programming Language 日本語版

  • 今日はここ

メモ

#
  • ナマポの型があるのを思い出した
  • んーなるほど、スマートポインタの要素を排除したただのポインタか
let mut num = 5;

let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;

unsafe {
    println!("r1 is: {}", *r1);
    println!("r2 is: {}", *r2);
}
  • これとかはポインタそのものを生成するだけで、スコープ抜けても解放されなさそう

  • 参照は随時って言葉嫌いだわ

    • 直感的でない
    • 英語だとDereferenceらしい
    • こっちのほうがまだいいな

ポインタの生成は害を及ぼしません; 問題が起こり得るのはポインタが指している値にアクセスしようとするときのみで、この際に無効な値を扱うことになる可能性があります。

  • そうね、だいたい理解してきた
  • asを使うとキャストできるらしい

unsafeブロックが必要になる2番目の処理は、unsafe関数の呼び出しです

  • あ、へー
    • これ関数なんだ

関数がunsafeなコードを含んでいるだけで関数全体をunsafeでマークする必要があることにはなりません。 事実、安全な関数でunsafeなコードをラップすることは一般的な抽象化です。

  • そらそうよね
    • 最悪使うとしても意識を持って使うしかない

まとめ

#
  • 生ポインタってなんだよとなったがスマートポインタに実装されている特性が全てない奴らだった
    • dropとか
    • 可変と不変が共存可能とか
  • unsafeは関数

次はここ

NO IMAGEUnsafe Rust - The Rust Programming Language 日本語版