unsafe性を小さなモジュールに閉じ込める
説明
unsafe コードがある場合は、その unsafe性の上に最小限の安全なインターフェイスを構築するために必要な不変条件を維持できる、可能な限り小さなモジュールを作成します。これを、安全なコードのみを含み、使いやすいインターフェイスを提供する、より大きなモジュールに埋め込みます。外側のモジュールには、unsafe コードを直接呼び出す unsafe 関数やメソッドを含めることができる点に注意してください。ユーザーはこれを使用して速度上の利点を得られます。
利点
- 監査が必要な unsafe コードを限定できる
- 内側のモジュールの保証を頼りにできるため、外側のモジュールを書くのがはるかに簡単になる
欠点
- 適切なインターフェイスを見つけるのが難しい場合があります。
- 抽象化によって非効率が生じる可能性があります。
例
toolshedクレートは、その unsafe な操作をサブモジュールに含め、ユーザーに安全なインターフェイスを提供します。stdのStringクラスは、内容が有効な UTF-8 でなければならないという不変条件が追加された、Vec<u8>のラッパーです。Stringに対する操作は、この振る舞いを保証します。ただし、ユーザーにはunsafeメソッドを使用してStringを作成する選択肢があり、その場合、内容の妥当性を保証する責任はユーザーにあります。