3 回答
TA贡献1845条经验 获得超8个赞
依赖性分析。
在转到FAQ用于包含下面的句子:
Go提供了一种用于软件构建的模型,该模型使依赖关系分析变得容易,并避免了C样式包含文件和库的大量开销。
虽然该短语不再是FAQ中的内容,但是在Google的Go讨论中对该主题进行了详细说明,该演讲比较了C / C ++和Go的依赖关系分析方法。
这是快速编译的主要原因。这是设计使然。
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编译器快。
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代码(并且增量编译模式效率更高)。
- 3 回答
- 0 关注
- 331 浏览
添加回答
举报