两个流行的Go编译器"gc"和"gccgo"之间的主要区别是什么?建立表现?运行时性能?命令行选项?授权?
我不是在寻找最好的意见,只是对他们差异的基本概述,所以我可以决定哪种方法最符合我的需求.
Von*_*onC 94
您可以在" 设置和使用gccgo "中看到更多信息:
gccgo,Go语言的编译器.gccgo编译器是GCC的新前端.
请注意,gccgo不是gc编译器
如" GCC 4.7.1中的Gccgo "(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:更多优化,更多处理器.
但是,正如OneOfOne(来源)所评论的那样,gccgo支持go和最新的go版本之间经常会出现异步:
gccgo只支持版本go v1.2,所以如果你需要1.3/1.4(tip)中的任何新东西,gccgo都不能使用.-
GCC 4.9版将包含gccgo的Go 1.2(非1.3)版本.
GCC和Go项目的发布时间表并不重合,这意味着1.3将在开发分支中提供,但下一个GCC版本4.10可能会有Gccgo的Go 1.4版本.
twotwotwo提到在评论中布拉德·菲茨帕特里克的演讲幻灯片
gccgo生成非常好的代码
...但缺少转义分析:使用许多小的alloc +垃圾来杀死性能
...... GC不准确.32位不好.
twotwotwo补充说:
另一张幻灯片提到非gccgo ARM代码生成很不稳定.
假设它对您的项目来说是一个有趣的选项,可能会比较目标架构上的用例的二进制文件.
正如peterSO 评论,Go 1.5现在(2015年第3季度/第4季度)意味着:
编译器和运行时现在完全用Go编写(带有一点汇编程序).
C不再参与实现,因此构建分发所必需的C编译器已经消失.
"Go in Go"幻灯片确实提到:
C走了.
旁注:gccgo仍然很强劲.
| 归档时间: |
|
| 查看次数: |
28601 次 |
| 最近记录: |