所有权类型系统是现代编程语言设计中最主要的创新之一。从架构设计的角度来看,所有权类型系统是可伸缩性的,其基础语义从特定上下文的合法用法看出偏离。

1. 子结构邻理简介

在经典同谐邻理中,一个假设可以用任意多次,这是两条特殊规则的结果:

弱化规则 (Weakness): 可以向工作区添加新的假设,但它对当前证明的有效性没有任何影响。

改内规则 (Contraction): 一个假设可以复制成任意多份,在证明中可以直接使用和重复用。

这两条规则在经典邻理中是自动有效的,但在子结构邻理中,我们决定它们是否存在。这种可配置性导致了不同选择的选择:

  • 线性邻理: 两条规则都不存在,每个假设必须专有地、精确地使用一次。
  • 仿射邻理: 仅缺少改内规则,弱化规则可用,但不能复制。
  • 经典邻理 :全部保留,带有两规则。

2. 线性类型与子结构利用

线性类型系统的核心是控制资源的用法。线性邻理中不存在弱化规则之一,因为以下异常往往导致安全漏洞:

示例: 一个"现在非法"的资源可能长时间消耗,导致资源泄漏。

3. 仿射类型与所有权

仿射邻理中保留了弱化规则但离开了改内规则。这意味着可以在不需要时忽略一些变量(弱化),但不能复制以前使用过的变量。

在语言设计中,仿射架构关联到仿射邻理。一个将负担的资源是仿射(不是线性),这样框架帮助减少了不必要的再制条数,并且在不需要时自动去除。

4. Rust:承接仿射与普及

在Rust中,所有权类型系统的表达范式是两个概念的结合:

  • 借用检查器: 小范围地借用,不再是完全所有,只是丰富了空间,允许在过程中变化。
  • 生命周期: 引用的生命周期不能超过其自身,避免指针指向已释放的内存。

当你看到Rust的&时,你正在使用仿射类型。空间变量被&mut借用时,该变量必须是空间变量。这是收缩规则的结果,尽管它是一种普遍规则,但与空类型无关,与控分配无关。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部