Как позволить swift скомпилировать основную математику за разумное время - PullRequest
0 голосов
/ 23 сентября 2019
func molasses(x:Double) -> Double {
    return 1 - abs(x * 6 - floor(x * 3) * 2 - 1)
}

Это выражение занимает более 10 секунд для компиляции в Xcode 11. Почему это занимает так много времени?Это всего лишь одна строка в большем алгоритме.Как я могу сделать это быстрее, не загромождая код?

1 Ответ

0 голосов
/ 23 сентября 2019

В текущей реализации Swift не подходит для вывода типов, когда некоторые обобщенные или перегруженные функции (включая операторы) используются в комбинации.

Таким образом, это улучшило бы время компиляции:

func molasses(x:Double) -> Double {
    let f = floor(x * 3) * 2
    let a = abs(x * 6 - f - 1)
    return 1 - a
}

(Вы можете подумать, что это похоже на загромождение ...)

Или использование некоторых специфичных для типа (неуниверсальных, не перегруженных) функций может привести кскважина:

func dfloor(_ x: Double)->Double {floor(x)}

func molasses(x:Double) -> Double {
    return 1 - fabs(x * 6 - dfloor(x * 3) * 2 - 1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...