阅读有关快速编译时间的文章后。我感兴趣的是为什么使用超过 2 个序列合并运算符会显着增加编译时间。
示例:编译时间 3.65 秒。
func fn() -> Int {
let a: Int? = nil
let b: Int? = nil
let c: Int? = nil
return 999 + (a ?? 0) + (b ?? 0) + (c ?? 0)
}
Run Code Online (Sandbox Code Playgroud)
编译时间 0.09 秒。
func fn() -> Int {
let a: Int? = nil
let b: Int? = nil
let c: Int? = nil
var res: Int = 999
if let a = a {
res += a
}
if let b = b {
res += b
}
if let c = c {
res += c
}
return res
}
Run Code Online (Sandbox Code Playgroud)
我几乎可以肯定这与类型推断有关。在解释所有这些+和??运算符时,编译器在幕后做了大量工作来推断这些参数的类型。+仅操作符就有大约 30 个重载,当您将其中的几个链接在一起时,编译器的工作比您想象的要复杂得多。
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |