Compiler construction 编译器是自托管的,有什么实际原因吗?

Compiler construction 编译器是自托管的,有什么实际原因吗?,compiler-construction,bootstrapping,Compiler Construction,Bootstrapping,如果引导语言中的编译器工作良好且可维护,为什么要更改它?例如,Go在1.5版中将其编译器重新编写为自托管,这造成了:当Go的目标是快速编译时,一个明显的危害 一个实际原因是社区。如果编译器是用同一种语言编写的,那么使用您的语言编程的人可能更喜欢使用编译器编程。如果我的编译器是Fortran/COBOL语言,并且它生成了Go,我不太可能吸引Go开发人员使用该编译器 另一个是构建链ie依赖项。如果您有一个用一种语言编写并生成另一种语言的编译器,那么当您满足于一种语言时,您需要编写两组测试。这也减少了

如果引导语言中的编译器工作良好且可维护,为什么要更改它?例如,Go在1.5版中将其编译器重新编写为自托管,这造成了:当Go的目标是快速编译时,一个明显的危害

一个实际原因是社区。如果编译器是用同一种语言编写的,那么使用您的语言编程的人可能更喜欢使用编译器编程。如果我的编译器是Fortran/COBOL语言,并且它生成了
Go
,我不太可能吸引Go开发人员使用该编译器

另一个是构建链ie依赖项。如果您有一个用一种语言编写并生成另一种语言的编译器,那么当您满足于一种语言时,您需要编写两组测试。这也减少了进入的障碍,即你不需要开发人员了解多个工具链等。精通两种语言以成为两种语言的合格编译器编写者是一项艰巨的工作,并缩小了潜在的帮助受众范围获得帮助对于大多数开源项目来说非常重要,任何增加潜在开发人员基础的东西都是一个明确的实际优势。

您还可以将测试列为一项附加好处。如果你已经编写了一个自托管编译器,那么该语言需要做很多事情来相对容易地(而不是拔牙)自托管ie文件IO、字符串操作、符号表、树和列表等。显然,如果没有这些,你可以活下来,但这会使编写编译器变得更加困难。这种人坐在“吃你自己的狗粮”营地里

这被认为是<代码>礼仪> <代码>,但我不认为这是一个非常实际的原因,除非你能证明它吸引开发人员或其他原因去做它,也许对这项成就感觉良好是一个实际的好处,你不太可能放弃它。 这里有一个有趣的话题

出于某些具体原因,请阅读Rob Pikes关于他们为什么将Go编译器移至的幻灯片。幻灯片中的结论是:

  • 摆脱C语言对这个项目来说是一个巨大的进步
  • 代码更干净、可测试、可盈利、更易于操作
  • 新的统一工具链减少了代码大小,提高了可维护性。 灵活的工具链,可移植性仍然至关重要

  • 根据语言的不同,您从中获得的好处可能会有所不同。

    任何外部工具都有其自身的版本控制问题,社区效应非常明显,不仅在开发人员中,在开发人员之外的圈子中更是如此。知识渊博的用户突然需要双重(或三重)语言技能来隔离bug并创建完整的报告。(如果运行库是用另一种语言编写的,则为三倍)