相对其他编译器, Go的编译速度为什么这么快?
Posted NASA迷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相对其他编译器, Go的编译速度为什么这么快?相关的知识,希望对你有一定的参考价值。
今天来解答一个面试中被问到的Go语言问题:"Go的编译速度为什么这么快"
Go provides a model for software construction that makes dependency analysis easy and avoids much of the overhead of C-style include files and libraries.
总的来说,并不是Go编译器速度很快 ,而是其他编译器速度很慢 。C和C ++编译器必须分析大量的头文件 - 例如,编译C ++“hello world”需要编译18k行代码,这几乎是半个兆字节的源代码!而Java和C#编译器运行在虚拟机中,这意味着在可以编译任何东西之前,操作系统必须加载整个虚拟机,然后必须从字节码到本机代码进行JIT编译,所有这些都需要一些时间。
总结了一下,大概以下几点:
1.最重要的原因 :大多数C / C ++编译器都表现出非常糟糕的设计(从编译速度的角度来看)。 另外,从编译速度的角度来看,C / C ++生态系统的某些部分(例如程序员正在编写他们的代码的编辑器)并没有考虑到编译速度。
2.最重要的原因 :快速的编译速度是Go编译器和Go语言的有意选择。或者说,Go语言的缔造者,是吸取了其他语言比如C++编译慢的教训而故意要在Go语言中解决这个问题。
其他的可以不用刻意的去记忆。
3.Go编译器比C / C ++编译器有更简单的优化器。
4.与C ++不同,Go没有模板,也没有内联函数。 这意味着Go不需要执行任何模板或函数实例化。
5.Go编译器会尽快生成低级汇编代码,优化程序将在汇编代码上工作,而在典型的C / C ++编译器中,优化会传递原始源代码的内部表示形式。 C / C ++编译器的额外开销来自于需要生成内部表示的事实。
6.Go程序的最终链接(5l / 6l / 8l)可能比链接C / C ++程序慢,因为Go编译器正在经历所有使用的汇编代码,也可能正在执行其他额外的操作,即C / C ++连接器没有做。
7.一些C / C ++编译器(GCC)以文本形式生成指令(传递给汇编器),而Go编译器以二进制形式生成指令。 额外的工作(但不是很多)需要完成才能将文本转换为二进制文件。
8.Go编译器只针对少量的CPU架构,而GCC编译器则针对大量的CPU。
9.以高编译速度为目标设计的编译器,例如Jikes,速度很快。 在2GHz CPU上,Jikes可以每秒编译20000多行Java代码(并且编译的增量模式更加高效)。
所以,大家可以先记住前二个原因就可以啦。
附参考文章链接:https://code.i-harness.com/zh-CN/q/2d6b76
另附Bing每日美图:
以上是关于相对其他编译器, Go的编译速度为什么这么快?的主要内容,如果未能解决你的问题,请参考以下文章