Git 自举,编译器自举

今天看一篇文章提到了“Git 自举”,它指的是 Git 实现了自我托管,也就是 Git 可以托管 Git 自身的源码。

这个概念很简单,但是想了解一下具体实现原理是什么,于是搜了一下“自举”,相关的大多是“编译器自举”的内容,我也顺便看了一下,发现没有多少有意义的参考内容。但其实也是有那么一两句介绍让我思考以后总算明白了编译器自举是怎么回事。

首先需要知道两个东西:

  • 编译器是用来编译程序的,不过其实它就是在编译程序所使用的语言的语法语义啥的,那么简单来讲编译器就是用来编译语言的
  • 编译器本身也是用某一种编程语言写出来的,并且编译器也是需要先编译出来的

其实通过上边两个必备事项,你应该看得出来,这里边已经形成了一个结:编译器需要先被编译出来,不然它就没法编译其它东西(包括它自己),那这个编译器要怎么编译出来?

假设你现在写了一个高级语言 Xlang,那这个语言需要用什么编译器来编译呢?当然是使用编译 Xlang 的编译器,问题是现在并没有可以编译 Xlang 的编译器。

其实要实现这个编译器,并不一定要使用 Xlang 语言。所以可以先用其它已有语言来实现一个可以编译 Xlang 语言的编译器。而自举就是在这个基础上,使用已经可以编译的 Xlang 语言写一个编译器,然后用这个其它语言写的编译器把它编译出来,这样,一个 Xlang 语言写的编译器就出现了,而且它本身是可以编译 Xlang 语言的,当然也就可以编译"Xlang 写的编译器——也就是它自己"。

这个思想其实有点像两数互换位置的算法,必须借用一个第三者来作中间态,不然无法完成。

同样的逻辑回到 Git 自举上,可能意思就只是最开始实现 Git 需要使用其它版本控制工具来管理,等到 Git 功能开发完成,可以托管代码了,这时候把 Git 本身的源码托管到 Git 上。

这么看来,这个所谓的“Git 自举”,跟编译器自举的意思差得有点儿远,因为它完全不必要形成一个环——也完全没有结存在——因为 Git 的开发其实也可以不用版本控制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值