写点什么

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

评论

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

如何用文字让 ta 动心?

图灵社区

李小龙的话道出了移动端“小程序化”的核心——似水无形

FinClip

一文搞懂 SAE 日志采集架构

阿里巴巴云原生

阿里云 Serverless 云原生

「Java」本地文件上传下载预览

价投小邱

文件 下载 文件上传 #java

【数据结构实践】手把手带你简单实现Python自定义栈

迷彩

数据结构 算法 堆栈 8月月更

英特尔CEO帕特·基辛格:以先进计算和封装创新,满足数字时代算力需求

科技之家

Spring Boot 运行的时候提示日志错误

HoneyMoose

万物皆可集成系列:低代码释放用友U8+深度价值(3)— 数据融合应用

葡萄城技术团队

4 天 7 条 PR,80% 代码覆盖率,开源是「内卷」还是修炼?

腾源会

开源 腾源会 开源摘星计划

Logstash

平凡人生

英特尔联手产业伙伴打造绿色、低碳、智能数据中心

科技之家

聚焦“工业互联网+危化安全生产”,工智道入驻华为云严选商场

IT资讯搬运工

C#/VB.NET:删除PDF文档中的页面

Geek_249eec

C# VB.NET 删除PDF页面

以PostgreSql为例,说明生产级别数据库安装要考虑哪些问题?

字母哥哥

数据库 postgresql Linux

Flink+ice 实现可视化规则编排与配置(Demo)

waitmoon

flink 规则引擎使用 规则引擎 CEP 编排系统

极光与华为云携手共赢,共同助力中企出海

科技云未来

【Arthas】初识Arthas,安装使用

石臻臻的杂货铺

Arthas 8月月更

世界人工智能大会阿里巴巴专场论坛《数字时代的技术责任》来了!

阿里技术

“小程序化”如何助力智慧产业园区建设破题?

FinClip

InfoWorld文章丨将数据编排技术用于AI模型训练

Alluxio

人工智能 机器学习 数据平台 Alluxio 8月月更

浅谈DingOS 设备端计算

鼎道智联

隐私安全 智能推荐 本地计算 服务推荐

Spring 项目启动错误提示 LoggingApplicationListener

HoneyMoose

如何用文字让 ta 动心?

图灵教育

开发制作数字藏品app原理

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统

如何给注册中心锦上添花?

捉虫大师

微服务 架构设计 注册中心 服务发现 8月月更

DevSecOps | 极狐GitLab 动态应用程序安全测试(DAST)使用指南

极狐GitLab

DevOps gitlab 运维 测试 CI/CD

自此乾坤始:中国量子计算产业化的激变时刻

脑极体

如果重新学计算机

价投小邱

Linux 计算机网络 操作系统

Kyligence 助力重庆银行获 IDC FinTech 突破奖认可

Kyligence

数据分析 智能多维数据库

探秘苹果、微软、谷歌操作系统视觉设计,原来…

鼎道智联

ios windows UI 操作系统 视觉交互

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