gpt4 book ai didi

F# 自动内联一些函数,即使它们没有标记 `inline` ,这是故意的吗?

转载 作者:行者123 更新时间:2023-12-01 03:55:11 25 4
gpt4 key购买 nike

看起来 F# 会自动内联某些函数,即使它们没有标记为“内联”。

let a x= x + 3
let b x= x * x

let funB x y =
if x > y then 3
else 1

let funC x =
let s = a x
let c = funB s (b x)
c + 1

通过检查 IL,我看到编译器积极地内联了 funB & a,b
funC:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldc.i4.3
IL_0003: add
IL_0004: stloc.0 // s
IL_0005: ldarg.0
IL_0006: ldarg.0
IL_0007: mul
IL_0008: stloc.1
IL_0009: ldloc.0 // s
IL_000A: ldloc.1
IL_000B: ble.s IL_0011
IL_000D: ldc.i4.3
IL_000E: nop
IL_000F: br.s IL_0013
IL_0011: ldc.i4.1
IL_0012: nop
IL_0013: ldc.i4.1
IL_0014: add
IL_0015: ret

这种行为对我来说看起来很奇怪。我曾认为编译器应该只在有 inline 的情况下内联关键词。有没有提到它的引用资料?

最佳答案

inline关键字是一种强制编译器内联函数的方法,因此允许函数将类型作为参数并提高性能。编译器没有理由不内联函数,因为它认为适合发布版本。

关于F# 自动内联一些函数,即使它们没有标记 `inline` ,这是故意的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com