依赖性分析。在转到FAQ用于包含下面的句子:Go提供了一种用于软件构建的模型,该模型使依赖关系分析变得容易,并避免了C样式包含文件和库的大量开销。虽然该短语不再是FAQ中的内容,但是在Google的Go讨论中对该主题进行了详细说明,该演讲比较了C / C ++和Go的依赖关系分析方法。这是快速编译的主要原因。这是设计使然。
Go编译器比大多数C / C ++编译器快得多的原因有很多:主要原因:大多数C / C ++编译器的设计都非常差(从编译速度的角度来看)。同样,从编译速度的角度来看,C / C ++生态系统的某些部分(例如,程序员在其中编写代码的编辑器)在设计时并未考虑编译速度。主要原因:快速的编译速度是Go编译器和Go语言的有意识选择Go编译器比C / C ++编译器具有更简单的优化器与C ++不同,Go没有模板,也没有内联函数。这意味着Go不需要执行任何模板或函数实例化。Go编译器会更快地生成低级汇编代码,而优化器将对汇编代码进行处理,而在典型的C / C ++编译器中,优化将对原始源代码的内部表示进行传递。C / C ++编译器的额外开销来自需要生成内部表示的事实。Go程序的最终链接(5l / 6l / 8l)可能比链接C / C ++程序要慢,因为Go编译器正在遍历所有使用的汇编代码,也许它还在执行C / C ++的其他额外操作链接器没有做一些C / C ++编译器(GCC)生成文本形式的指令(传递给汇编器),而Go编译器生成二进制形式的指令。为了将文本转换为二进制,需要做一些额外的工作(但不多)。Go编译器仅针对少量CPU体系结构,而GCC编译器针对大量CPU旨在提高编译速度的编译器(例如Jikes)速度很快。在2GHz CPU上,Jikes每秒可以编译20000+行Java代码(并且增量编译模式效率更高)。