【发布时间】:2013-08-17 08:37:17
【问题描述】:
这个问题可能源于我对编译器的误解,但这里是……
可以在《K&R》第一版(第 xi 页)的前言中找到以下陈述:
操作系统、C 编译器以及基本上所有的 UNIX 应用程序(包括用于编写本书的所有软件)都是用 C 编写的。
(我的重点)
这是我不明白的:C 编译器在编译任何 C 代码之前不是必须先编译自己吗?如果那个 C 编译器是用 C 编写的,编译它不需要现有的 C 编译器吗?!
解决这个无限回归难题(或先有鸡还是先有蛋的问题)的唯一方法是,K&R 所指的用 C 语言编写的 C 编译器实际上是用已经存在的 C 编译器编译的,该编译器是用一种语言编写的除了 C。用 C 编写的 C 编译器随后取代了后者。
还是说我完全不在了?
【问题讨论】:
-
嗯,你从一个汇编或其他语言开始,一旦你有了它,就可以用它在 C 中制作一个,等等。
-
C 最初是用 B 编写的,它是一个精简的 BCPL,我相信它是一个精简的 Algol 60。 B 可能是用宏汇编器编写的。
标签: c compiler-construction kernighan-and-ritchie