jdk1.6编译1.8运行
Go 1.14是谷歌开发的用于创建Docker , Kubernetes , Istio和其他云原生计算项目的开源编程语言的下一个版本,目前处于测试阶段,预计将于2月份正式发布。
即将进行的Go升级改善了运行时和编译器。 根据发行说明 ,1.14版将也是最后一个支持32位Apple平台的版本 。
[ 同样在InfoWorld上:Git和GitHub用户的27个基本技巧 ]
通过Go运行时的改进,与直接调用deferred函数相比,大多数defer
用例的性能得到了提高,几乎不产生任何开销。 因此,现在可以将defer
用于对性能要求很高的代码,而无需担心开销。
改进的Go运行时还使goroutines可以异步抢占。 这意味着没有函数调用的循环不再可能使调度程序死锁或显着延迟垃圾回收。 除windows/arm
, darwin/arm
, js/wasm
和plan9/*
之外的所有平台均支持此功能。
抢占式实现的结果之一是,Linux和MacOS上的Go 1.14程序将比早期版本接收更多的信号。 使用syscall
或g olang.org/x/sys/unix
软件包的程序将看到更多较慢的系统调用失败,并出现EINTR
错误。 这些程序将必须以某种方式处理这些错误,最有可能的方法是循环尝试再次调用系统。
另外,页面分配器更有效,并且在GOMAXPROCS
高值下导致较少的锁争用。 这将是最显着的,因为对于并行且以高速率完成的大型分配而言,较低的延迟和较高的吞吐量。
同时,Go编译器将-d=checkptr
作为一个编译时选项添加,用于检查Go代码是否遵守unsafe.Pointer
规范。 unsafe.Pointer
安全规则是动态的。 而且,编译器现在可以使用-json
标志发出机器可读的关键优化日志,包括内联和消除边界检查。 现在,详细的转义分析诊断程序将再次起作用,并且为编译器插入的模糊测试提供了实验支持。
[ 通过InfoWorld的App Dev Report新闻通讯了解软件开发中的热门话题 ]
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
标志。
可以从golang.org下载Go 1.14。
翻译自: https://www.infoworld.com/article/3513398/go-114-focuses-on-runtime-compiler.html
jdk1.6编译1.8运行