> On 23 Mar 2017, at 10:27, Rien <r...@balancingrock.nl> wrote:
> 
> Just tried it, did not work on the command line either, though with a simple 
> message “build commands failed”
> 
> The following command line however does work:
> 
> xcodebuild -scheme Swiftfire clean build OTHER_SWIFT_FLAGS="-Xfrontend 
> -debug-time-function-bodies" | grep .[0-9]ms | grep -v ^0.[0-9]ms | sort -nr 
> > culprits.txt
> 
> (I found that line in the link provided previously, just modified it to work 
> with a workspace and with my scheme)

Oeps, “without a workspace” !!!
> 
> Regards,
> Rien
> 
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Balancingrock
> Project: http://swiftfire.nl
> 
> 
> 
> 
> 
>> On 23 Mar 2017, at 09:58, 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?
>> 
>> 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

Reply via email to