Gccgo in GCC 4.7.1[翻译]
2019独角兽企业重金招聘Python工程师标准>>>
英文原文: http://blog.golang.org/2012/07/gccgo-in-gcc-471.html
Go语言开始就由一个语言规范定义,并不是倚赖某个具体实现。Go开发小组针对语言规范,实现了两个不同版本的编译器:gc和gccgo。 有两个不同的实现有助于保持语言规范的完整和完整:当两个实现相互冲突时,我们修改语言规范,或者是修改实现以保持和规范一致。 Gc是默认的编译器,专门针对go编写。Gccgo是另一个不同实现(有不同的侧重目标),下面我们将详细介绍。
Gccgo是作为gcc的一个部分发布,属于gcc编译器集合。GCC前端可以支持多种不同的编程语言:gccgo是针对go语言的前端实现。Go前端同时保持和GCC相对独立,它的设计目标之一是可以连接的到不同的编译器后端,当然目前只支持GCC。
gccgo的编译速度比gc较慢一点,但是可以生成更优的代码,因此程序执行速度会更快。GCC的优化技术经过多年完善,涵盖 循环优化、指令等各个方面。虽然gccgo不一定总是产生最好的代码,但是在某些情况下它编译的程序运行效率可以提高达30%。
GC编译器只支持主流的处理器: X86(32/64位)和ARM。Gccgo可以支持GCC所支持的绝大部分类型处理器。目前gccgo已经测试的处理器类型包括:X86(32/64)、SPARC、MIPS、PowerPC和Alpha等。 Gccgo也测试了GC编译器所不支持的操作系统,特别是Solaris系统。
Gccgo同时提供了标准且完备的go语言标准库。gccgo和gc的关于Go运行时的一些特性也尽量保持一致,比如:goroutine的调度、channels、内存分配和垃圾回收等。Gccgo在X86已经支持goroutine的动态堆栈,需要使用gold连接器(在其他处理器,每个goroutine还是会分配一个大的栈,如果出现深度的函数嵌套调用会导致堆栈溢出)。
目前发布的Gccgo还不包含go命令。 但是通过Go正式版本安装的go命令已经可以支持gccgo,需要使用 -compiler选项:go build -compiler gccgo myprog
。用于连接Go和C/C++的cgo和SWIG工具同样支持gccgo。
我们已经将针对GCC的Go前端采用和Go相同的BSD许可证发布。可以从 gofrontend Google Code project 下载代码。需要注意的是Go前端和GCC后端连接时,采用GPL许可证(译注: 应该是BSD被GPL传染的原因)。
最新的GCC 4.7.1,包含的gccgo完美支持Go1。对于用户,如果需要更好编译优化,或者是使用GC所不支持的处理器或操作系统,gccgo可能是一个更好的选择。
by Ian Lance Taylor
转载于:https://my.oschina.net/chai2010/blog/119213
Gccgo in GCC 4.7.1[翻译]相关推荐
- gcc的简单使用教程
前几天在学习嵌入式入门时,有一个视频中就是介绍gcc的使用的,看了视频后突然好 想将GCC的手册页翻译出来,后来看到手册页发现实在太多了,凭我个人的能力根本无 法完成,只能写一些自己使用Gcc时的一些 ...
- 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git
Linux环境基础开发工具使用 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 软件安装三板斧 1.2.1 查看软件包 1.2.2 安装软件 1.2.3 卸载软件 2. vim 2. ...
- windows 安装 gcc 编译 fyne 项目
fyne官网 一.说明 可以看到官网写的,如果是第一次使用,需要安装 go 语言,安装 gcc,获取 fyne 依赖,其中麻烦点的就是 gcc,如果不安装 gcc,就不可以编译 写一个小示例,在 ru ...
- Go 学习笔记(2)— 安装目录、工作区、源码文件和标准命令
GOROOT: Go 语言安装根目录的路径,也就是 GO 语言的安装路径. GOPATH: 若干工作区目录的路径.是我们自己定义的工作空间.在 Go Module 模式之前非常重要,现在基本上用来存放 ...
- Windows程序员如何转向Linux开发应用?
这是一封发到邮箱里面的邮件,感觉有点代表性,这里做个统一回答,一家之言哈,欢迎拍砖. 原文如下: 我从csdn学习大本营得到您的信息.不好意思打搅您. 我现在用c++在linux下开发大型应用程序.我 ...
- golang 运算与循环
一.golang运算符 1.算术运算符 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 2.关系运算符 == 等于 != 不等于 > 大于 < 小于 >= ...
- Linux(9.21-9.27)学习笔记
一.Vim的基本操作. Normal模式下 1.h 键 向左移动光标 2. j 键 向下移动光标 3. k 键 向上移动光标 4. l键 向右移动光标 5.x 键 删除光标所在位置的 ...
- Burrow 服务的安装部署
Burrow 服务的安装部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近协助开发的同时帮忙把10个topic的数据使用5个topic的来工作.结果发现数据flume在手机数 ...
- python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置
python入门(全为重点) 1. 编程语言介绍 编程语言分类.总结 2. python介绍 3. 解释器多版本共存 4. 运行python程序的两种方式 5. 一个python程序运行的三个步骤(* ...
最新文章
- Visual Studio 2005 Team System下载地址
- MongoDB探索之路(二)——系统设计之CRUD
- vs2013 openmp例子
- 马克思关于劳动的八大金句
- python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点
- [Editor][001][vim]VIM的辅助工具们
- 【实践】腾讯PCG推荐系统应用实践(附PPT下载链接)
- 【模拟遍历】剑指offer:替换空格
- 十四、final关键字
- 在GRIDVIEW中合并单元格
- python—多进程的消息队列
- TableView全展开实现ContentSizedTableView
- mysql 触发器存储过程的区别_MySQL触发器、存储过程实现
- KnockOutJS(一)
- php 输入经纬度查询位置,php 根据实际地址获取对应的经纬度
- html用来注释的标记,互联网常识:html的注释标记是什么
- 启动docker 报ERROR: failed to register layer: symlink
- c++plus_6th_第4章
- 然而沼跃鱼早就看穿了一切 hihoCoder1082
- 解决IDEA.java文件显示不正常,左下角显示J问题(项目路径导入错误!)
热门文章
- java 正则判断二进制_regex – 正则表达式,用于定义一些二进制序列
- java 控制语句_java两个控制语句(转)
- java queue通信_Java -- 使用阻塞队列(BlockingQueue)控制线程通信
- 关于CodeReview
- java hql 参数_java – SQLQuery中的Hibernate命名参数
- stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现
- oa中获取当前用户信息
- layer 延时设置
- row_number() over()排序功能
- VB 文件常用操作相关API