将不安全置于小模块中

说明

如果你有unsafe代码,创建尽可能小的模块来支持所需的不变量,从而在不安全的基础上创建最小的安全接口。将其嵌入到只包含安全代码的较大模块中,并且提供一个符合人体工程学的接口。注意,外部模块可以包含直接调用不安全代码中的不安全函数和方法。用户可以此来获取性能提升。

优点

  • 限制了必须审核的不安全代码
  • 编写外部模块要更容易,因为你可以依靠内部模块的安全保证。

缺点

  • 有时,找一个合适的接口是很困难的。
  • 抽象可能会降低效率。

示例

  • toolshed库将不安全操作放在了子模块中,提供了安全的接口给用户。stdString类是利用Vec<u8>封装加上内容必须是合法的UTF-8编码。String上的操作确保了这种行为。不过,用户也可以用不安全的方法来创建一个String,在这种情况下用户有责任保证内容的有效性。

参阅