The inconceivable types of Rust: How to make self-borrows safe (2024)
6 months ago
- #Async
- #Rust
- #Borrow Checker
- Rust的借用检查器传统上会阻止同时传递对象及其引用,这被视为固有局限性。
- 文章认为,通过采用更宏大的目标——安全异步函数,在未来假设的Rust版本中可以实现安全的自我借用。
- Rust类型系统目前缺乏对局部变量类型命名的支持,而这对于将异步函数脱糖化为安全Rust代码至关重要。
- 不可命名类型(如闭包和异步函数)带来挑战,它们存在于Rust类型系统中但无法在代码中显式命名。
- 提议引入命名生命周期以支持显式生命周期标记,从而实现对函数内借用和生命周期的更精确控制。
- 部分移动和借用类型被识别为Rust形式化类型系统中不存在的'不可构想类型',但对异步函数至关重要。
- 文章提出'所有权引用'(&own T)概念来解决Drop和非移动类型问题,实现安全销毁和初始化。
- 建议通过安全转换和枚举更新来处理异步函数中不同状态间的原地转换,同时不违反类型不变量。
- 指出了Rust当前设计的局限性,包括所有权与表示形式的混同,以及对非移动类型支持的缺失。
- 结论表明,虽然由于向后兼容性这些改动不太可能在Rust中实现,但这些理念可能启发未来具有借用检查机制的语言设计。