有没有办法欺骗编译器将inline
函数A作为inline
函数B的参数并创建一个没有调用的大inline
函数?
我们假设我们有一段代码定义如下:
let inline action i = printfn "%d" i // printfn is for demo, originally some math
let inline iter lo hi func = for i = lo to hi do func i
iter 0 10 action
通常,inline
函数不能作为函数传递(它们可以,但它们不再是inline
,因为它们不能内联到现有的已经编译的函数中,因此它们作为“常规”传递“崩溃的功能”。
在这种情况下,这两个函数都是inline
所以当iter
展开时,技术上可以将action
内联到其中。它不会发生(生成的IL肯定是CALLS action
),而JIT编译器似乎也没有内联action
。
我不在乎,但这个iter
包含一些需要隐藏的额外逻辑,但是action
非常短,整个事情都是时间关键的。
无论如何,我希望将inline
版本扩展到的命令式代码快100%(占用50%的时间)。
for i = lo to hi do action i
连连呢? F#4.0可能吗?一些神奇的关键词?