在本地机器编译 Golang 源码

研究一门编程语言的实现原理,第一步就是要在自己的计算机上,通过源码成功编译出适应本系统的安装包(也叫源码安装)。

一言以蔽之

在 M2 芯片的 Mac 上编译最新的 Golang。

环境信息

  • 目标 Golang 源码分支:master
  • 操作系统:macOS
  • 芯片架构:Apple M2 Pro

为什么要从源码编译

在研究语言实现过程中,我们不可避免要进行 Debug、打印日志甚至修改某些实现逻辑,如果直接使用编译好的 Golang 环境,源码不可修改。

自举

在开始编译我们自己的 Go 版本之前,先来看一个问题:我们日常开发 Go 程序,只需要编写一个 xxx.go 文件,然后使用 Go 提供的编译命令 go build xxx.go 就可以编译出本平台的可执行文件进而运行。

之所以能愉快的使用 go 命令,本质上是我们在本地电脑安装了 Go 的包(环境),执行 go build 命令实际上是调用了 Go 的编译器将我们的代码编译成了可执行文件。

那么思考这个问题:Golang 的编译器是由什么语言实现的呢?查看 Github 上 Go 的开源仓库我们知道,目前的 Go 编译器,是 Go 实现的。

Go 自己编译自己?很明显这陷入了 “先有鸡还是先有蛋” 的问题。不过这个问题在这里有明确的答案 —— 自举。

什么是自举?通俗来讲,实现编程语言的自举,就是能使用该语言本身编写的编译器或解释器来编译或运行该语言程序的过程。以 Go 为例,自举的大致过程如下:

  • 实现前端编译器:使用 C 语言实现并编译 Go 的基础编译器(gc,go compiler,和垃圾收集的 GC 不是一回事),功能相对有限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值