Go 1 and the Future of Go Programs

Introduction

Go版本1(简称Go 1)的发布是该语言开发的一个重要里程碑. Go 1是一个稳定的平台,可用于以Go编写的程序和项目的增长.

Go 1定义了两件事:第一,语言的规范;第二,语言的规范. 其次,是一组核心API的规范,即Go库的"标准包". Go 1版本以两个编译器套件(gc和gccgo)的形式包括它们的实现,以及核心库本身.

旨在使写入Go 1规范的程序将在该规范的整个生命周期内继续编译并正确运行,并且保持不变. 在某个不确定的时候,可能会出现Go 2规范,但是直到那个时候,即使Go 1的将来的"点"发行版(Go 1.1,Go 1.2等)出现,今天可以运行的Go程序也应该继续工作.

兼容性在源代码级别. 在发行版之间不保证已编译软件包的二进制兼容性. 在发布一个点之后,将需要重新编译Go源代码以链接到新版本.

API可能会增长,获得新的软件包和功能,但不会破坏现有的Go 1代码.

Expectations

尽管我们期望绝大多数程序会随着时间的推移保持这种兼容性,但无法保证将来的更改不会破坏任何程序. 本文档旨在为将来的Go 1软件兼容性设定期望. 在将来的版本发布之后,今天编译和运行的程序可能会通过多种方式失败. 它们都不大可能,但值得记录.

当然,对于所有这些可能性,如果它们出现了,我们将在可行的情况下尽力在不影响现有代码的情况下更新规范,编译器或库.

这些相同的考虑因素也适用于连续的点发布. 例如,在Go 1.2下运行的代码应与Go 1.2.1,Go 1.3,Go 1.4等兼容,尽管不一定与Go 1.1兼容,因为它可能使用仅在Go 1.2中添加的功能

源代码库中提供的版本之间添加的功能(但不是二进制发行版的一部分)正在开发中. 在发布具有此类功能的软件之前,不会保证它们具有兼容性.

最后,尽管这不是正确性问题,但程序的性能可能会受到其依赖的编译器或库的实现更改的影响. 在发布之间不能保证给定程序的性能.

尽管这些期望适用于Go 1本身,但我们希望在基于Go 1的外部开发软件的开发中也会有类似的考虑.

Sub-repositories

主go树的子存储库中的代码(例如golang.org/x/net )可以在宽松的兼容性要求下开发. 但是,将对子存储库进行适当标记,以标识与Go 1 point版本兼容的版本.

Operating systems

不能保证与操作系统接口的长期兼容性,而操作系统接口是由外部各方更改的. 因此, syscall程序包不在此处提供的保证范围之内. 从Go 1.4版开始, syscall软件包被冻结. 系统调用接口的任何改进都必须在其他地方(例如go.sys子存储库中)进行支持. 有关详细信息和背景,请参阅本文档 .

Tools

最后,Go工具链(编译器,链接器,构建工具等)正在积极开发中,并且可能会改变行为. 例如,这意味着依赖于工具位置和属性的脚本可能会因发布点而中断.

除了这些警告之外,我们认为Go 1将为Go及其生态系统的发展奠定坚实的基础.

by  ICOPY.SITE