golang Bootstrapping

tianyafu1年前 ⋅ 864 阅读

Go 编译器最初是用 C 编写的,当它达到一定的成熟度后,创建者正在研究如何在 Go 中引导编译器,以便该语言可以继承 Go 的一些优点并能够做一些事情如果仍然基于 C 是不可能的。

该方法在理论上非常出色,有点像这样:

  1. 使用简单的 yacc 解析器解析 C 代码
  2. 生成解析树。调整树以修复和重写 C-isms
  3. 遍历解析树并输出对应的Go代码
  4. 通过与基于 C 的 Go 编译器进行比较来编译 Go 代码并验证输出
  5. 重复直到两个编译器生成相同的输出

需要注意的是,步骤 1 中的 C 解析器是一个非常专业的解析器,它是根据原始作者所遵循的非常具体的方言构建的,而不是打算成为一个更大的问题的通用转换器。此外,这不是一个 100% 自动的过程,仍然有一些代码需要手动滚动,但这使得转换工作更容易,否则这将是一项乏味的工作。

一旦转换为 Go,就可以进行重构、分析和重组的过程,以使用 Go 工具链改进代码库。

这就是它的完成方式。

https://weeraman.com/bootstrapping-go-ee5633ce3329

很多语言包括go,rust都有自举(Bootstrapping)功能,自己编译自己

go语言是谷歌发明的一门编程语言,但是go是自己写出的自己,

鸡生蛋蛋生鸡?这是千古题,好像没有答案把,但是go给出了自己的答案:鸡生鸡

1. c和汇编写出go的编译器

2. 编译器写出go语言,此时的go语言半身是c、汇编,半身是go,混血儿

3. go把c、汇编的血统全部移除,此时是纯go血统

4. 纯go血统的go,写出go编译器

5. go编译器写出go,到此完成了,鸡生鸡

全部评论: 0

    相关推荐