写点什么

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:003684

评论

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

跨平台应用开发进阶(十二) :uni-app 实现应用桌面图标角标提示及应用跳转

No Silver Bullet

uni-app 5月月更 桌面角标

SAP OData V4 模型支持的一些数据绑定模式

汪子熙

JavaScript 前端开发 SAP ui5 5月月更

Amazon CodePipeline 与 GitHub 集成

亚马逊云科技 (Amazon Web Services)

GitHub Code

从“数据”到“大数据”,激发数据潜力,深耕智能应用!

亚马逊云科技 (Amazon Web Services)

大数据 数据 智能开发

Kubernetes 节点弹性扩展实践组件 Amazon Karpenter:部署 GPU 推理应用

亚马逊云科技 (Amazon Web Services)

Kubernetes 部署

规模化软件开发的必由之路—大规模自动化测试

刘冉

自动化测试

Sentinel介绍与使用 收藏起来

牧小农

sentinel

架构学习(一)

爱晒太阳的大白

5月月更

跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程

No Silver Bullet

uni-app ios 5月月更 云打包 原生APP

M_5: 设计微博系统中”微博评论“的高性能高可用计算架构。

Jadedev

架构训练营

Flutter 使用 Provider 实现嵌套状态管理

岛上码农

flutter ios 安卓开发 跨平台开发 5月月更

在线蚂蚁文,菊花文生成工具

入门小站

工具

LinkedList 源码分析-迭代器

zarmnosaj

5月月更

如何透过 Serverless 与 API 的方式异步搜寻数据湖中的数据

亚马逊云科技 (Amazon Web Services)

Serverless 数据 API

Java Core「1」JUC-线程基础

Samson

学习笔记 5月月更 Java core

react-router原理分析

正经工程师

React React-Router

数学建模学习资料

乌龟哥哥

5月月更

WordPress 编辑用户

海拥(haiyong.site)

WordPress 5月月更

电商系统微服务拆分

Trent

架构 微服务拆分 电商 训练营

[ CloudWeGo 社区动态 ] Kitex 电商项目案例

baiyutang

Go 微服务 5月月更

C++最佳实践 | 1. 工具

俞凡

c++ 最佳实践

Linux 入门及常见Shell命令

宇宙之一粟

Linux Shell 5月月更

【刷题第16天】数组中出现次数超过一半的数字

白日梦

5月月更

小公司里面的 Python 后端,数据库(MySQL)到底要学习到什么程度?

梦想橡皮擦

5月月更

数据结构-复杂度计算经典案例

芒果酱

数据结构 算法 5月月更

flask框架【入门学习笔记一】

恒山其若陋兮

5月月更

SpringMVC源码分析:POST请求中的文件处理

程序员欣宸

Java spring 5月月更

1.1 历史长河中的顶层设计

凌晞

linux之crontab使用技巧

入门小站

Linux

PostgreSQL出现死锁怎么办?

慕枫技术笔记

数据库 5月月更

在线HTML转JSON工具

入门小站

工具

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