Почему простая арифметическая операция Swift так медленно компилируется?

Пытаясь оптимизировать время сборки моего приложения, я добавил в свой OTHER_SWIFT_FLAGS:

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

Я получил предупреждение о медленной проверке этого конкретного типа, и я не могу понять, могу ли я как-то помочь компилятору здесь.

var delay: TimeInterval = TimeInterval(index) * 0.05

Есть ли предложения, что можно сделать, чтобы ускорить время компиляции для таких основных арифметических операций?

Я запускаю Xcode 11.5 с Swift 5

Также попытался явно привести число к TimeInterval, в котором нет необходимости, так как по умолчанию все числа являются двойными.

2 ответа

Компилятор выполняет проверку типов. Если у вас длинное выражение лица, на это потребуется время. Иногда, когда выражение слишком длинное, вы даже получаете сообщение об ошибке:

Компилятор не может проверить тип этого выражения в разумные сроки; попробуйте разбить выражение на отдельные подвыражения

попробуйте что-нибудь вроде

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

В настройках сборки в разделе "Компилятор Swift - Общие" установите флажок "Уровень метаданных отражения" и попробуйте установить для него значение "Нет".

После обновления до Xcode 11.4 у меня был скачок проекта от компиляции примерно за 20 секунд до компиляции примерно за 6 - 7 минут.

Я заметил, что это происходило только в сборках отладки, что странно, потому что сборки Release производят больше оптимизаций и действительно должны занимать больше времени для компиляции. В конце концов я проследил медленные сборки до настройки "Уровень метаданных отражения". По умолчанию для сборок "Отладка" установлено значение "Все".

Это может быть ошибка компилятора Swift, включенного в Xcode 11.4 и новее, потому что этот параметр никогда не вызывал у меня проблем в более ранних выпусках. (Это началось с компилятора Swift версии 5.2.)

Другие вопросы по тегам