写点什么

Go 1.5 编译器与运行时环境由 Go 语言自身编写

  • 2015-08-27
  • 本文字数:1203 字

    阅读完需:约 4 分钟

Go 语言 1.5 版本拥有一个用 Go 语言自身编写的完整工具链,一个更快的垃圾回收器和在每一个可用的 CPU 上运行的 goroutine。

Go 语言以前的版本通过改善编译器、垃圾回收器、开发工具和对更多平台(比如:Android/ARM, BSD, Solaris, NaCl)的支持来获得更优秀的性能。Google 曾经提到,它对每个 Go 语言版本都许下了兼容性的承诺,基本上说“除了安全问题,不会做出不兼容的更改”

Go 语言 1.5 版本和原来的版本相比没有什么不同,尽管一些用户抱怨在编译和运行他们的程序时会遇到一些问题, 并在 Go问题列表中罗列了出来。然而 Google 认为 1.5 版本是一个“有意义的版本”,大部分变化是底层的变化,以及性能的提升。下面是一些改进:

  • 编译器、链接器、汇编器和运行时环境已经从 C 语言编写转换成了 Go 语言编写,还有一小部分是汇编语言编写的,已经彻底摒弃了最初的 C 语言代码。根据 Go 语言的设计者 Robert Pike 的说法,Go 语言编译器通过工具自动转换和一些最终的手动清理操作来避免引入新的 bug。在一些工具的帮助下,开发者手动重写了 Go 语言运行时环境。刚开始时,新的编译器由于一些 C 语言结构体没有转换成有效的 Go 语言代码,导致编译速度慢了 10 倍,但是在后来的开发完善过程中,性能得到了彻底的提高。摒弃 C 语言的一些好处如下:一个代码库适用于所有平台,可以更容易的加入新平台,拥有一个统一的采用较少代码量和简易维护量的工具链。缺点是:构建需要花费两倍时间,这是因为 Go 语言代码也是由工具编译生成的。Google 计划在 1.6 版本中降低构建所花费的时间。
  • 一个编译器、一个链接器、一个汇编器的目标是要实现通过 $GOARCH 和 $GOOS 这两个环境变量来配置 CPU 架构和操作系统。
  • Go 1.5 很有必要从源代码来创建分布式。
  • 在标准的 stop-the-world 垃圾回收器中加入了新的并发垃圾回收器,将垃圾回收活动从原来的 50 毫秒降低到 10 毫秒以下。大家可以在设计文档和这些幻灯片中找到新的并发垃圾回收器的更多细节。由于有了并发垃圾回收器,程序运行速度与 Go1.4 相比,提高了几个百分点。
  • 在 64 位架构的大趋势下,一些 32 位的分支将无法再使用。
  • 新的 Go 指令追踪工具可以对程序执行细粒度的追踪。

在 Go 1.5 中引入的一个重大改变是并发的最大线程数量从 1 上升到了可用的 CPU 的数量。如果一个程序依赖于协同程序的执行顺序,它很有可能遇到意想不到的结果,并且需要修复。更多的细节参考设计文档

其他改进如下:所有资源库支持内部包,外部依赖,go 文档命令以及其他一些改进。我们在发行通知中介绍了关于Go 1.5 新特性的更多细节。

查看英文原文 The Go 1.5 Compiler and Runtime Are Written in Go


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-08-27 19:002683

评论

发布
暂无评论
发现更多内容

react源码分析:深度理解React.Context

flyzz177

React

校招前端二面常考react面试题总结

beifeng1996

React

面试官:vue2和vue3的区别有哪些?

bb_xiaxia1998

Vue

滴滴前端一面必会vue面试题(附答案)

bb_xiaxia1998

Vue

前端vue面试题

bb_xiaxia1998

Vue

实现Promise的原型方法--前端面试能力提升

helloworld1024fd

JavaScript

几个常见的js手写题,你能写出来几道

helloworld1024fd

JavaScript

如何整理自己的前端面试题库

loveX001

JavaScript

阿里前端一面必会react面试题总结

beifeng1996

React

用户行为分析模型实践(三)——H5通用分析模型

vivo互联网技术

大数据 数据分析 数仓建模

2023最新前端面试总结

loveX001

JavaScript

社招前端一面经典手写面试题

helloworld1024fd

JavaScript

高级前端常考手写面试题(必备)

helloworld1024fd

JavaScript

Backbone前端框架解读

京东科技开发者

Vue 前端 前端架构 企业号 2 月 PK 榜 backbone

Okhttp 如何构建一个 Get 的 URL

HoneyMoose

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

从React源码来学hooks是不是更香呢

goClient1992

React

带你实现react源码的核心功能

goClient1992

React

Verilog HDL函数与任务的使用

timerring

FPGA

理解「业务」与「技术」概念

知了一笑

架构 技术 业务

你是如何使用React高阶组件的?

beifeng1996

React

说说你对Vue的keep-alive的理解

bb_xiaxia1998

Vue

EasyRecovery14最新个人版本有哪些功能?

茶色酒

Java高手速成 | 使用TCP进行手机文件传输

TiAmo

Java TCP

如何在 C# 项目中链接一个文件夹下的所有文件

newbe36524

从React源码角度看useCallback,useMemo,useContext

goClient1992

React

ChatGPT背后的经济账

OneFlow

人工智能 深度学习 大模型

react源码分析:组件的创建和更新

flyzz177

React

js异步编程面试题你能答上来几道

loveX001

JavaScript

手写一个Redux,深入理解其原理-面试进阶

beifeng1996

React

湖仓一体电商项目(十九):业务实现之编写写入DWS层业务代码

Lansonli

数据湖 湖仓一体电商项目

Go 1.5编译器与运行时环境由Go语言自身编写_开源_Abel Avram_InfoQ精选文章