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" > 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