为了账号安全,请及时绑定邮箱和手机立即绑定

Go如何如此迅速地编译?

Go如何如此迅速地编译?

Go
临摹微笑 2021-04-05 12:14:14
我已经在Go网站上搜索了Google,但在Go的非凡构建时间上似乎找不到解释。它们是语言功能(或缺少语言功能),高度优化的编译器或其他产品的产物吗?我不是要推广Go;我只是好奇。
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

依赖性分析。

在转到FAQ用于包含下面的句子:

Go提供了一种用于软件构建的模型,该模型使依赖关系分析变得容易,并避免了C样式包含文件和库的大量开销。

虽然该短语不再是FAQ中的内容,但是在Google的Go讨论中对该主题进行了详细说明,该演讲比较了C / C ++和Go的依赖关系分析方法。

这是快速编译的主要原因。这是设计使然。


查看完整回答
反对 回复 2021-04-26
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我认为不是Go编译器很快,而是其他编译器很

C和C ++编译器必须解析大量的标头-例如,编译C ++“ hello world”需要编译18k行代码,这几乎是源代码的一半!

$ cpp hello.cpp | wc  
18364   40513  433334

Java和C#编译器在VM中运行,这意味着操作系统必须先加载整个VM,然后才能对其进行编译,然后再将它们从字节码JIT编译为本机代码,所有这些都需要花费一些时间。

编译速度取决于几个因素。

某些语言旨在快速编译。例如,Pascal被设计为使用单遍编译器进行编译。

编译器本身也可以优化。例如,Turbo Pascal编译器是用手动优化的汇编器编写的,该汇编器与语言设计结合在一起,从而使真正的快速编译器可以在286类硬件上工作。我认为即使是现在,现代的Pascal编译器(例如FreePascal)也比Go编译器快。


查看完整回答
反对 回复 2021-04-26
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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代码(并且增量编译模式效率更高)。


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信