小さなモジュールにunsafeを封じ込める

説明

unsafeなコードがある場合は、必要な不変条件を維持できる最小限のモジュールを作成し、unsafeの上に最小限の安全なインターフェースを構築します。これをより大きなモジュールに埋め込み、そのモジュールは安全なコードのみを含み、使いやすいインターフェースを提供します。なお、外側のモジュールはunsafeなコードを直接呼び出すunsafe関数やメソッドを含むことができます。ユーザーはこれを使用して速度上の利点を得ることができます。

利点

  • 監査が必要なunsafeなコードを制限できる
  • 内側のモジュールの保証に依存できるため、外側のモジュールの記述がはるかに簡単になる

欠点

  • 適切なインターフェースを見つけるのが難しい場合がある
  • 抽象化により非効率性が生じる可能性がある

  • toolshed crateは、unsafeな操作をサブモジュールに含め、ユーザーに安全なインターフェースを提供している
  • stdStringクラスは、内容が有効なUTF-8でなければならないという不変条件を追加したVec<u8>のラッパーである。Stringの操作はこの動作を保証する。ただし、ユーザーはunsafeメソッドを使用してStringを作成するオプションがあり、その場合は内容の妥当性を保証する責任がユーザーにある

参照