Почему простая арифметическая операция 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.)