Когда F# делает постоянное свертывание?

Я просто написал несколько встроенных математических утилит и во время тестирования заметил, что

let quat = (3, 0, 0, 3)
(quat |||~||| quat)
|> ijk
|> printAn

полностью сложен в printAn (18, 0, 0) начиная с (3.0f, 0.0f, 0.0f, 3.0f) только вставляет оригинал 0.0f а также 3.0f постоянные значения без оценки любого из операторов с плавающей точкой и с некоторыми Tupleсоздается (но не так много, как в режиме отладки).

(Я использую Visual Studio 2013 с обновлением 4 для платформы 4.5, по умолчанию Release конфигурации. Неопределение TRACE константа, кажется, не имеет значения, и не делает open Unchecked.)


Я не слишком обеспокоен влиянием на производительность, так как должно быть легко сложить выражение с помощью ткачества IL, если это станет проблемой, но, тем не менее, меня интересует, что именно компилятор может постоянно сворачивать.

0 ответов

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