无生命周期的借用检查 · 初步步骤

主要观点:探索 Rust 类型系统的一种替代方案,用“位置(places)”取代“生命周期(lifetimes)”,通过定义“起源(origin)”来表示引用的来源,即一组“贷款(loans)”,如“shared(a.b.c)”或“mut(x)”,并逐步引入类型定义、基本类型判断、计算活跃度(liveness)、将活跃度融入类型判断以及借位检查等内容,目标是给出高层次的直觉,后续将深入探讨系统工作原理及能支持的新内容。

关键信息:

  • 用“origin”取代“lifetime”,“origin”是“set of loans”,每个“loan”包含“place expression”和借用模式。
  • 定义了 Rust 类型,如“Type = TypeName < Generic* > | & Origin Type | & Origin mut Type”等,没有“'a”符号。
  • 给出简单程序的显式类型示例,如包含借位错误的代码。
  • 引入“LivePlaces”表示活跃位置,通过“LiveBefore”函数计算,用于借位检查。
  • 调整类型判断以包含活跃度,如“(Env, LivePlaces) |- Expr : Type”。
  • 定义“permits”判断,用于借位检查,如“(Env, LiveAfter) permits Loan”。

重要细节:

  • 生命周期是 Rust 最好和最坏的部分,抽象难以理解且不能表达一些重要模式。
  • 不同表达式的类型判断规则,如加法、赋值、引用等。
  • “permits”判断中“Compatible(Loan1, Loan2)”的定义,共享贷款总是兼容,可变贷款与其他贷款兼容需位置不相交。
  • 后续将深入探讨如子类型、重要借位模式、内部引用等内容。
阅读 10
0 条评论