2 days ago
- Swift 的双向类型推断可能导致极长的编译时间,尤其是在处理复杂表达式时。
- 约束求解器会探索许多类型和运算符组合,导致指数级复杂度。
- 一个常见的例子:使用重载的 '+' 运算符连接字符串和整数可能导致 42 秒的编译时间,并出现模糊的错误信息。
- 显式转换类型(例如 `String(channel)`)可大幅减少编译时间(0.19 秒)。
- 即使是有效的表达式也可能很慢;在简单表达式中添加 `+ 1` 会使编译时间从 6.2 秒变为 0.7 秒。
- 使用临时变量将慢速表达式拆分为多条语句,并启用编译时警告。
- Swift 团队承认指数级最差性能是一个已知问题,需要采用不同的类型检查器方法。