本文原文发表于Go语言的官方博客,作者回顾了一年来Go语言在各方面取得的主要进展。
在2009年11月10日我们启动了Go项目:一个注重简单和效率的开源编程语言。一年来,无论是Go项目自身还是它的社区都有了极大的发展。
我们构建此语言的本意是进行系统编程——这方面的程序通常用C或C++所写——但当Go被作为一种通用语言使用时,我们也感到意外。我们本指望该语言受到C、C++和Java程序员的关注,结果同时受到一些动态类型语言如Python和JavaScript用户的热情关注则是我们始料未及的。Go所具有的本地编译、静态类型、内存管理和轻量级语法的优点引发了广大编程社区的共鸣。
这些数据彰显了结晶于项目代码库的劳动成果。编译器持续地得以改进,从而能产生更快的和更高效的代码,有超过100个报告的bug被修正,并支持更多的操作系统和架构。由于一个专门小组(其中的一人成为项目第一个非Google的提交者)的努力,向Windows的移植已接近完成。向ARM的移植也取得了巨大进展,最近达到了一个里程碑——通过了所有的测试。
Go的工具组件已经被扩展和提高。Go的文档工具godoc现在已经支持其他源码树的文档(您可以浏览并搜索您自己的代码),并且提供了一个“code walk”界面来呈现辅导材料(这只是更多改进中的一项)。Goinstall是一个新的包管理工具,它使得用户可以用单个命令安装和更新外部包。Gofmt,Go的美化印刷工,现在可以进行语法简化了。Goplay,一个基于web的“即输入即编译”工具,当您无法访问Go Playground时,它提供了实验Go的便利方法。
标准库已经增长了超过42,000行代码,其中包括20个新的包。新增加的包包括jpeg、jsonrpc、mime、netchan和smtp,以及新的许多cryptography包。除此之外,随着我们对Go的理念理解的深入,标准库也持续地得以精炼和修正。
调试方面的事情同样也变得更好了。最近对gc编译器的DWARF输出的改进使得GUN调试器(GDB)可用于Go的二进制文件了,并且我们正在积极努力来使调试信息更加全面。(请参见最近的博客文章获得详细信息。)
现在更容易与已有的非Go语言所写的库进行连接了。在最近的SWIG 2.0.1版发布中,已经添加了对Go的支持,这使得Go可以与C或C++代码连接了,并且我们的cgo工具也得到了许多的修正和提升。
Gccgo,GUN C语言编译器的Go前端,在Go的实现中已经与gc编译器平行前进了。它现在有了一个可用的垃圾回收器,并已经被GCC核心所接受。我们现在正在使gofrontend变成为一个BSD协议授权的Go编译器前端,以彻底地从GCC中解耦出来。
除了Go项目本身,Go也正开始被用于一些实际的软件。在Project dashboard上列出了200多个Go程序和库,在Google Code和Github还有数百个。(参见我们上个月的客户博客文章来了解一个真实的例子。)在Google内部也有几个团队正选择Go来构建软件产品,我们也收到其他公司正在用Go开发大系统的报导。我们正在联系将Go用于教学语言的几个教育工作者。
该语言自身也长大成人了。在过去的一年里,我们收到了许多的功能要求。但Go是一个小语言,我们努力保持任何的新功能在简单性和可用性之间取得平衡。从发布以来,我们对该语言进行了许多改进,许多都是有社区反馈驱动的:
- 在几乎所有的实例中,分号都变为可选了。[spec]
- 新的内建函数copy和append使得对切片的管理更高效和直白。[spec]
- 当生成一个子切片(sub-slice)时,上下界可以省略了。这意味着s[:]就是s[0:len(s)]的简写。[spec]
- 新的内建函数recover在错误处理机制上对panic和defer进行了补充。[blog,spec]
- 新的复数类型(complex、complex64和complex128)简化了特定的数学操作。[spec,spec]
- 复合文字语法允许多余的类型信息(如在指定二维数组时)。[release.2010-10-27,spec]
- 规定了一个通用的可变函数参数(...T)及其传递(v...)的语法。[spec, spec,release.2010-09-29]
Go语言两周年编辑本段回目录
两年前,Google的一个小组公开了他们的孵化项目——Go编程语言。当时他们提供了一个语言规范、两个编译器、一个初步的标准库、一些新颖的工具、大量简单但却精确的文档。当看到全世界有很多的程序员尝试使用Go时,他们真的很激动。该小组继续进行着他们的工作,小组的人数也逐渐扩展到几十个——然后是几百个——包括来自开源社区的开发者。
Go作者一直不停地构建了许多的库、新工具和文档。去年11月,他们通过一篇博客文章(中文翻译)和大家共同庆祝成功的一年,并得出结论“Go已经完全可以用于生产环境了,但仍有提升的空间。我们最近关注的是使Go程序在高性能系统中更快和更高效。”
今天是Go发布的两周年纪念日,Go已经变得比以往更快速和稳定了。Go的代码生成器、并发机制、垃圾回收器和核心库都得以仔细地调整,这些使Go程序的性能进一步得到提升,对性能分析和调试的原生支持使其能更容易地侦测并排除用户代码中的性能问题。Go现在也更容易通过Go语言之旅进行学习了,这是一个可以方便地通过浏览器访问的交互式教程。
在今年我们为Google App Engine平台引入了试验性的Go运行时,并不断地提升Go运行时对App Engine API的支持。就在本周还发布了1.6.0 版本的Go App Engine SDK,它包含了对后台程序(长期运行的进程)的支持,对数据仓库索引的精确控制,以及其他的各种改进。今天,Go运行时的功能已与Python和Java运行时相当了,因此是后两者的一个可行的替代方案。事实上,目前golang.org正是运行在App Engine服务上的一个godoc。
如果是2010年是探索和试验的一年,2011年则是进行调整和为未来计划的一年。在本年度我们发布了数个Go “release”版本,这些版本相比weekly快照更可靠,并获得更好的支持。我们同时还引入了一个gofix工具,它免除了迁移到新发布版本可能遇到的麻烦。另外,在上个月我们还宣布了Go 1 计划——一个将获得多年支持的发布版本。Go 1 的工作已经正在进行中,您可以在weekly快照weekly.golang.org上查看我们的最新进展。
按计划Go 1将在2012年年初发布。我们希望在同时将Go App Engine带出“试验”状态。
但这还不是全部。2011年是令地鼠(Go的吉祥物)激动的一年。他已经将自己装扮成毛绒玩具(在Google I/O和其他Go讲座中饱受称赞的礼物)和塑胶形式(每个OSCON的参加者都收到了一个,现在在Google Store中还有货)。
另外,最出人意料的是,他还在万圣节与他的地鼠女朋友一起亮相了呢!
原文:The Go Programming Language turns two作者:Chris Nokleberg
日期:2011-11-10
翻译:GolangWiki.org