回答

收藏

“gc”和“gccgo”之间的主要区别是什么?

技术问答 技术问答 222 人阅读 | 0 人回复 | 2023-09-12

两个流行的 Go 编译器“gc”和“gccgo主要区别是什么?构建性能?运行时性能?命令行选项?
2 c* p7 I( _' @" B! T8 w我不是在寻找最好的意见,只是对它们差异的基本概述,所以我可以决定哪一个最适合我的需求8 S# ~7 H9 h9 v& Z; s
                                                               
  i* B, F( ~# F2 q( n$ Q* {    解决方案:                                                                8 J& O! N- f' s$ X8 ~- q8 G
                                                                设置和使用 gccgo 更多信息:
7 ~. ^% z+ O  o5 G$ Fgccgo,Go 语言编译器。gccgo 编译器是 GCC 新前端。
+ Z8 }0 ]7 |3 _, c注意 gccgo 不是 gc 编译器" {: x5 o* T( l$ z) x
如“ GCC 4.7.1中的Gccgo ; S$ n- M0 g( ^
Go 语言一直由标准定义,而不是实现定义。Go 团队编写了两个不同的编译器来实现这一规范:gc 和 gccgo。
- a2 H1 F! N+ ~# P( _! i6 Zgc 是原始编译器,go 默认使用工具。4 F2 k, H! [% Y$ D
Gccgo 是不同的实现,有不同的重点
与 gc 相比,gccgo 编译代码较慢,但支持更强的优化,因此 gccgo 构建的 CPU 密集程序通常运行得更快。
" g# G- b1 |+ q7 ?' M* r2 E还:, K% f/ [/ e3 U) A0 V- s
gc 编译器只支持最流行的处理器:x86(32 和 64 )ARM。
+ u3 G. [3 j" Z, a但是,Gccgo 支持 GCC 支持的所有处理器。
5 V4 T, T+ q/ N2 o4 `8 r        并非所有这些处理器都经过  gccgo 的综合测试,但很多都经过了测试,包括 x86.SPARC、MIPS、PowerPC 甚至 Alpha。& M8 z& e( T$ g6 O% b$ Y3 R  p$ W
        Gccgo 还在 gc 测试了编译器不支持的操作系统,特别是 Solaris。
假如你从标准 Go 版本安装 go 通过以下命令-compiler选项支持 gccgo :go build -compiler gccgo myprog。
" y! x) v* f. X简而言之:gccgo:更多的优化,更多的处理器
( Y8 |  d8 N! Q3 x! K但是,正如所评论的,gccgo 支持的 go 和最新的 go 版本之间经常有不同步:) I. x; y' _7 Q" P5 f% P( s
gccgo 仅支持 go v1.2 版本,所以如果你需要 1.3 / 1.4(提示)中的任何新内容都不能使用 gccgo。——. [5 ]% E& h' N, t+ |6 o( Z
GCC 4.9 版将包括 gccgo 的 Go 1.2(不是 1.3)版本; R( l. [$ R4 {5 j
GCC 和 Go 项目发布时间表不一致,这意味着 1.3 将用于开发分支,但下一个 GCC 版本 4.10 可能有 Go 1.4 版本的 gccgo。
$ ?  b' T6 e" J, Zgccgo 生成非常好的代码
( _( W3 F4 k3 d1 d; m! d……但缺乏逃逸分析:使用许多小分配 垃圾杀死性能1 b4 T6 F; _& j* f' U# B5 r" j
……GC不准确。不适合 32 位。
6 y$ i7 K& h/ ~% l- D3 Atwotwotwo 补充说:2 `2 ?) x6 x* W: P" n. T4 |
另一张幻灯片提到非  gccgo ARM 代码生成不稳定。; J! W" k% @- |
假设这对你的项目来说是一个有趣的选项,它可能会比较你在目标架构上使用的二进制文件。6 B5 {8 Q6 r% E( F, z* W
Go 1.5 now (Q3/Q4 2015) 意味着:
8 J5 G. f, q, M; a  b$ |现在完全使用 编译器和操作Go 编写(带小汇编程序)。# T- D$ n- h" U% [7 T8 `
C 不再参与实现,因此曾用于构建发行版 C 编译器也消失了
1 K, ~0 w# t+ q2 a( y4 o4 p5 L“Go in Go”幻灯片确实提到:! l* A" S7 W# i/ j0 S& d  ]
C没了。6 u8 X/ l! O: B+ L: H2 O% l& }
旁注:gccgo 仍然很强大。$ i, n4 B% ]1 f+ B
J?rg W Mittag回答:  F- ]" u; a$ w6 M! b$ H
不,gccgo出现在 之后gc。
. F: @7 N0 C3 u+ y2 U# Agc最初是用 C它是基于 的Ken Thompson 来自Plan9 操作系统的 C 编译器,它是Unix 的继承人,由同一个人设计。gc用 重构迭代Go 写的内容越来越多。
& s3 S$ V0 S- v0 igccgo由伊恩·兰斯·泰勒( Ian Lance Taylor) 发起,他是一名和  Go 项目无关GCC 黑客。. b: I5 f4 i# y: J
请注意,第一个完全自托的 Go 编译器实际上是 Windows 的专有商业闭源实现了,它的名字似乎已经从我的脑海中消失了,就像它在互联网上一样。他们声称使用 Go 当时编写的自托管编译器gccgo还不存在gc在 Windows  上面设置了非常痛苦的 Windows 目标。(你基本上必须设定一个完整的 Cygwin 环境,修复源代码,编译源代码。)然而,该公司似乎已经关闭,直到他们成功地将产品推向市场。
# b. N2 _1 p  F$ cHector Chu的确, 发布于2009年 11 Go 的 Windows 端口。
/ j* C1 W9 b! Q9 H7 p3 i该go-lang.cat-v.org/os-ports页面也提到了Joe/Joseph Poirier 的初始工作。5 O" d% p) N2 N6 p
知情人士是否有可能参与生产 Windows 其中一个端口(Alex Brainman    - Hector Chu - Joseph Poirier)制作一个 wiki 条目,详细说明他们的环境建设?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则