I’ve had the same issue and adding a user-defined setting `SWIFT_WHOLE_MODULE_OPTIMIZATION = YES` seemed to fix this. Down from 12 minutes to 2.5 after clean -> build.
The question is why do we have to set such flags in Xcode ourselves, when it most probably should be the default setting? > Wiadomość napisana przez Mark Lacey via swift-users <swift-users@swift.org> w > dniu 23.03.2017, o godz. 18:06: > > >> On Mar 23, 2017, at 10:02 AM, piotr gorzelany <piotr.gorzel...@gmail.com >> <mailto:piotr.gorzel...@gmail.com>> wrote: >> >> I tried using it with the latest Xcode release (version 8.2). > > That was released prior to the addition of the new option. Recent snapshot > builds from https://swift.org/download/#snapshots > <https://swift.org/download/#snapshots> as well as the more recent Xcode 8.3 > betas have it. > > Mark > >> W dniu czw., 23.03.2017 o 17:57 Mark Lacey <mark.la...@apple.com >> <mailto:mark.la...@apple.com>> napisał(a): >>> On Mar 23, 2017, at 1:58 AM, piotr gorzelany <piotr.gorzel...@gmail.com >>> <mailto:piotr.gorzel...@gmail.com>> wrote: >>> >>> Hi Mark, >>> >>> Thanks for the answer, its great to know that somebody is working on it! >>> >>> I tried to add the -Xfrontend -debug-time-expression-type-checking in Xcode >>> in the Other Swift Flags section but that gives me an error when compiling >>> >>> <unknown>:0: error: unknown argument: '-debug-time-expression-type-checking' >>> >>> Should I rather compile it on the command line using this option? >> >> I added this to the compiler within the last couple months so you need to be >> using a recent build in order to use this command-line option. Where did the >> compiler that you tried it with come from? >> >> Mark >> >>> >>> Regards, >>> Piotr >>> >>> czw., 23 mar 2017 o 08:54 użytkownik Mark Lacey via swift-users >>> <swift-users@swift.org <mailto:swift-users@swift.org>> napisał: >>> >>> > On Mar 23, 2017, at 12:32 AM, Rien via swift-users <swift-users@swift.org >>> > <mailto:swift-users@swift.org>> wrote: >>> > >>> > >>> >> On 23 Mar 2017, at 08:27, David Hart <da...@hartbit.com >>> >> <mailto:da...@hartbit.com>> wrote: >>> >> >>> >> Yes, it's best to avoid concatenating strings with +. Not only for >>> >> performance reasons, but it's also less readable than string >>> >> interpolation: >>> >> >>> >> str += "No: \(count), HostIp: \(clientIp ?? "?") at port: \(service ?? >>> >> "?")\n” >>> > >>> > Concatenation may cause the increase, but this solved it too: >>> > >>> > let (clientIpOrNil, serviceOrNil) = >>> > sockaddrDescription(info.pointee.ai_addr) >>> > let clientIp = clientIpOrNil ?? "?" >>> > let service = serviceOrNil ?? "?" >>> > str += "No: \(count), HostIp: " + clientIp + " at port: " + >>> > service + "\n” >>> >>> To make a long story short, expressions combining the results of >>> nil-coalescing with other operators tend to be very slow to type check at >>> the moment. I’m working on fixing this (really the more general issue as it >>> is not specific to ?? but I’ve seen several bug reports that involve that >>> operator). >>> >>> I added another command-line option to help track issues like this down (at >>> the expression level, rather than function level): >>> -Xfrontend -debug-time-expression-type-checking >>> >>> If you use that you’ll see a line for every expression that is >>> type-checked, with source location information, and the time to type check >>> the expression. In some cases we may not have valid source information (I >>> believe this generally happens for things the compiler synthesizes rather >>> than user code), and you’ll see ‘<invalid loc>’ rather than the >>> file/line/column info. >>> >>> Mark >>> >>> >>> > >>> > Regards, >>> > Rien. >>> > >>> > >>> >> >>> >> On 23 Mar 2017, at 08:11, Rien via swift-users <swift-users@swift.org >>> >> <mailto:swift-users@swift.org>> wrote: >>> >> >>> >>> Thanks for that link, used it to track down the worst compile time >>> >>> offender: >>> >>> >>> >>> This piece of code: >>> >>> >>> >>> public func logAddrInfoIPAddresses(_ infoPtr: >>> >>> UnsafeMutablePointer<addrinfo>) -> String { >>> >>> >>> >>> let addrInfoNil: UnsafeMutablePointer<addrinfo>? = nil >>> >>> var count: Int = 0 >>> >>> var info: UnsafeMutablePointer<addrinfo> = infoPtr >>> >>> var str: String = "" >>> >>> >>> >>> while info != addrInfoNil { >>> >>> >>> >>> let (clientIp, service) = >>> >>> sockaddrDescription(info.pointee.ai_addr) >>> >>> str += "No: \(count), HostIp: " + (clientIp ?? "?") + " at port: >>> >>> " + (service ?? "?") + "\n" >>> >>> count += 1 >>> >>> info = info.pointee.ai_next >>> >>> } >>> >>> return str >>> >>> } >>> >>> >>> >>> Took 38 seconds to compile. >>> >>> >>> >>> Removing the “str” assignment: >>> >>> >>> >>> public func logAddrInfoIPAddresses(_ infoPtr: >>> >>> UnsafeMutablePointer<addrinfo>) -> String { >>> >>> >>> >>> let addrInfoNil: UnsafeMutablePointer<addrinfo>? = nil >>> >>> var count: Int = 0 >>> >>> var info: UnsafeMutablePointer<addrinfo> = infoPtr >>> >>> var str: String = "" >>> >>> >>> >>> while info != addrInfoNil { >>> >>> >>> >>> let (clientIp, service) = >>> >>> sockaddrDescription(info.pointee.ai_addr) >>> >>> // str += "No: \(count), HostIp: " + (clientIp ?? "?") + " at >>> >>> port: " + (service ?? "?") + "\n" >>> >>> count += 1 >>> >>> info = info.pointee.ai_next >>> >>> } >>> >>> return str >>> >>> } >>> >>> >>> >>> Brought it down to 6.6ms >>> >>> >>> >>> Obviously I have to rewrite, but it does show how just one line of code >>> >>> can be responsible for approx 80% of the compile time. >>> >>> >>> >>> Regards, >>> >>> Rien >>> >>> >>> >>> Site: http://balancingrock.nl <http://balancingrock.nl/> >>> >>> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/> >>> >>> Github: http://github.com/Balancingrock >>> >>> <http://github.com/Balancingrock> >>> >>> Project: http://swiftfire.nl <http://swiftfire.nl/> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>>> On 22 Mar 2017, at 23:41, Greg Parker via swift-users >>> >>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>> >>>> >>> >>>>> >>> >>>>> On Mar 22, 2017, at 1:03 PM, piotr gorzelany via swift-users >>> >>>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>> >>>>> >>> >>>>> Hi, I hope I reached the right mailing list to ask a question about >>> >>>>> tooling. >>> >>>>> >>> >>>>> Can somebody from the compiler or Xcode team share some tips on how >>> >>>>> to improve compilation times of larger Swift projects? >>> >>>>> >>> >>>>> I am an iOS developer and the largest issue my team has with Swift so >>> >>>>> far is that when the project gets semi large (~30 000 lines) the >>> >>>>> compilation times start to be high (~10 minutes from clean). This is >>> >>>>> a MAJOR downside since iOS development oftentimes requires rapid >>> >>>>> changes to UI or logic. Every person of my team compiles a project at >>> >>>>> least 10 times a day to test new features or functionalities. When >>> >>>>> compilation times start to be higher than 10 minutes that gets us to >>> >>>>> ~1.5h a day of developer time spend just on compiling. Not to mention >>> >>>>> the focus lost when this is happening. >>> >>>>> >>> >>>>> I know the Swift Evolution list is buzzing with new ideas and >>> >>>>> features but from my experience the compilation times is a CRITICAL >>> >>>>> thing to improve in the next Swift release since it cost real money >>> >>>>> to waste all those developer hours. Just think of all the hours lost >>> >>>>> on compiling across all Swift devs worldwide and you will get to >>> >>>>> probably dozens of thousand of dev hours a day. >>> >>>>> >>> >>>>> Is the core compiler team going to address compilation performance in >>> >>>>> the next release? >>> >>>>> >>> >>>>> Maybe there is an existing solution to long compilation times that we >>> >>>>> don't know of? It would be great if anybody could share. >>> >>>>> I was thinking maybe of dividing the app into multiple frameworks >>> >>>>> since I think frameworks are compiled only once only on change? >>> >>>> >>> >>>> Build time is always a goal. Pretty much every version of Swift has >>> >>>> had changes intended to improve compilation time or decrease the >>> >>>> frequency of recompilation. >>> >>>> >>> >>>> Often a large part of the build time is spent in a handful of places >>> >>>> where the compiler's type inference system behaves poorly. You can use >>> >>>> the -debug-time-function-bodies and >>> >>>> -debug-time-expression-type-checking flags to look for these places. >>> >>>> You can often get huge decreases in compile time by adding an explicit >>> >>>> type declaration in the right place in order to simplify the type >>> >>>> inference engine's job. >>> >>>> >>> >>>> Here's a walkthough of one such analysis: >>> >>>> Profiling your Swift compilation times >>> >>>> http://irace.me/swift-profiling <http://irace.me/swift-profiling> >>> >>>> >>> >>>> >>> >>>> -- >>> >>>> Greg Parker gpar...@apple.com <mailto:gpar...@apple.com> >>> >>>> Runtime Wrangler >>> >>>> >>> >>>> >>> >>>> _______________________________________________ >>> >>>> swift-users mailing list >>> >>>> swift-users@swift.org <mailto:swift-users@swift.org> >>> >>>> https://lists.swift.org/mailman/listinfo/swift-users >>> >>>> <https://lists.swift.org/mailman/listinfo/swift-users> >>> >>> >>> >>> _______________________________________________ >>> >>> swift-users mailing list >>> >>> swift-users@swift.org <mailto:swift-users@swift.org> >>> >>> https://lists.swift.org/mailman/listinfo/swift-users >>> >>> <https://lists.swift.org/mailman/listinfo/swift-users> >>> > >>> > _______________________________________________ >>> > swift-users mailing list >>> > swift-users@swift.org <mailto:swift-users@swift.org> >>> > https://lists.swift.org/mailman/listinfo/swift-users >>> > <https://lists.swift.org/mailman/listinfo/swift-users> >>> >>> _______________________________________________ >>> swift-users mailing list >>> swift-users@swift.org <mailto:swift-users@swift.org> >>> https://lists.swift.org/mailman/listinfo/swift-users >>> <https://lists.swift.org/mailman/listinfo/swift-users> > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users