美文网首页
go gc gccgo gcc GNU 之间的关系

go gc gccgo gcc GNU 之间的关系

作者: cdz620 | 来源:发表于2020-03-09 21:39 被阅读0次

    概念介绍

    • GNU: 包含众多免费开源软件的操作系统
    • gcc (GNU Complier Collection): GNU 编译工具集,支持编译众多的编程语言。经过gcc编译后的代码可以在GNU上执行。
    • go:go 是一门语言,是具有明确标准定义的语言,不是具体的实现,具体的实现由go与gccgo来完成。
    • gc: go compiler go默认的编译器
    • gccgo
      : gcc是一个编译工具集,gccgo是gcc工具集里的一部分,关联go与gcc。能将go编译成可执行文件。

    gc 与 gccgo 有什么差别

    gc 与gccgo 都是go语言标准规范的不同实现,两者包含不同的侧重点:

    • 处理器:gccgo 具有比 gc更长的发展史,支持更多不同的操作系统,处理器
    • 编译与性能上:
      • gccgo 比gc编译程序更慢;不能保证编译后的代码比gc更佳;
      • 在大部分情况下,基于gcc编译优化,编译的代码性能更高,适合CPU密集型程序
    • gccgo 跟随gcc发布,支持的版本,可能不与当前的go版本相同

    开发如何选择gc与gccgo

    使用成本上gccgo远比gc更高,基于如下原因:

    • gccgo的发布跟随gcc,更新频率与gc(跟随go版本一起发布)不同步,在语言特性上的支持gc比gccgo强
    • gccgo的环境比gc环境管理成本更高,一些常见的问题:
      • 如gcc系统版本低,gcc需要单独安装(可以通过docker降低成本)
      • gcc安装步骤复杂:https://gcc.gnu.org/install/
      • gccgo 无法使用go toolchain导致,编译环境需要一些特殊操作,比如依赖问题,cgo问题。gc对于特殊操作有更好的支持

    总结:除非真要追求高性能,否则不建议去折腾gccgo

    如果一定要折腾,建议思路:基于gcc docker 镜像,编写Dockerfile,安装golang,然后使用go build -compiler=gccgo
    相关资源:

    参考

    相关文章

      网友评论

          本文标题:go gc gccgo gcc GNU 之间的关系

          本文链接:https://www.haomeiwen.com/subject/tqpmdhtx.html