Unsafe Rust
Rust 言語は 2 つの部分から成ります。
- Safe Rust: メモリ安全で、未定義動作は発生しません。
- Unsafe Rust: 事前条件に違反すると、未定義動作を引き起こす可能性があります。
このコースでは主に safe Rust を見てきましたが、Unsafe Rust が何であるかを知っておくことは重要です。
unsafe コードは小さく分離されているべきであり、その正しさは 注意深く文書化されていなければなりません。また、安全な抽象化レイヤーで ラップするべきです。
Unsafe Rust では、次の 5 つの新しい機能にアクセスできます。
- 生ポインタをデリファレンスする。
- 可変な静的変数にアクセスまたは変更する。
unionフィールドにアクセスする。extern関数を含むunsafe関数を呼び出す。unsafeトレイトを実装する。
次に、unsafe の機能を簡単に見ていきます。詳しくは、 Rust Book の 19.1 章 および Rustonomicon を参照してください。
Unsafe Rust は、そのコードが不正であることを意味しません。これは、開発者が コンパイラの安全性機能の一部を無効にし、正しいコードを自分で書かなければ ならないことを意味します。つまり、コンパイラは Rust のメモリ安全性ルールを もはや強制しません。