Rust 编译期安全的边界:类型系统拦不住哪些问题
先把问题落到具体对象
所有权和类型系统能阻止大量内存与并发错误,却不会自动保证业务权限、协议正确、资源上限或 Unsafe 实现安全。把能力边界写清,比笼统说“编译器兜底”更准确。
安全边界如何落地
用类型表达状态机、资源所有权和不允许出现的组合;外部输入仍需解析和范围校验。对于 FFI、Unsafe、死锁、逻辑越权与资源耗尽,则需要契约、测试和运行时限制补位。
边界审查顺序
- 列出希望编译器保证的状态、所有权和并发关系,为每项找到对应类型约束。
- 给每条保证写一个反例,检查外部输入、权限或资源上限是否仍需运行时校验。
- 把 FFI 与 Unsafe 单列,说明其安全契约、封装入口和目标平台测试。
- 对死锁、逻辑越权和资源耗尽设置可观察的失败路径,不用“代码可编译”代替验证。
交付前检查
评审时给每条“编译期保证”配一个反例,确认剩余风险由哪一层处理。
适用边界
编译期保证只覆盖类型中表达出来的规则。业务权限、外部协议和运行资源没有进入类型约束时,仍需由相应边界处理。