5

这是一个简单的问题。如果编译 C 编译器需要一个 C 编译器......也许直接用汇编代码?也许内核提供了将 C 转换为汇编程序并创建升级基础设施的基本工具?这也是一个愚蠢的问题,但我真的很感兴趣如何从 0 设计一个操作系统(不是我)来与 CPU 和内存交互。

4

2 回答 2

9

自举

如果您想查找它,这来自短语“通过您的引导来提升自己”。自举是一个简单的过程,但需要大量工作。

  1. 用另一种语言编写 C 编译器。

  2. 用 C 编写一个 C 编译器。

  3. 使用步骤#1 中的编译器来编译步骤#2 中的编译器。

其他一些编译器必须引导,而不仅仅是 C 的编译器。例如,必须使用GHC来编译自身。

请注意,仅当以下两个都为真时,才需要引导:

  1. 您正在发明一种新语言,因此没有现有的编译器。

  2. 您想用您正在编译的语言编写编译器。

这与操作系统无关。如果您正在设计一个操作系统,那么您已经有足够的工作要做了。如果您的新操作系统还没有 C 编译器,您可以从不同的操作系统交叉编译编译器。工作量要少得多——可能是几个小时或几天,而不是几个月或几年。

于 2013-02-05T01:42:08.467 回答
3

听起来这是Tiny C 编译器tcc( http://bellard.org/tcc/ ) 的任务。

它是我所知道的最小的 C 编译器,一旦你移植它就可以编译一个更大的编译器,并且有许多关于如何将它移植到自定义系统的指南。

于 2013-02-05T01:40:41.427 回答