刚刚 Go Team 宣布 Go 1.15 正式发布。受疫情影响,这次版本变化的内容不太多,但如期发布了。

它的大部分更改在工具链、运行时和库的实现。与往常一样,该版本保留了 Go 1 兼容性的承诺。这几乎保证所有的 Go 程序都能像以前一样正常编译和运行。

Go 1.15 包括对链接器的重大改进,改进了对具有大量内核的小对象的分配,并弃用了 X.509 CommonName。GOPROXY 现在支持跳过返回错误的代理,并添加了新的嵌入式 tzdata 包。

我们一起看看具体都有哪些值得关注的变化。

1、新的链接器

官方的设计文档地址:https://golang.org/s/better-linker,从命名看,是一个更好的链接器(这是废话)。

此版本 Go 可减少链接器资源的使用(时间和内存)并提高代码的健壮性/可维护性。对于在 amd64 架构上运行的基于 ELF 的操作系统(Linux,FreeBSD,NetBSD,OpenBSD,Dragonfly 和S olaris),代表性的大型 Go 程序集的链接速度提高 20%,平均所需内存减少 30%。其他体系结构/OS 组合的改进。改进链接程序性能的关键因素是新设计的目标文件格式,以及内部阶段的改进以提高并发性(例如,将重定位并行应用于符号)。Go 1.15 中的目标文件比其 1.14 等价文件稍大。这些更改是对 Go 链接器进行现代化改造的多版本项目的一部分,这意味着将来的版本中有望对链接器进行其他改进。现在,链接器在 linux/amd64和 linux/arm64 上默认为 -buildmode=pie 的内部链接模式,因此这些配置不再需要 C 链接器。

2、编译器改进,包括略微小了些的二进制文件

包 unsafe 的安全规则允许在调用某些函数时将 unsafe.Pointer 转换为 uintptr。以前,在某些情况下,编译器允许进行多个链式转换(例如 syscall.Syscall(…,uintptr(uintptr(ptr)),…))。编译器现在只需要一次转换。使用多次转换的代码应进行更新以满足安全规则。

与 Go 1.14 相比,Go 1.15 通过消除某些类型的 GC 元数据和更积极地消除了未使用的类型元数据,与 Go 1.14 相比将典型的二进制大小减少了大约 5%。该工具链现在通过将函数与 32 字节边界对齐并填充跳转指令来缓解 GOARCH=amd64 上的 Intel CPU 勘误 SKX102。尽管此填充增加了二进制大小,但这远远超出了上述二进制大小改进所弥补的范围。

Go 1.15 向编译器和汇编器都添加了 -spectre 标志,以允许启用 Spectre 缓解措施。这些几乎是绝对不需要的,主要是作为“纵深防御”机制提供的。有关详细信息,请参见 Spectre Wiki页面

现在,编译器将拒绝 //go: compiler 指令,这些指令对其所使用的声明无意义,并出现“放错位置的编译器指令”错误。此类错误使用的指令以前已被破坏,但编译器无声地忽略了它们。

现在,编译器的 -json 优化日志记录报告大(>= 128 字节)副本,并包含转义分析决策的说明。

3、内嵌 tzdata(时区数据)

增加了一个新包:time/tzdata,当系统找不到时区数据时(比如 Windows 等),通过导入这个包,在程序中内嵌时区数据,也可以通过编译时传递 -tags timetzdata 来实现同样的效果。

具体查看这个 issue:https://github.com/golang/go/issues/38017 以及包 time/tzdata 的说明:https://golang.org/pkg/time/tzdata/

4、增加 testing.TB.TempDir

测试生成临时文件挺常见的,这个为了更好的解决此问题。详情见 issue:https://github.com/golang/go/issues/35998

5、增加 testing.T.Deadline

将 context 引入 testing 包。详情见 issue:https://github.com/golang/go/issues/28135

6、关于 Ports 部分

darwin/386、darwin/arm 不再支持;riscv64 变得更好;linux/arm64 现在作为第一类 port 支持。

7、API 的变动

1)net/url.URL RawFragment 和 EscapedFragment ,详情见 issue:https://github.com/golang/go/issues/37776

2)net/url.URL.Redacted,详情见 issue:https://github.com/golang/go/issues/34855

3)time.Ticker.Reset,我们知道 Timer 是有 Reset 的,这次为 Ticker 也增加,详情见 issue:https://github.com/golang/go/issues/33184

4)regexp.Regexp.SubexpIndex,详情见 issue:https://github.com/golang/go/issues/32420

5)sync.Map.LoadAndDelete,详情见 issue:https://github.com/golang/go/issues/33762

6)crypto/tls.Dialer.DialContext,详情见 issue:https://github.com/golang/go/issues/18482

还有其他一些 API 变动,不一一列举。

8、工具链

1)增加 go env GOMODCACHE:https://github.com/golang/go/issues/34527

2)opt-in fallbacks in GOPROXY:https://github.com/golang/go/issues/37367

3)vet:warn about string(int) 和 detect impossible interface assertions:https://github.com/golang/go/issues/32479https://github.com/golang/go/issues/4483

4)println 允许打印两个值。println(twoValues());

5)panic:显示可打印的值而不是地址。比如:

type MyString string
panic(MyString("hello"))

现在打印:

panic: (main.MyString) (0x48aa00,0x4c0840)

期望打印:

panic: main.MyString("hello")

可读性会好很多。

9、性能

1)在 amd64 上更好的写屏蔽;

2)在 Linux 上,forkAndExec 使用 dup3;

3)sha512 算法速度提升 15%;

4)ReadMemStats 延迟降低 95%;

5)关闭状态的 channel 接收速度提升 99%;

6)将小的 int 值转为 interface{} 不额外分配内存;

10、更详细的改动

更多详细的改动,见官方发布文档

Go 1.15 Release Notes​docs.studygolang.com

sis地址发布器_Go 1.15 正式发布:看看都有哪些值得关注的变化相关推荐

  1. sis地址获取器_TencentOS tiny深度源码分析(2)—— 调度器

    温馨提示:本文不描述与浮点相关的寄存器的内容,如需了解自行查阅 调度器的基本概念 TencentOS tiny中提供的任务调度器是基于优先级的全抢占式调度,在系统运行过程中,当有比当前任务优先级更高的 ...

  2. 【第15期】2020下半年,值得关注的10本机器学习、深度学习好书

    导读:不知不觉,2020已进入下半场.相信你今年大部分时间都是在家里度过的.不过,即使你足不出户,也依然能做很多事情.计算机.互联网以及人工智能等相关技术的发展,给我们生活带来了很多便利. 本文聚焦于 ...

  3. Flink 1.11.0 发布,有哪些值得关注的新特性?

    简介:7 月 7 日,Flink 1.11.0 正式发布.历时近 4 个月,Flink 在生态.易用性.生产可用性.稳定性等方面都进行了增强和改善.Apache Flink PMC.阿里巴巴高级技术专 ...

  4. Go 1.15 正式发布;华为确认成立屏幕驱动芯片部门;微信 iOS 版 7.0.15 正式版发布| 极客头条

    程序员专区 Go 1.15 正式发布 Go 1.15 新版发布了,主要更新: 新的链接器 编译器改进,包括略微小了些的二进制文件 内嵌 tzdata(时区数据) 增加 testing.TB.TempD ...

  5. JDK 15 正式发布,划时代的 ZGC 同时宣布转正!

    作者 | YourBatman 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 前言 2020年9月15日,JDK 15 正式发布,可谓如约而至.按照 Java S ...

  6. 迅雷看看播放器4.9.15.2156 如何观看超过5分钟以上的视频?

    (原创转载请注明链接:作者发威时刻)精华资源网盘合集:    我们的理念和宗旨: 软件名称/版本:迅雷看看播放器4.9.15.2156 暴力去除限制版 更新时间:2014.6.8 安装类型:绿色免安装 ...

  7. 12.写一个简单的发布器与订阅器(C++)

    写一个简单的发布器与订阅器(C++)(rawmeat:http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)) 注意 ...

  8. Actor-ES框架:消息发布器与消息存储器

    消息发布器: Ray是基于Event Sourcing设计的ES/Actor框架,ESGrain状态(State)的修改.ESGrain之间的通信默认使用RabbitMQ通信.消息的发布器主要是Rab ...

  9. 最新突破!科学家研发出世界首款精神控制手臂机器人;近日Kubernetes 1.15 正式发布;雷军公布小米手机产品线布局……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  10. dnfdpl服务器维护了,2019DNF心悦DPL赛事活动地址 强化器和时空石没了

    大家期待已久的DNF心悦DPL赛事活动在5月9日开始了,不过玩家们对此次的活动并不是很满意,因为强化器和时空石没了,这次的兑换奖励大家可以进入活动地址查看. [2019DNF心悦DPL赛事活动地址 强 ...

最新文章

  1. emoji 乱码_这个自制emoji的网站,让你成为永远不输的斗图王者
  2. elasticsearch 分片_Elasticsearch教程:动手实践
  3. Win8装SQL2008需要离线安装 .Net3.5
  4. oracle修改表字段
  5. 获取SQL命令字符串中的参数名列表
  6. 辅助出售网站源码_出售网站意味着出售社区
  7. Ehcache学习总结(1)--Ehcache入门介绍
  8. html显示时间,并且实时刷新(详细代码)
  9. 进程同步与信号量机制的应用
  10. 爬取豆瓣电影分类排行榜
  11. 宁畅g40系列服务器发布,基于第三代至强可扩展处理器,宁畅G40系列服务器正式发布...
  12. 无人值守u盘安装linux,U盘无人值守安装Linux操作系统
  13. python中if缩进规则_Python缩进与if语句 空格的魅力
  14. iOS | 模拟器调试Web控制台空白问题及解决
  15. React全家桶写一个CNode社区,奉上心得与源码
  16. 「Luogu4233」射命丸文的笔记-生成函数+多项式求逆
  17. 如何提高专业英文阅读能力
  18. 外卖返利小程序系统公众号外卖饿了么美团cps返利小程序分销系统
  19. 【Semantic Segmentation】语义分割综述
  20. 2020年4月5日总结

热门文章

  1. 【数学模拟卷总结】2023李林六套卷数学二第一套
  2. 层次分析法(AHP)详细步骤
  3. 23种设计模式-模板方法模式《面试流程》
  4. 基于51单片机出租车计费设计(proteus仿真+程序+原理图+设计说明书)
  5. Unity实现多旋翼无人机的模拟飞行(物理引擎)
  6. @JsonFormat和@DataFormat注解解决前后端日期格式一致性问题
  7. 计算机多媒体英语,基于计算机多媒体的英语个性化教学
  8. 【特征工程系列3】Zipf定律及其特征化
  9. Spring动态代理的两种方式
  10. 【渝粤题库】陕西师范大学201821 宋词研究 作业(专升本)