Hasty Briefsbeta

双语

Why Swift’s Type Checker Is So Slow

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