7.1 简介

程序中可能存在一些代码,虽然具备语义上的价值,但程序在运行时可能永远不会执行到。例如下列代码:

package main

const version = 1.16 // 可能定义在某个第三方包中的常量

func main() {
    if version <= 1.15 {
        // Do something
    } else {
        // Do something else
    }
}

可以发现上述 if 语句只会执行 else 中的代码,因此 if body 中的代码可以完全删除。除了分支(Branch)语句,逻辑运算符也可能因为短路效应(short-circuit)而造成始终只执行部分代码,例如:

package main

const version = 1.16 // 可能定义在某个第三方包中的常量

func main() {
    correctVersion := version <= 1.15 && version >= 1.14
}

其中第一个分量 version <= 1.15 为 false, 因此整个逻辑表达式的值也是 false, 没有必要再对第二个分量求值,代码 version >= 1.14 为无效代码。

聪明的编译器应该有能力清除掉这样的无效代码,这样可以减小最终可执行文件的大小,并且在程序执行时提升缓存命中率(增加程序的局部性,减少 Page Fault 中断的次数),从而提升程序性能。

最后更新于