BT

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

Go 1.4发布:支持Android,改进垃圾收集器

| 作者 Sergio De Simone 关注 18 他的粉丝 ,译者 臧秀涛 关注 4 他的粉丝 发布于 2014年12月13日. 估计阅读时间: 3 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

在Go 1.3发布6个月之后,Google宣布发布Go 1.4。Go 1.4正式支持Android原生开发,不过这方面的工作还处于繁重的开发之中。该版本还改进了垃圾收集器,语言方面也有少许变化。

InfoQ数月前曾报道过,Google的工程师正在为支持用Go语言开发原生Android应用而努力。随着Go 1.4的发布,向Android进行实验性移植的草案已经成为现实,Google的Go团队的工程师Andrew Gerrand介绍说,“仅使用Go代码编写简单的Android应用已经成为可能”。

对Android的支持是通过golang.org/x/mobile库实现的,其中包括用于生成语言绑定的包(支持从Java调用Go代码),还有用于创建一个完整的原生应用的包,再就是一些例子,以及到OpenGL的绑定

值得一提的是,Google的计划并非是基于Go 提供完整的Android NDK,而只是支持用Go编写Android 应用的一部分。发布说明中提到:

提供的接口主要针对的是游戏。我们期望的是应用在整个屏幕上绘制(通过OpenGL,参见go.mobile/gl包),不会暴露平台屏幕管理基础设施的任何信息。在Android上,这意味着一个原生应用等价于iOS上一个单独的Activity(特别是NativeActivity) ,一个单独的UIWindow。触屏事件也可以通过这个包获得。当Android支持脱离预览版状态后,Android NDK支持的所有API都将通过一个Go包暴露出来。

此外,Andrew还提到:

在这一阶段,支持库仍然是刚刚起步,还处于繁重的开发之中。早期的使用者应该会遇到不少问题,我们也欢迎社区参与进来。

Go 1.4在改进垃圾收集器方面也做了很多工作,为将在后面的版本中唱主角的完全并发的收集器打下了基础。此外,现在的栈在必要时会重新分配,以保证连续性,并消除众所周知的“热栈分割(hot stack split)”问题。

工具方面也有改进,go 命令现在支持构建时生成源代码。Andrew提到,利用该特性,可用使用新的stringer工具为类型常量自动生成String方法。

最后,Go 1.4还对语言做了一些修改,它们是:

  • 新的for-range循环形式,支持用

for range x {

...

}

代替

for i := range x {

...

}

  • 禁止在**T上调用方法,像Go语言的之前版本支持以下形式的方法调用:

type T int

var x **T

x.M()

这种调用方法并不符合Go语言规范,规范只允许自动插入一个解引用(dereference)操作。依赖之前行为的代码不能通过编译,但是也很容易修复,只需要显式地对变量解引用。

更多细节,请参考发布说明

 

查看英文原文:New Go 1.4 Adds Support for Android, Improves Garbage Collection

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

貌似有点错误 by Saint Arion

新的 for-range 形式不是替代 for i: = range x{} 而是替代 for _ := range x{}

Re: 貌似有点错误 by 臧 秀涛

golang.org/doc/go1.4 见发布说明

允许的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通知我

2 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT