Когда 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, если это станет проблемой, но, тем не менее, меня интересует, что именно компилятор может постоянно сворачивать.