首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么新语言版本通常使用早期编译器版本来引导编译器?

为什么新语言版本通常使用早期编译器版本来引导编译器?
EN

Software Engineering用户
提问于 2019-05-09 17:28:23
回答 1查看 382关注 0票数 0

维基百科描述了具有以下属性的引导编译器:

  • 编译器的初始核心版本
  • 后续编译器版本要使用的语言的最小子集。

我在网上读到的所有东西都假定初始子集版本会被引导,但难道不可能引导最近的编译器版本(使用最新发布的二进制文件)吗?

这难道不有利于编译器编写者吗?:能够教唆新特性。

虽然我不知道有一种使用最新版本作为引导程序的语言,但我确信它们可能存在;我只是想知道是否有充分的理由不这样做。谢谢!

作为一个具体的例子,Go编程语言文档解释了默认的引导编译器是版本1.4。因此,最新的Go编译器代码不能在1.4之后添加新特性(即:输入别名),但可能只在测试中添加。

更新:对我的问题的附加解释,如果一个bug需要在核心编译器1.4中修复,并且这个bug可能会影响到所有的后续版本,那么它们需要再次编译。根据引导链的发生方式,可能有不同的含义。是否有理由使用这样或那样的方式?

  • 选项A 1个级:1.5用1.4编译,1.6用1.4编译
  • 选项B N级:1.5用1.4编译,1.6用1.5编译(用1.4编译)

(1.4是核心版本)

EN

回答 1

Software Engineering用户

发布于 2019-05-09 18:12:41

想一想为什么存在引导编译器。需要创建可执行代码的高级语言需要一些可以使用的东西才能开始。当你从头开始的时候,你有几个选择:

  • 使用不相关的语言创建编译器。
  • 生成足够的编译器,以便使用自己的语言生成真正的编译器。

我已经看到了这两种方法的使用,特别是如果我们谈论的是运行在通用运行时平台上的语言,比如Java运行时或公共语言运行时(即dotnet)。然而,许多编程语言作者更喜欢他们创建的语言。

创建引导编译器实际上是一个困难的问题。你需要足够多的创造,这样你就可以有工作了。通常情况下,需要多个级别的引导。使用这种语言的旧版本有几个原因:

  • 试图在一个更原始的引导编译器中实现高级语言编译器功能真的很难。
  • 一个鞋带的存在只是为了让你走。引导编译器可以构建真正的编译器,那么为什么要返回并更改它呢?
  • 你不需要它(YAGNI)。我们的想法是构建足够多的代码,这样就可以构建完整的编译器了。
  • 一旦拥有完整的编译器,就可以构建任何东西。
票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/391675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档