将内联函数传递给F#中的内联函数

时间:2015-03-19 22:38:57

标签: f# inline

有没有办法欺骗编译器将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可能吗?一些神奇的关键词?

0 个答案:

没有答案