和很多主流语言一样,Go
语言编译器最初都是由 C
语言和汇编语言实现的。C
语言和汇编实现的Go
编译器(记作 A
)用来编译 Go
源文件。那么问题来了?
是否可以用 Go
语言自身实现一个 Go
编译器 B
,用编译器 A
来编译 Go
编译器 B
工程的源码并链接成最终的 Go
编译器 B
呢?这就是 Go
核心团队在 Go 1.5
版本时做的事情。
他们将绝大多数原来用 C
和汇编编写的 Go
编译器以及运行时实现改为使用 Go
语言编写,并用 Go 1.4.x
编译器(C
与汇编实现的,相当于 A
) 编译出 Go 1.5
编译器。这样自 Go 1.5
版本开始,Go
编译器就是用 Go
语言实现的了,这就是所谓的自举。即用要编译的目标编程语言 (Go
语言)编写其(Go
)编译器。