That setting breaks incremental compilation, so you're getting clean build speed at the expense of incremental builds.
Jon > On Mar 28, 2017, at 7:35 AM, Bartłomiej Nowak via swift-users > <swift-users@swift.org> wrote: > > 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> >>> 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 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> >>> napisał(a): >>>>> On Mar 23, 2017, at 1:58 AM, piotr gorzelany <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> napisał: >>>>> >>>>> > On Mar 23, 2017, at 12:32 AM, Rien via swift-users >>>>> > <swift-users@swift.org> wrote: >>>>> > >>>>> > >>>>> >> On 23 Mar 2017, at 08:27, David Hart <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> >>>>> >> 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 >>>>> >>> Blog: http://swiftrien.blogspot.com >>>>> >>> Github: http://github.com/Balancingrock >>>>> >>> Project: http://swiftfire.nl >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>>> On 22 Mar 2017, at 23:41, Greg Parker via swift-users >>>>> >>>> <swift-users@swift.org> wrote: >>>>> >>>> >>>>> >>>>> >>>>> >>>>> On Mar 22, 2017, at 1:03 PM, piotr gorzelany via swift-users >>>>> >>>>> <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 >>>>> >>>> >>>>> >>>> >>>>> >>>> -- >>>>> >>>> Greg Parker gpar...@apple.com Runtime Wrangler >>>>> >>>> >>>>> >>>> >>>>> >>>> _______________________________________________ >>>>> >>>> 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 >>>>> > >>>>> > _______________________________________________ >>>>> > 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 >> >> _______________________________________________ >> 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
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users