Глядя на функции в моем коде сегодня, я подумал, если бы можно было совместить частичное сочетание и оптимизация:F #: Частичное применение и предвычисления
let foo (X:float) y1 y2 dx =
y1 + (y2 - y1) * dx/X
В принципе, просто применяя соотношение - так что первые три параметра в одном цикле, как правило, одинаковы.
Я подумал, что если я это сделал:
let foo2 (X:float) y1 y2 dx =
let dy = (y2 - y1)/X
y1 + dy * dx
F # будет получить умный и оптимизировать для меня, когда я частично применить первые три параметра, но режим отладки не кажется, дело (хотя я не уверен, что я начал проверять его правильно).
Вопрос в том, должна ли эта работа? И если нет, то лучший способ сделать это (кроме простого написания другой функции с двумя параметрами)?
В стороне, вот почему люди хотят, например, «PureAttribute» в .Net, который вы могли бы надеть «Дорого» (при условии, что он не печатал, в отличие от моего иллюстративного примера), чтобы подталкивать компиляторы в эту оптимизацию. В качестве альтернативы, именно поэтому такие люди, как Haskell, где все чисто, а компиляторам/runtimes разрешено «кэшировать» любой вызов функции. В конце дня мое личное мнение состоит в том, что надеясь, что система «волшебным образом оптимизирует» это для вас, - мечта о трубе. Если вы хотите, чтобы ваш код был быстрым, пропишите его по адресу г-н Компьютер шаг за шагом. Люди должны всегда выполнять тяжелую работу. – Brian
Ваша скорость в бодах на этом была точно такой же, как у моего мозга :) – Benjol