2016-05-08 6 views
3

articleの読み込み後、コンパイル時間が短くなります。私はなぜ2つ以上のシーケンス融合演算子の使用がコンパイル時間を大幅に増やすのかに興味があります。nil合体オペレーターによるコンパイル時間の短縮

例: コンパイル時間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) 
} 

コンパイル時間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 
} 

答えて

4

これは型推論と関係があります。演算子+??のすべてを解釈するとき、コンパイラはそれらの引数の型を推測するために多くの作業をバックグラウンドで実行しています。 +オペレータだけで約30回のオーバーロードがあり、それらのいくつかを連鎖させると、コンパイラの仕事は思ったよりずっと複雑になります。

関連する問題