首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go是如何如此快速地编译的?

Go是如何如此快速地编译的?
EN

Stack Overflow用户
提问于 2010-06-05 02:10:13
回答 11查看 64.1K关注 0票数 234

我搜索了Go的网站,但我似乎找不到Go非凡的构建时间的解释。它们是语言特性(或缺少语言特性)、高度优化的编译器还是其他东西的产物?我不是想推广Go,我只是好奇。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-06-05 02:17:23

依赖分析。

用于包含以下语句的Go FAQ

Go为软件构建提供了一个模型,该模型使依赖分析变得容易,并避免了许多C风格的包含文件和库的开销。

虽然这个短语不再出现在常见问题解答中,但这个主题在talk Go at Google中得到了详细阐述,它比较了C/C++和Go的依赖分析方法。

这是快速编译的主要原因。这是设计出来的。

票数 205
EN

Stack Overflow用户

发布于 2010-06-09 00:09:39

我认为这并不是因为Go编译器很快,而是其他编译器很慢。

C和C++编译器必须解析大量的头文件--例如,编译C++ "hello world“需要编译18k行代码,这几乎是0.5兆字节的源代码!

代码语言:javascript
复制
$ cpp hello.cpp | wc
  18364   40513  433334

Java和C#编译器在VM中运行,这意味着在它们可以编译任何东西之前,操作系统必须加载整个VM,然后必须将它们从字节码即时编译为本机代码,所有这些都需要一些时间。

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

有些语言被设计成可以快速编译。例如,Pascal被设计为使用单遍编译器进行编译。

编译器本身也可以优化。例如,Turbo Pascal编译器是用手工优化的汇编器编写的,与语言设计相结合,得到了一个在286级硬件上工作的非常快速的编译器。我认为即使是现在,现代的Pascal编译器(例如FreePascal)也比Go编译器更快。

票数 79
EN

Stack Overflow用户

发布于 2011-12-30 05:07:02

Go编译器比大多数C/C++编译器快的原因有很多:

  • Top reason:大多数C/C++编译器的设计都非常糟糕(从编译速度的角度来看)。此外,从编译速度的角度来看,C/C++生态系统的某些部分(例如程序员在其中编写代码的编辑器)在mind.
  • Top reason中没有设计为具有编译速度:快速编译速度在Go编译器中是一个有意识的选择,在Go语言
  • 中Go编译器有一个比C/C++ C++更简单的优化器,Go没有模板和内联函数。这意味着Go不需要执行任何模板或函数instantiation.
  • The Go编译器更快地生成低级汇编代码,优化器处理汇编代码,而在典型的C/C++编译器中,优化传递对原始源代码的内部表示的工作。C/C++编译器中的额外开销来自于这样一个事实,即内部表示需要是generated.
  • Final链接(5l/6l/8l)。Go程序的链接(5l/6l/8l)可能比链接C/C++程序慢,因为Go编译器正在遍历所有使用的汇编代码,并且可能它还在做C/C++链接器没有做的其他额外操作(
  • 一些C/C++编译器(GCC)生成文本形式的指令(传递给汇编程序),而Go编译器生成二进制形式的指令。为了将文本转换成二进制文件,需要做额外的工作(但不是很多)。
  • Go编译器只针对少量的CPU架构,而GCC编译器的目标是大量以高编译速度为目标的CPUs
  • Compilers,比如Jikes,它们都很快。在2 2GHz的处理器上,Jikes每秒可以编译20000+行的Java代码(增量编译模式甚至更高效)。
票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2976630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档