和#39; gcf#39;之间的主要区别是什么?和' gccgo'?

时间:2014-09-12 15:11:32

标签: go gccgo

两个流行的Go编译器,'gc'和'gccgo'之间的主要区别是什么?建立表现?运行时性能?命令行选项?授权?

我不是在寻找最好的意见,只是对他们差异的基本概述,所以我可以决定哪种方式最适合我的需要。

1 个答案:

答案 0 :(得分:84)

您可以在“Setting up and using gccgo”中看到更多内容:

  

gccgo,Go语言的编译器。 gccgo编译器是GCC的新前端   请注意,gccgo不是gc编译器

如“Gccgo in GCC 4.7.1”(2012年7月)中所述

  

Go语言一直由规范定义,而不是实现。 Go团队编写了两个实现该规范的不同编译器:gc和gccgo。

     
      
  • Gc是原始编译器,go工具默认使用它。
  •   
  • Gccgo是一个具有不同重点的不同实现
  •   
     

与gc相比,gccgo编译代码的速度较慢,但​​支持更强大的优化,因此gccgo构建的CPU绑定程序通常运行得更快。

此外:

  
      
  • gc编译器仅支持最流行的处理器:x86(32位和64位)和ARM。
  •   
  • 然而,Gccgo支持GCC支持的所有处理器   并非所有这些处理器都经过gccgo的全面测试,但许多处理器包括x86(32位和64位),SPARC,MIPS,PowerPC甚至Alpha。   Gccgo还在gc编译器不支持的操作系统上进行了测试,特别是Solaris。
  •   
     

如果您从标准Go版本安装go命令,它已通过-compiler选项支持gccgo:go build -compiler gccgo myprog


简而言之: gccgo:更多优化,更多处理器


但是,作为commented OneOfOnesource)的GCC release 4.9,gccgo支持go和最新的go版本之间经常会出现失步:

  

gccgo仅支持版本转至v1.2 ,因此如果您需要1.3 / 1.4(tip)中的任何新内容,则无法使用gccgo。 -

     

twotwotwo将包含gccgo 的Go 1.2(非1.3)版本。
  GCC和Go项目的发布时间表并不重合,这意味着1.3将在开发分支中提供,但下一个GCC版本4.10可能会有Gccgo的Go 1.4版本。


in the comments提到slide of Brad Fitzpatrick's presentation peterSO

  

gccgo生成非常好的代码
  ...但缺乏逃避分析:用许多小的分配+垃圾来杀死性能   ...... GC不准确。 32位不好。

twotwotwo补充道:

  

另一张幻灯片提到非gccgo ARM代码生成很不稳定   假设它对您的项目来说是一个有趣的选项,可能会比较目标架构上的用例的二进制文件。


正如comments Go 1.5The "Go in Go" slide现在(2015年第3季度/第4季度)意味着:

  

编译器和运行时现在完全用Go编写(带有一点汇编程序)    C不再参与实现,因此构建分发所需的C编译器已不复存在

{{3}}请注意:

  C已经不见了   旁注:gccgo仍然很强劲。