<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Gccgo on chai2010 的博客</title>
    <link>https://chai2010.cn/tags/gccgo/</link>
    <description>Recent content in Gccgo on chai2010 的博客</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Mon, 01 Apr 2013 00:00:00 +0000</lastBuildDate>
    
        <atom:link href="https://chai2010.cn/tags/gccgo/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Gccgo in GCC 4.7.1[翻译]</title>
      <link>https://chai2010.cn/post/golang/gccgo-gcc471/</link>
      <pubDate>Mon, 01 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://chai2010.cn/post/golang/gccgo-gcc471/</guid>
      
        <description>&lt;p&gt;英文原文: &lt;a href=&#34;http://blog.golang.org/2012/07/gccgo-in-gcc-471.html&#34;&gt;http://blog.golang.org/2012/07/gccgo-in-gcc-471.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go语言开始就由一个&lt;a href=&#34;http://golang.org/ref/spec&#34;&gt;语言规范&lt;/a&gt;定义，并不是倚赖某个具体实现。Go开发小组针对语言规范，实现了两个不同版本的编译器：gc和gccgo。  有两个不同的实现有助于保持语言规范的完整和完整：当两个实现相互冲突时，我们修改语言规范，或者是修改实现以保持和规范一致。  Gc是默认的编译器，专门针对go编写。Gccgo是另一个不同实现（有不同的侧重目标），下面我们将详细介绍。&lt;/p&gt;

&lt;p&gt;Gccgo是作为gcc的一个部分发布，属于gcc编译器集合。GCC前端可以支持多种不同的编程语言：gccgo是针对go语言的前端实现。Go前端同时保持和GCC相对独立，它的设计目标之一是可以连接的到不同的编译器后端，当然目前只支持GCC。&lt;/p&gt;

&lt;p&gt;gccgo的编译速度比gc较慢一点，但是可以生成更优的代码，因此程序执行速度会更快。GCC的优化技术经过多年完善，涵盖 循环优化、指令等各个方面。虽然gccgo不一定总是产生最好的代码，但是在某些情况下它编译的程序运行效率可以提高达30%。&lt;/p&gt;

&lt;p&gt;GC编译器只支持主流的处理器： X86(32/64位)和ARM。Gccgo可以支持GCC所支持的绝大部分类型处理器。目前gccgo已经测试的处理器类型包括：X86(&lt;sup&gt;32&lt;/sup&gt;&amp;frasl;&lt;sub&gt;64&lt;/sub&gt;)、SPARC、MIPS、PowerPC和Alpha等。  Gccgo也测试了GC编译器所不支持的操作系统，特别是Solaris系统。&lt;/p&gt;

&lt;p&gt;Gccgo同时提供了标准且完备的go语言标准库。gccgo和gc的关于Go运行时的一些特性也尽量保持一致，比如：goroutine的调度、channels、内存分配和垃圾回收等。Gccgo在X86已经支持goroutine的动态堆栈，需要使用gold连接器（在其他处理器，每个goroutine还是会分配一个大的栈，如果出现深度的函数嵌套调用会导致堆栈溢出）。&lt;/p&gt;

&lt;p&gt;目前发布的Gccgo还不包含go命令。 但是通过Go正式版本安装的go命令已经可以支持gccgo，需要使用 -compiler选项：&lt;code&gt;go build -compiler gccgo myprog&lt;/code&gt; 。用于连接Go和C/C++的cgo和SWIG工具同样支持gccgo。&lt;/p&gt;

&lt;p&gt;我们已经将针对GCC的Go前端采用和Go相同的BSD许可证发布。可以从 &lt;a href=&#34;http://code.google.com/p/gofrontend&#34;&gt;gofrontend Google Code project&lt;/a&gt; 下载代码。需要注意的是Go前端和GCC后端连接时，采用GPL许可证(译注： 应该是BSD被GPL传染的原因)。&lt;/p&gt;

&lt;p&gt;最新的GCC 4.7.1，包含的gccgo完美支持Go1。对于用户，如果需要更好编译优化，或者是使用GC所不支持的处理器或操作系统，gccgo可能是一个更好的选择。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;by Ian Lance Taylor&lt;/em&gt;&lt;/p&gt;
</description>
      
    </item>
    
  </channel>
</rss>