2016-05-08 16 views
3

Nach dem Lesen der über schnelle Kompilierzeit. Ich bin daran interessiert, warum die Verwendung von mehr als 2 Sequenzkoaleszenz-Operatoren die Kompilierungszeit signifikant erhöht.Swift Kompilierungszeit mit Null Koaleszenzoperator

Beispiel: Kompilierzeit 3,65 sek.

func fn() -> Int {  
     let a: Int? = nil 
     let b: Int? = nil 
     let c: Int? = nil 

     return 999 + (a ?? 0) + (b ?? 0) + (c ?? 0) 
} 

Kompilierungszeit 0,09 Sek.

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 
} 

Antwort

4

Ich bin fast sicher, dass dies mit Typschlussfolgerung zu tun hat. Bei der Interpretation all dieser + und ?? Operatoren führt der Compiler eine Menge Arbeit hinter den Kulissen aus, um die Typen dieser Argumente zu ermitteln. Es gibt ungefähr dreißig Überladungen für den Operator + allein und wenn Sie mehrere von ihnen zusammenketten, machen Sie die Arbeit des Compilers viel komplizierter, als Sie vielleicht denken.

Verwandte Themen