Go bootstrap toolchain

https://zhuanlan.zhihu.com/p/354094903

某些时候,可能要使用特殊版本的go,从源码安装,这同样很简单。从源码安装,首先要进行编译。Go 1.5实现了bootstrapping,所以编译1.5以后的版本和编译1.5以前的版本会略有不同。bootstrapping是编译器领域的一个术语,中文翻译为自举或自展,通俗地讲“用要编译的目标语言编写其编译器(汇编器)”。Go1.5开始编译器和运行时完全用Go语言编写(还有少量汇编);go1.4是最后一个用C编写工具链的发布。

https://www.cnblogs.com/dyh004/p/9669406.html

https://github.com/golang/go/issues/54265

https://github.com/golang/go/issues/44505

所以当前Go bootstrap toolchain的版本是1.17

在我看来,这样做的主要理由是这样做,这样我们就不会忘记如何去做。更新到 Go 1.17 是一个很大的考验,如果我们每年都更新,就不会了。

另请注意#49686,这是我们通过快速更新避免的事情(这里我们更新得不够快,但同样的事情)。

我们还需要养成提交问题的习惯,以便在下一次碰撞时完成树范围的更新。例如,当我们引入 strings.Cut 时,我们更新了所有非引导编译的代码,但我们还应该提交一个链接到下一个引导更新的问题,以完成树的转换。类似的事情,比如现在正在进行的 strings.Builder。

See golang.org/s/go15bootstrap for an overview of the build process.

https://docs.google.com/document/d/1OaatvGhEAq7VseQ9kkavxKNAfepWy2yhPUBs96FGV28/edit

strings.Cut是1.18新增的方法,所以等更新到1.18,可以解决下面的TODO
// TODO: Delete, replace calls with strings.Cut once Go bootstrap toolchain is bumped.