1.3 Go 语言版本

该系列文章基于 master 分支的最新代码,截止本系列文章结束,最新的 commit 是 d26fc68aa10dc8eda5ccdcc80d790e7df2fd9823, 建议读者基于相同的 commit 来搭建项目及阅读该系列文章。

Go 编译器的开发工作一直在活跃地进行,从最初 C 语言的版本到实现自举,一直到当前阶段,Go Team 一边在增加新的语言特性,一边在对以往的模块进行重构,甚至重写。当前阶段最大的开发工作集中在泛型上,与此同时也在重写整个类型检查模块,在 1.16 版本发布之前,这部分的开发工作一直在 dev.typeparams 分支上进行,随着 1.16 的发布以及 1.17 开发工作的展开,该分支的所有内容已经合并到 master 分支(参考 Planning Go 1.17)。新版本的代码除了增加了对泛型的支持,整个类型检查系统与之前的版本有很大的差异,虽然目前并没有确定,但是根据最新的代码结构以及 Russ’s Plan, 从 1.18 版开始,随着泛型功能的发布,整个编译器应该大概率会采用新版本的类型检查系统(参见 编译器开发组的讨论)。

本文开始写于 1.16 版本发布之前,最开始是基于 1.15.6 的代码,但随着对以上信息的了解,作者认为没有必要写一系列发表即过时的分析文章,尽管此时距离 1.18 的发布乐观估计还有一年时间,但考虑到代码结构上的巨大改变,同时为了覆盖正在开发的泛型特性,作者还是决定基于 master 分支的最新代码来进行分析,由于 master 分支的开发工作非常活跃,所以文中所引用的代码位置以及各种文件、函数等名称可能无法随时保持一致,请读者理解。等 Go Team 完成了该部分的开发工作之后,我将会选择一个 Frozen 分支并将所有引用的位置固定。

最后更新于