Go 1.8 正式发布,编译速度比 Go 1.7 提高约 15%
chai2010 2017年02月17日

Go 1.8 正式发布,编译速度比 Go 1.7 提高约 15%

chai2010 chai2010 发布于2017年02月17日 收藏 22 评论 90

玩转软件开发云,集华为近30年研发精华开发神器!>>>  

今天Go 团队很高兴地宣布Go 1.8发布了。现已提供下载。整个标准库有了显著的性能提升和变化。该版本主要的更新内容如下:

  • Go 1.7中为64位x86引入的编译器后端现在用于所有体系结构,这些体系结构将会有显著的性能改进。例如,我们的基准程序所需的CPU时间在32位ARM系统上减少了20-30%。在此版本中,64位x86系统还有一些性能改进,编译器和链接器更快了,编译时间应该比Go 1.7提高约15%。但是在这一领域还有很长的路要走:我们希望在未来版本中实现更快的编译速度。

  • 垃圾收集暂停时间明显更短,通常在100微秒以下,有时候甚至低至10微秒。

  • HTTP服务器添加对 HTTP/2 Push的支持,允许服务器抢先发送响应到客户端。这对于通过消除往返行程来最小化网络延迟非常有用。HTTP服务器现在还支持正常关机了,允许服务器通过在服务所有正在运行的请求之后关闭,而最小化停机时间。

  • 上下文(添加到Go 1.7中的标准库)提供了取消和超时机制。Go 1.8在标准库中添加了更多对上下文的支持,包括数据库/ sql和net包以及net / http包中的Server.Shutdown。

  • 现在使用新添加的Slice函数在排序包中对切片进行排序更简单。例如,要通过“名称”字段对结构体片段进行排序:

sort.Slice(s,func(i,j int)bool {return s [i] .Name <s [j] .Name})

更多新版本的添加、改进和修复内容,以及上面列出的改进的详细信息请查看Go 1.8发行说明

为了庆祝发布,世界各地的Go用户组都在本周举办庆祝会,这已经成为Go社区的一个传统,所以如果你错过了这一次,那么请在 GO 1.9 发布前留意。

via:https://blog.golang.org/go1.8

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Go 1.8 正式发布,编译速度比 Go 1.7 提高约 15%
分享
评论(90)
精彩评论
43
《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!
8
只可惜 GoSublime 不支持!!!太难过了。。
7
GoSublime 作者刚刚更新了!!!!哈哈哈哈哈哈!
7
Go语言北京用户组的人太多,没法(其实是没来得及)举办庆祝会。我们争取在Go 1.9的时候搞起!
3

引用来自“DarkAngel”的评论

现在学Go还来得及么?
完全来得及!
最新评论
0

引用来自“hyper0x”的评论

《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!
这本书说的太啰嗦了。。。对新手来说没意义。。因为新手不知道书上说的是什么意思。。。对与老手来说也没意义,因为书上说的都懂。。。(逃。。。。
1

引用来自“DarkAngel”的评论

现在学Go还来得及么?

引用来自“萧萧恋”的评论

完全来得及!

引用来自“DanielG”的评论

@萧萧恋 我学习go的第一天就开始做项目了,完全没问题。
第一个项目直接上框架,还是从net开始写起啊?
0

引用来自“DarkAngel”的评论

现在学Go还来得及么?

引用来自“萧萧恋”的评论

完全来得及!
@萧萧恋 我学习go的第一天就开始做项目了,完全没问题。
0

引用来自“hyper0x”的评论

《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!
坐等 零零散散的大概看了第一版两遍了,很精彩!
0

引用来自“hyper0x”的评论

《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!
《Go并发编程实战》第1版 看了,说实话看的真心累啊,没看下去,可能是我的问题,也可能是作者的语言表达能力有问题,感觉是在看英文一样。
0
我要学Go
0
如此难看不堪的语言居然大手吹捧
0

引用来自“hyper0x”的评论

《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!

引用来自“echo_admin”的评论

回复@hyper0x : 刚买了第一版,还么来及看就出第二版了:(
那是你刚买,这本书出了一段时间了
0

引用来自“hyper0x”的评论

《Go并发编程实战》第2版初稿已完成,估计还有两个月就可以出版了。它基于Go 1.8编写,敬请关注!
不怕2个月后,1.9又出来了吗?
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。

引用来自“黑暗圣堂武士”的评论

你说的是GO?你也在用了?

引用来自“乌龟壳”的评论

静态语言啥语言都能分模块增量编译,不用一次性整套代码都编译一遍。至于提到的web框架啥的指的是java的。

引用来自“eechen”的评论

这个我知道,毕竟我在Ubuntu上用GCC编译PHP及其PECL扩展(模块)也不是一次两次了.但如果你修改的是Zend引擎里的代码,那就老老实实重新编译一次PHP,最典型的就是非线程安全与线程安全的切换,也就是线程安全--enable-maintainer-zts这个配置并不能支持你所谓的"增量编译",不仅PHP解释器,就连PECL扩展,也都必须重新编译一次才能适配线程安全.

引用来自“乌龟壳”的评论

理论上只要把不相关线程安全的代码提出来分开编译,切换线程安全与非安全的模块化编译就不会那么慢了。问题是没必要这样去把代码分开是其一。

其二是针对代码调试来说,每次修改编译调试这个场景,是可以增量编译的,不相关的模块如果已经切换成比如线程安全的参数了,就不需要再编译一次。我想没人在开发调试的时候,在线程安全和非线程安全版本间切来切去吧?

就算切来切去,只要在Makefile里根据线程安全开关变量,定义两套编译中间结果,这样就能实现又切来切去,又增量编译了,不过我想说——我去,好麻烦的样子,哈哈。

引用来自“eechen”的评论

线程安全真像你说得那么容易用模块实现开关,PHP官方早做了。
撇开这点,PHP 5.6的PECL扩展模块并不能跑在PHP 5.5里。
也就是说,你想要从5.5升级到5.6,那你用到的所有PECL扩展都需要重新编译。
但如果你是从5.5.1升级到5.5.2,则PECL扩展不需要重新编译。
我要强调的就是,某些底层核心变了,就算模块化也避免不了重新编译。
你说的没错,但和你一开始说的“改代码-调试-查看”这个场景不是一回事。

具体点说,你提到的是底层核心模块的【接口】变了,这样才需要全部依赖的都重新编译,如果只是底层模块的内部代码变了是不用的。就拿PHP来说,从PHP5.6升级到PHP7,难道只是改改代码的事,最简单也要apt-get install php7啊
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。

引用来自“黑暗圣堂武士”的评论

你说的是GO?你也在用了?

引用来自“乌龟壳”的评论

静态语言啥语言都能分模块增量编译,不用一次性整套代码都编译一遍。至于提到的web框架啥的指的是java的。

引用来自“eechen”的评论

这个我知道,毕竟我在Ubuntu上用GCC编译PHP及其PECL扩展(模块)也不是一次两次了.但如果你修改的是Zend引擎里的代码,那就老老实实重新编译一次PHP,最典型的就是非线程安全与线程安全的切换,也就是线程安全--enable-maintainer-zts这个配置并不能支持你所谓的"增量编译",不仅PHP解释器,就连PECL扩展,也都必须重新编译一次才能适配线程安全.

引用来自“乌龟壳”的评论

理论上只要把不相关线程安全的代码提出来分开编译,切换线程安全与非安全的模块化编译就不会那么慢了。问题是没必要这样去把代码分开是其一。

其二是针对代码调试来说,每次修改编译调试这个场景,是可以增量编译的,不相关的模块如果已经切换成比如线程安全的参数了,就不需要再编译一次。我想没人在开发调试的时候,在线程安全和非线程安全版本间切来切去吧?

就算切来切去,只要在Makefile里根据线程安全开关变量,定义两套编译中间结果,这样就能实现又切来切去,又增量编译了,不过我想说——我去,好麻烦的样子,哈哈。
线程安全真像你说得那么容易用模块实现开关,PHP官方早做了。
撇开这点,PHP 5.6的PECL扩展模块并不能跑在PHP 5.5里。
也就是说,你想要从5.5升级到5.6,那你用到的所有PECL扩展都需要重新编译。
但如果你是从5.5.1升级到5.5.2,则PECL扩展不需要重新编译。
我要强调的就是,某些底层核心变了,就算模块化也避免不了重新编译。
0

引用来自“root110”的评论

期望2.0有官方UI

引用来自“TUPUNCO”的评论

不会有

引用来自“root110”的评论

如果有ui,做点小工具还是很不错的。目前的walk太简陋了点,绑qt的又太大了。

引用来自“七月_”的评论

我在尝试用webkit做外壳,用html做界面。

引用来自“nokia”的评论

请问你用golang的什么东西,可以webkit做外壳,html做界面
直接调用封装好的webkit.dll 的api啊,创建一个webview,不就可以自己做界面了吗
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。

引用来自“黑暗圣堂武士”的评论

你说的是GO?你也在用了?

引用来自“乌龟壳”的评论

静态语言啥语言都能分模块增量编译,不用一次性整套代码都编译一遍。至于提到的web框架啥的指的是java的。

引用来自“eechen”的评论

这个我知道,毕竟我在Ubuntu上用GCC编译PHP及其PECL扩展(模块)也不是一次两次了.但如果你修改的是Zend引擎里的代码,那就老老实实重新编译一次PHP,最典型的就是非线程安全与线程安全的切换,也就是线程安全--enable-maintainer-zts这个配置并不能支持你所谓的"增量编译",不仅PHP解释器,就连PECL扩展,也都必须重新编译一次才能适配线程安全.
理论上只要把不相关线程安全的代码提出来分开编译,切换线程安全与非安全的模块化编译就不会那么慢了。问题是没必要这样去把代码分开是其一。

其二是针对代码调试来说,每次修改编译调试这个场景,是可以增量编译的,不相关的模块如果已经切换成比如线程安全的参数了,就不需要再编译一次。我想没人在开发调试的时候,在线程安全和非线程安全版本间切来切去吧?

就算切来切去,只要在Makefile里根据线程安全开关变量,定义两套编译中间结果,这样就能实现又切来切去,又增量编译了,不过我想说——我去,好麻烦的样子,哈哈。
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。

引用来自“黑暗圣堂武士”的评论

你说的是GO?你也在用了?

引用来自“乌龟壳”的评论

静态语言啥语言都能分模块增量编译,不用一次性整套代码都编译一遍。至于提到的web框架啥的指的是java的。
这个我知道,毕竟我在Ubuntu上用GCC编译PHP及其PECL扩展(模块)也不是一次两次了.但如果你修改的是Zend引擎里的代码,那就老老实实重新编译一次PHP,最典型的就是非线程安全与线程安全的切换,也就是线程安全--enable-maintainer-zts这个配置并不能支持你所谓的"增量编译",不仅PHP解释器,就连PECL扩展,也都必须重新编译一次才能适配线程安全.
0
好的 我知道了
0

引用来自“root110”的评论

期望2.0有官方UI

引用来自“TUPUNCO”的评论

不会有

引用来自“root110”的评论

如果有ui,做点小工具还是很不错的。目前的walk太简陋了点,绑qt的又太大了。

引用来自“七月_”的评论

我在尝试用webkit做外壳,用html做界面。
请问你用golang的什么东西,可以webkit做外壳,html做界面
0

引用来自“root110”的评论

期望2.0有官方UI

引用来自“TUPUNCO”的评论

不会有

引用来自“root110”的评论

如果有ui,做点小工具还是很不错的。目前的walk太简陋了点,绑qt的又太大了。
我在尝试用webkit做外壳,用html做界面。
0
刚更新到1.8,重新编译了一下项目,是比1.7是快了些,但不是很明显。
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。

引用来自“黑暗圣堂武士”的评论

你说的是GO?你也在用了?
静态语言啥语言都能分模块增量编译,不用一次性整套代码都编译一遍。至于提到的web框架啥的指的是java的。
0

引用来自“eechen”的评论

把编译时间缩短才能跟上无需编译的脚本语言的开发效率.

引用来自“乌龟壳”的评论

再慢的编译器只要划分好模块,不一定每次所有模块都要重新编译,编译速度都不是大问题。

我自己做的web框架开发阶段检测到代码变化就会自动重新编译,整个过程行云流水。你对静态语言的手段了解得还是不够。
你说的是GO?你也在用了?

相关资讯

最新资讯
热门资讯
顶部