Why does a simple Swift arithmetic operation compile so slow?

ぐ巨炮叔叔 提交于 2021-01-27 21:38:54

问题


In an attempt to optimize the build time of my app I've added the following to my OTHER_SWIFT_FLAGS:

OTHER_SWIFT_FLAGS = 
-Xfrontend -warn-long-expression-type-checking=75
-Xfrontend -warn-long-function-bodies=75

I got a warnings for this specific type checking being slow, and I cannot figure out if I can help the compiler in some way here.

var delay: TimeInterval = TimeInterval(index) * 0.05

Any suggestions what can be done to speed up the compile time for such basic arithmetic operations up?

I'm running Xcode 11.5 with Swift 5

Also tried explicitly casting the number to TimeInterval, which shouldn't be needed as all numbers are Doubles by default.


回答1:


The compiler performs type checks. If you have a long expression, it takes time. Sometimes when the expression is too long, you even get an error as:

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions

try something like

var delay: TimeInterval = TimeInterval(index) * TimeInterval(0.05)



回答2:


In your build settings, under 'Swift Compiler - General' check the 'Reflection Metadata Level' and try setting it to 'None'.

Since upgrading to Xcode 11.4, I had a project jump from compiling in around 20 seconds to compiling in around 6 - 7 minutes.

I noticed that it only happened in Debug builds, which is strange because Release builds perform more optimizations and should really take longer to compile. I eventually traced the slow builds back to the 'Reflection Metadata Level' setting. It is set to 'All' for 'Debug' builds by default.

This might be a bug in the Swift compiler that's included in Xcode 11.4 and later, because this setting never caused a problem for me in earlier releases. (It started happening with Swift compiler version 5.2.)



来源:https://stackoverflow.com/questions/62641269/why-does-a-simple-swift-arithmetic-operation-compile-so-slow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!