技术开发 频道

简单而富有效率 Go语言诞生一周年回顾

  【IT168 评论】本文原文发表于Go语言的官方博客,作者回顾了一年来Go语言在各方面取得的主要进展。

  在2009年11月10日我们启动了Go项目:一个注重简单和效率的开源编程语言。一年来,无论是Go项目自身还是它的社区都有了极大的发展。

  我们构建此语言的本意是进行系统编程——这方面的程序通常用C或C++所写——但当Go被作为一种通用语言使用时,我们也感到意外。我们本指望该语言受到C、C++和Java程序员的关注,结果同时受到一些动态类型语言如Python和JavaScript用户的热情关注则是我们始料未及的。Go所具有的本地编译、静态类型、内存管理和轻量级语法的优点引发了广大编程社区的共鸣。

  这些广大的参与者逐渐汇集到一个由热情的Go程序员组成的专门社区。我们的邮件列表目前有超过3,800位成员,每月大概有1,500个帖子。该项目有130多个贡献者(指那些提交代码或文档的人),在所有的2,800次提交中,大约有三分之一是由项目核心团队之外的程序员提交的。为了完成开发,有将近14,000封邮件通过我们的开发邮件列表被交换。

  这些数据彰显了结晶于项目代码库的劳动成果。编译器持续地得以改进,从而能产生更快的和更高效的代码,有超过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已经完全可以用于生产环境了,但仍有提升的空间。我们最近关注的是使Go程序在高性能系统中更快和更高效。这就要改进其垃圾回收器,优化生成的代码,并改进其核心库。我们同时也在探索向类型系统中添加一些东西使泛型编程变得更加容易。在这一年中已经发生很多了,这已经让人激动和满意了。我们期望这下一年会更加硕果累累。

  如果您有意进入(或返回)Go的世界,现在正是时候!请查看我们的文档入门页面以获得更多信息,或者直接到Go Playground玩一把。

  -- Andrew Gerrand,2010.11.10

  原文地址:Go: one year ago today

  译者:GoCoding.org

0
相关文章