Go: 一年前的今天
5 分钟阅读
Go: one year ago today - Go: 一年前的今天
Andrew Gerrand 10 November 2010
2010年11月10日
2009年11月10日,我们启动了Go项目:一个注重简单和效率的开源编程语言。在接下来的一年中,Go项目本身和它的社区都发生了许多进展。
我们开始构建一种系统编程语言——通常可以用C或C++编写的程序类型——但我们惊讶地发现Go作为通用编程语言的效用。我们预计会吸引C、C++和Java程序员的兴趣,但是来自Python和JavaScript等动态类型语言的用户的兴趣激增,这是出乎意料的。Go语言的本地编译、静态类型、内存管理和轻量级语法似乎与广泛的编程社区产生了共鸣。
这个广泛的编程社区成长为了一个热情洋溢的Go编程者社区。我们的邮件列表有超过3,800名成员,每月约有1,500篇帖子。该项目有超过130位贡献者(提交代码或文档的人),自启动以来的2,800个提交中,将近三分之一是由核心团队之外的程序员贡献的。为了整理所有的代码,我们的开发邮件列表上交换了近14,000封电子邮件。
这些数字反映了一项劳动的成果,这个劳动的成果在项目的代码库中得以体现。编译器已经得到了大幅改进,代码生成更快、更高效,修复了超过一百个已报告的错误,并支持越来越多的操作系统和架构。得益于一群热心的贡献者(其中一位成为了我们的第一位非Google提交者),Windows端口即将完成。ARM端口也取得了巨大进展,最近达到了通过所有测试的里程碑。
Go工具集已经扩展和改进。Go文档工具godoc现在支持其他源树的文档(您可以浏览和搜索自己的代码),并提供了一个"代码漫步“界面,用于呈现教程材料(还有许多其他改进)。新的包管理工具Goinstall允许用户使用单个命令安装和更新外部包。Go格式化程序Gofmt现在会尽可能地进行语法简化。Goplay是一个基于Web的"编译时即时编译"工具,是一种方便的Go实验方式,特别是在您无法访问Go Playground的时候。
标准库已增加了超过42,000行代码,包括20个新包。其中新增的包括jpeg、jsonrpc、mime、netchan和smtp包,以及许多新的加密包。总的来说,随着我们对Go的语法习惯的理解加深,标准库一直在不断地完善和修订。
调试故事也变得更好了。最近对gc编译器的DWARF输出进行了改进,使得GNU调试器GDB在Go二进制文件中变得有用,我们正在积极努力使该调试信息更加完整。(详见最近的博客文章。)
现在,与Go语言不同的语言编写的现有库比以往更容易连接。Go支持最新的SWIG版本2.0.1,使得连接C和C++代码更容易,并且我们的cgo工具已经得到了许多修复和改进。
Gccgo,GNU C编译器的Go前端,作为一种并行的Go实现,已经跟上了gc编译器的步伐。现在它有了一个可工作的垃圾回收器,并已被GCC核心接受。我们现在正在努力使gofrontend成为一个基于BSD许可证的Go编译器前端,与GCC完全分离。
除了Go项目本身外,Go开始被用于构建真正的软件。我们的项目仪表板上列出了200多个Go程序和库,Google Code和Github上还有数百个。在我们的邮件列表和IRC频道上,您可以找到来自世界各地的编程人员,他们将Go用于他们的编程项目中。(请参见我们上个月的客座博客文章以获取一个实际例子。)在Google内部,有几个团队选择使用Go来构建生产软件,并且我们收到了其他公司正在使用Go开发大型系统的报告。我们还与一些使用Go作为教学语言的教育工作者取得了联系。
语言本身也在增长和成熟。在过去的一年中,我们收到了许多功能请求。但Go是一种小型语言,我们努力确保任何新功能在简单性和实用性之间取得了正确的平衡。自启动以来,我们已经进行了许多语言更改,其中许多是由社区反馈驱动的。
- 在几乎所有情况下,分号现在是可选的。规范
- 新的内置函数
copy
和append
使得片段管理更加高效和简单。规范 - 在制作子切片时可以省略上下界。这意味着
s[:]
是s[0:len(s)]
的简写。规范 - 新的内置函数recover作为一个错误处理机制,补充了panic和defer。博客,规范
- 新的复数类型(
complex
、complex64
和complex128
)简化了某些数学操作。规范,规范 - 复合字面语法允许省略冗余的类型信息(例如,在指定二维数组时)。发布.2010-10-27,规范
- 现在规定了一种变量函数参数(
...T
)及其传播(v...
)的通用语法。规范,规范,发布.2010-09-29
Go肯定已经准备好进行生产使用,但仍有改进的余地。我们未来的重点是在高性能系统的背景下使Go程序更快、更高效。这意味着改进垃圾收集器、优化生成的代码和改进核心库。我们还在探索一些进一步的类型系统添加,以使通用编程更加容易。一年中发生了很多事情;这既令人激动,又令人满意。我们希望这一年会比去年更加丰硕。
如果您一直想(重新)使用Go,现在是一个很好的时机!查看文档和入门页面以获取更多信息,或者在Go Playground中进行实验。