compilation - 编译器如何编译自己?

标签 compilation

我正在网站 http://coffeescript.org/ 上研究 CoffeeScript ,并且它有文本

The CoffeeScript compiler is itself written in CoffeeScript

编译器如何编译自己,或者这个语句是什么意思?

最佳答案

编译器的第一版不能由特定于它的编程语言机器生成;你的困惑是可以理解的。第一个编译器可以构建具有更多语言功能的更高版本的编译器(用新语言的第一个版本重写源代码)。然后该版本可以编译下一个编译器,依此类推。这是一个例子:

  1. 第一个 CoffeeScript 编译器是用 Ruby 编写的,生成了 CoffeeScript 的第 1 版
  2. CS编译器的源代码是用CoffeeScript 1重写的
  3. 原始 CS 编译器将新代码(用 CS 1 编写)编译为编译器版本 2
  4. 对编译器源代码进行了更改以添加新的语言功能
  5. 第二个CS编译器(第一个用CS编写的编译器)将修改后的新源代码编译为编译器版本3
  6. 每次迭代重复步骤 4 和 5

注意:我不确定 CoffeeScript 版本的具体编号方式,这只是一个示例。

这个过程通常被称为bootstrapping 。引导编译器的另一个示例是 rustc,它是 Rust language 的编译器。 .

关于compilation - 编译器如何编译自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005656/

相关文章:

java - 使用 Java 泛型可能会挂起编译器

java - 如何将依赖jar文件包含到jar文件中

c++ - VS2010 Beta 1 上的基本 C++ 应用程序出现多个编译错误

java - 从 Java 程序中编译 .java 文件?

java - Java中静态绑定(bind)和动态绑定(bind)的问题

c++ - 从 linux 终端使用外部库编译 c++ 文件

c++ - 用于提高中间浮点计算精度的编译器标志

typescript - webpack angular2 编译报错

compiler-construction - 如何将源代码转换为 1's and 0' s?

php - 共享 Apache 2.0 模块与静态 Apache 模块