Go如何如此迅速地编译?

我已经在Go网站上搜索了Google,但在Go的非凡构建时间上似乎找不到解释。它们是语言功能(或缺少语言功能),高度优化的编译器或其他产品的产物吗?我不是要推广Go;我只是好奇。


临摹微笑
浏览 332回答 3
3回答

精慕HU

依赖性分析。在转到FAQ用于包含下面的句子:Go提供了一种用于软件构建的模型,该模型使依赖关系分析变得容易,并避免了C样式包含文件和库的大量开销。虽然该短语不再是FAQ中的内容,但是在Google的Go讨论中对该主题进行了详细说明,该演讲比较了C / C ++和Go的依赖关系分析方法。这是快速编译的主要原因。这是设计使然。

人到中年有点甜

我认为不是Go编译器很快,而是其他编译器很慢。C和C ++编译器必须解析大量的标头-例如,编译C ++“ hello world”需要编译18k行代码,这几乎是源代码的一半!$ cpp hello.cpp | wc   18364   40513  433334Java和C#编译器在VM中运行,这意味着操作系统必须先加载整个VM,然后才能对其进行编译,然后再将它们从字节码JIT编译为本机代码,所有这些都需要花费一些时间。编译速度取决于几个因素。某些语言旨在快速编译。例如,Pascal被设计为使用单遍编译器进行编译。编译器本身也可以优化。例如,Turbo Pascal编译器是用手动优化的汇编器编写的,该汇编器与语言设计结合在一起,从而使真正的快速编译器可以在286类硬件上工作。我认为即使是现在,现代的Pascal编译器(例如FreePascal)也比Go编译器快。

慕的地6264312

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代码(并且增量编译模式效率更高)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go