7 hours ago
- Futhark 类型检查器最初设计简单,支持标量、数组、元组、一阶单态函数,没有类型推断,但已包含用于原地更新的唯一性类型。
- 随着记录、模块、高阶函数、Hindley-Milner 推断和大小类型等特性的加入,单遍类型检查器变得越来越复杂且难以维护。
- 类型检查器最终被拆分为多个阶段:名称解析、别名检查(后类型检查)和核心项类型检查。
- 引入了一种新的基于约束的无大小类型检查器来处理像 AUTOMAP 这样的复杂特性,约束被离线求解而非即时处理。
- 当前的新类型检查器对每个函数执行四个阶段:名称解析、无大小类型检查(基础类型)、大小推断和原地更新违规检查。
- 这种分层设计通过提供前一阶段的完整信息来改进错误消息,并允许在主要类型检查后将许多检查移至单独的阶段。
- 尽管多遍处理可能效率较低,但优化后相比旧单遍检查器实现了约 4% 的速度提升。
- 类型检查器现在还通过环境变量支持递归,尽管这属于另一个话题。