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[翻译]相关推荐

  1. gcc的简单使用教程

    前几天在学习嵌入式入门时,有一个视频中就是介绍gcc的使用的,看了视频后突然好 想将GCC的手册页翻译出来,后来看到手册页发现实在太多了,凭我个人的能力根本无 法完成,只能写一些自己使用Gcc时的一些 ...

  2. 【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. ...

  3. windows 安装 gcc 编译 fyne 项目

    fyne官网 一.说明 可以看到官网写的,如果是第一次使用,需要安装 go 语言,安装 gcc,获取 fyne 依赖,其中麻烦点的就是 gcc,如果不安装 gcc,就不可以编译 写一个小示例,在 ru ...

  4. Go 学习笔记(2)— 安装目录、工作区、源码文件和标准命令

    GOROOT: Go 语言安装根目录的路径,也就是 GO 语言的安装路径. GOPATH: 若干工作区目录的路径.是我们自己定义的工作空间.在 Go Module 模式之前非常重要,现在基本上用来存放 ...

  5. Windows程序员如何转向Linux开发应用?

    这是一封发到邮箱里面的邮件,感觉有点代表性,这里做个统一回答,一家之言哈,欢迎拍砖. 原文如下: 我从csdn学习大本营得到您的信息.不好意思打搅您. 我现在用c++在linux下开发大型应用程序.我 ...

  6. golang 运算与循环

    一.golang运算符 1.算术运算符 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 2.关系运算符 == 等于 != 不等于 > 大于 < 小于 >= ...

  7. Linux(9.21-9.27)学习笔记

    一.Vim的基本操作. Normal模式下 1.h 键 向左移动光标   2.  j  键  向下移动光标   3. k 键 向上移动光标 4. l键  向右移动光标 5.x 键  删除光标所在位置的 ...

  8. Burrow 服务的安装部署

    Burrow 服务的安装部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近协助开发的同时帮忙把10个topic的数据使用5个topic的来工作.结果发现数据flume在手机数 ...

  9. python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置

    python入门(全为重点) 1. 编程语言介绍 编程语言分类.总结 2. python介绍 3. 解释器多版本共存 4. 运行python程序的两种方式 5. 一个python程序运行的三个步骤(* ...

最新文章

  1. Visual Studio 2005 Team System下载地址
  2. MongoDB探索之路(二)——系统设计之CRUD
  3. vs2013 openmp例子
  4. 马克思关于劳动的八大金句
  5. python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点
  6. [Editor][001][vim]VIM的辅助工具们
  7. 【实践】腾讯PCG推荐系统应用实践(附PPT下载链接)
  8. 【模拟遍历】剑指offer:替换空格
  9. 十四、final关键字
  10. 在GRIDVIEW中合并单元格
  11. python—多进程的消息队列
  12. TableView全展开实现ContentSizedTableView
  13. mysql 触发器存储过程的区别_MySQL触发器、存储过程实现
  14. KnockOutJS(一)
  15. php 输入经纬度查询位置,php 根据实际地址获取对应的经纬度
  16. html用来注释的标记,互联网常识:html的注释标记是什么
  17. 启动docker 报ERROR: failed to register layer: symlink
  18. c++plus_6th_第4章
  19. 然而沼跃鱼早就看穿了一切 hihoCoder1082
  20. 解决IDEA.java文件显示不正常,左下角显示J问题(项目路径导入错误!)

热门文章

  1. java 正则判断二进制_regex – 正则表达式,用于定义一些二进制序列
  2. java 控制语句_java两个控制语句(转)
  3. java queue通信_Java -- 使用阻塞队列(BlockingQueue)控制线程通信
  4. 关于CodeReview
  5. java hql 参数_java – SQLQuery中的Hibernate命名参数
  6. stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现
  7. oa中获取当前用户信息
  8. layer 延时设置
  9. row_number() over()排序功能
  10. VB 文件常用操作相关API