Go语言的一个令人着迷的方面是,它的编译器主要是用Go语言本身编写的。可能你想知道如何使用同一种语言编写的编译器来编译该语言?

在本文中,我们将探讨使这一巧妙的引导过程,并深入探讨这种选择背后的原因。

引导过程

在编程语言的上下文中,引导(Bootstrapping)是使用该语言或其他语言现有的编译器构建该语言编译器的过程。这就像通过拉动自己的靴带将自己从地面上抬起来,看似不可能,但Go做到了。

从C语言开始

Go团队最初使用C语言编写了一种引导编译器来开发该语言。这个引导编译器负责编译Go代码的最小子集。

最小运行时和垃圾回收器

C编译器编译的Go代码子集包括足够的内容来实现基本的Go运行时和简单的垃圾回收器。这是实现自给自足的关键步骤。

用Go语言编写Go语言

有了基本的Go运行时和垃圾回收器,团队开始用Go语言本身编写一个Go编译器。这个新的Go编译器能够编译更广泛的Go代码子集。

迭代改进

然后,使用自托管的Go编译器编译了更大部分的标准库和更多的Go语言代码。这个过程重复迭代,直到用Go语言编写的Go编译器能够编译整个Go语言,包括标准库。

完全自给自足

最终,自托管的Go编译器能够处理整个Go语言,实现了完全自给自足。

为什么选择这种方式

你可能想知道为什么Go团队选择了这种引导方式。以下是几个关键原因:

简洁和自包含性

Go被设计为简洁和自包含。通过保持语言的最小和自包含,更容易维护和开发语言本身。引导过程与这一理念相一致。

跨平台可移植性

使用C语言进行初始引导允许在各种平台上使用C编译器编译Go语言。一旦自托管的Go编译器准备就绪,就可以使用它来在不依赖C编译器的情况下为不同平台编译Go语言。

改进语言演进

有了自托管的编译器,Go的开发变得更加简化。更容易对语言和编译器进行更改和改进。

结论

Go编程语言的引导过程,即使用Go语言本身编写Go编译器,是该语言简洁、自包含和务实设计的证明。它展示了Go团队在创建一种不仅强大而且自我维持的语言方面的才智。

当你深入探索Go编程的世界时,请记住这种语言实现自给自足的旅程是独特且卓越的。这是对一个原则的证明,即有时在软件世界中,确实可以通过自身的努力实现进步。

因此,继续前进,探索Go的世界,并欣赏其设计的优雅——这种设计中,甚至编译器也是该语言能力的证明。



Golang是用Go语言编写的:怎么做到的?插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2023/11/26/golang-is-written-in-go/