BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Go 1.7会提升编译速度并且会产生更快的代码

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 张卫滨 关注 13 他的粉丝 发布于 2016年4月25日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Go 1.7的开发周期即将接近下一个里程牌版本,不过Go的提交者Dave Cheney报告了在即将发布的释放版本中,团队在提升语言工具链方面所做的努力。

Cheney指出,基于当前的开发状态,Go 1.7将会很轻易地成为史上最棒的Go释放版本。在工具链提升方面的努力主要聚焦在两个领域:

  • 编译和连接时间;
  • 代码生成。

在编译时间方面,自从由C转向Go以来,Go编译器就饱受较差的性能所困扰。这个问题已经有了很多的讨论,在面向Go 1.7的版本中,最近的工作已经完成,它致力于减少编译器所使用的内存量并且在连接时间方面也有所提升。相对于Go 1.5.3,这能够将总的编译时间降低大约20-30%,如下图所示:

我们可以看到,Go 1.4.3编译器的性能依然要明显优于当前的1.7版本。不过,当前的性能提升也不应该被低估,尤其是新的Go编译器包含了一个全新的代码生成后端,在性能方面,它还没有完全成熟。

还需要提及的是自举(bootstrap)Go编译器的决策其实与性能无关,而是使用Go来取代C会在开发方面所带来的优势,这包括易于编写正确的代码、调试、更好的工具以及对并行的支持等等。实际上,Go编译器的代码是从C代码库自动转换得到的,而不是完全重写的。

如前文所述,代码生成是Go 1.7另一个主要关注的领域。新的后端改成了使用静态单一分配形式(static single assignment,SSA),这与LLVM和其他编译器相同,这样能够对生成的代码启用多项优化。其中包含无用代码消除(dead code elimination)、寄存器分配(register allocation)、栈帧分配(stack frame allocation)等。如Cheney所述,在当前的初步开发版本中,Go 1.7新的SSA后端所产生的代码在速度上能够最高提升20%。另外,相对于Go 1.6,它所产生的二进制会更小,在很多方面,这个版本能够与Go 1.4版本相媲美

查看英文原文Go 1.7 to Improve Compilation Speed and Generate Faster Code

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT