主要观点:探索 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)”的定义,共享贷款总是兼容,可变贷款与其他贷款兼容需位置不相交。
- 后续将深入探讨如子类型、重要借位模式、内部引用等内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。