TL;DR
安全性も、指す先が生きていることも保証されない Rust のポインタ型。*const T と *mut T の 2 つがあり、参照外しは unsafe な操作になる。
なぜ必要か
The Rust Reference によると、生ポインタの利用は一般に推奨されない。生ポインタは、外部のコードとの相互運用や、性能が重要な処理や低レベルの処理を書くために存在する。Effective Rust 項目15 でも、スマートポインタで表せない場合の最後の手段としている。
仕組み
*const i32 は、32 ビット整数を指す生ポインタを表す。生ポインタは &raw const や &raw mut で直接作れ、作ること自体は安全である。生ポインタをコピーしたりドロップしたりしても、ほかの値の生存期間には影響しない。比べるときは、指す先の値ではなくアドレスで比べる。
&* や &mut * で再借用すると、生ポインタを参照に変換できる。
注意点
Effective Rust では、次のような注意点を挙げている。
- Rust の参照を生ポインタにして FFI 境界に渡すと、生存期間の制約が失われ、メモリ安全性が保証されなくなる
- C から渡される生ポインタは、NULL でない、有効なメモリを指す、という Rust の参照の前提を満たすとは限らない。その確認はプログラマの役割である
- 生ポインタの型は
SendとSyncを実装していない