Go 1.14改善了运行时,编译器
Go 1.14是谷歌开发的用于创建Docker,Kubernetes,Istio和其他云原生计算项目的开源编程语言的最新版本,现已正式发布。 Go升级于2月25日发布,改进了运行时和编译器。
1.14版也将是最后一个支持32位Apple平台的版本。 通过Go运行时的改进,与直接调用deferred函数相比,大多数defer用例的性能得到了提高,几乎不产生任何开销。
结果,现在defer现在可以在对性能至关重要的代码中使用,而不会产生开销关注。 改进的Go运行时也使goroutines异步抢占。这意味着没有函数调用的循环不再可能使调度程序死锁或显着延迟垃圾回收。 抢占式实现的结果之一是,Linux和MacOS上的Go 1.14程序将比早期版本接收更多的信号。
使用syscall或golang.org/x/sys/unix等软件包的程序将看到更慢的系统调用因EINTR错误而失败。这些程序将必须以某种方式处理这些错误,最有可能的方法是通过循环以再次尝试系统调用。
此外,页面分配器效率更高,并且在GOMAXPROCS值较高时,导致较少的锁争用。这将是最显着的,因为对于并行且高速率完成的大型分配而言,较低的延迟和较高的吞吐量。 同时,Go编译器将-d = checkptr添加为编译时选项,用于检查Go代码是否遵守不安全规定。
动态地使用指针安全性规则。而且,编译器现在可以使用-json标志发出机器可读的关键优化日志,包括内联和消除边界检查。现在,详细的转义分析诊断将再次起作用,并且为编译器插入的模糊测试提供了实验支持。
Go 1.14中的其他更改和改进包括: 为了改进Go的WebAssembly支持,现在可以通过js.Value对象从Go引用的JavaScript值进行垃圾收集。
但是,不再可以使用==运算符比较js.Value对象。相反,必须使用Equal方法对它们进行比较。
而且,js.Value现在具有IsUndefined,IsNull和IsNaN方法。 与Rust语言类似,Go 1.
14版本将是最后一个在MacOS上支持32位二进制文件的版本。它还可能是最后一个在其他Apple平台(包括iOS,iPadOS,WatchOS和tvOS)上支持32位二进制文件的软件。 在语言更改中,现在允许嵌入重叠的接口。
Google Native Client平台不再支持 现在支持FreeBSD的64位体系结构。 go命令现在在模块模式下支持Subversion仓库。此命令现在还包含来自模块代理和其他HTTP服务器的纯文本错误消息的片段。
仅当错误消息是有效的UTF-8且仅包含图形字符和空格时,才会显示错误消息。 Windows上的二进制文件启用了数据执行保护(DEP)以进行系统级内存保护。 一个新的标志-modfile = file指示go命令读取并可能写入一个替代的go。
mod文件,而不是模块根目录中的文件。 go get命令不再接受-mod标志。 一个新的标志-modcacherw指示go命令将默认状态下的模块高速缓存中的新创建目录保留为默认权限,而不是只读。
此标志使测试或其他工具更有可能意外地添加了不在目录中的文件。模块的验证校验和。但是它允许使用rm-rf删除模块缓存。 哈希/ maphash包在字节序列上提供哈希函数。
GOINSECURE是一个新的环境变量,它指示go命令在直接从某些模块的源中获取某些模块时允许HTTPS连接跳过证书验证。 可以从golang.org下载Go 1.14。 版权所有©2020 IDG Communications,Inc. 紧贴InfoWorld的最新新闻稿,内容涉及软件开发人员,分析师,数据库程序员和数据科学家。
从我们仅限会员的内幕文章中获取专家见解。
Yorumlar
Yorum Gönder