将不安全置于小模块中
说明
如果你有unsafe
代码,创建尽可能小的模块来支持所需的不变量,从而在不安全的基础上创建最小的安全接口。将其嵌入到只包含安全代码的较大模块中,并且提供一个符合人体工程学的接口。注意,外部模块可以包含直接调用不安全代码中的不安全函数和方法。用户可以此来获取性能提升。
优点
- 限制了必须审核的不安全代码
- 编写外部模块要更容易,因为你可以依靠内部模块的安全保证。
缺点
- 有时,找一个合适的接口是很困难的。
- 抽象可能会降低效率。
示例
toolshed
库将不安全操作放在了子模块中,提供了安全的接口给用户。std
的String
类是利用Vec<u8>
封装加上内容必须是合法的UTF-8编码。String
上的操作确保了这种行为。不过,用户也可以用不安全的方法来创建一个String
,在这种情况下用户有责任保证内容的有效性。