是否有任何编译器会产生无状态函数?

时间:2018-09-21 05:16:01

标签: compilation compiler-construction inlining

假设我有以下代码:

function add(a, b)
    return a + b
end

num1 = add(2, 3)
num2 = add(4, 5)
num3 = add(6, 2)
…

任何编译器都会像下面这样编译该代码:

num1 = 2 + 3
num2 = 4 + 5
num3 = 6 + 2
…

如果是这样,是否有办法明确告诉他们您希望他们这样做?如果不是,为什么不这样做,有办法告诉他们这样做吗?

我对如此明确地告诉他们这样做的能力感到好奇的原因是,它可以在不牺牲性能的情况下将代码组织到函数中,但是如果它自动发生,那么我就不必担心。

由于“任何编译器”是如此之荒谬,请随时将其缩小到您选择的流行语言。

编辑:如下面的注释所述,编译器可能会不断传播。考虑以下代码:

function add(a, b)
    return a + b
end

function doStuff(c)
    num1 = add(2, c)
    num2 = add(4, c)
    num3 = add(6, c)
    …
end

add()还能有机会在这里内联吗?

0 个答案:

没有答案