F#何时进行恒定折叠?

时间:2014-12-01 03:19:48

标签: f# inline f#-3.1 constantfolding

我刚刚写了some inlined maths utility functions,并且在测试时注意到了

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

完全折叠为printAn (18, 0, 0),而(3.0f, 0.0f, 0.0f, 3.0f)开头只插入原始0.0f3.0f常量值,而不评估任何浮点运算符和{{1}实例化(但不像调试模式那么多)。

(我使用针对4.5框架的Visual Studio 2013 Update 4,使用默认的Tuple配置。取消定义Release常量似乎不会产生影响,{{1 }}。)


确切地说,编译器可以不断折叠。

0 个答案:

没有答案