有史以来第一种语言是如何编译的

How was the first ever language compiled

这是先有鸡还是先有蛋的问题。引导 X 语言编译器的一种解决方案是使用 Y 语言,但是 Y 语言的编译器必须先编译怎么办?!如果你一直追溯到没有编译器存在的时间,那么第一个编译器是如何能够自我编译的?请使用高级隐喻来帮助理解。

让我们把它当作一个编译器,用于除 C 之外的任何高级语言 可以写成C1

所以我们不妨问:如果我有电脑但没有编译器,而我想要一个C编译器, 我怎样才能制作一个?

你可以在 assembly language 中编写 C 编译器 你的电脑,假设你有一个 assembler 对于那台电脑。

在实践中,这将是非常困难的。更明智的做法是用汇编代码编写, 比汇编器更具表现力和功能的中间语言编译器, 然后用它来写一个更具表现力和更强大的……直到你 编写了一个 C 编译器。

你的每一个越来越强大的编译器都是一个翻译程序 它的源语言(你,作为发明者,已经定义)到汇编中 您计算机的语言,然后调用汇编程序(您已经拥有) 将汇编代码翻译成您计算机的机器代码2.

如果你连汇编器都没有怎么办?

那你得在你的电脑machine code上写一个汇编程序。写作 用机器代码从头开始的复杂程序可能是现在还没有人拥有的东西 排骨做。但是在任何人用机器代码编写汇编程序之前 所有程序都必须用机器代码编写。第一个汇编程序被开发出来 在 late 1940s。 对于你的编译器,你最好迭代地开发你的汇编器:首先 一个基本的,用机器代码编写的;下一个更强大的,用 最基本的...

计算机的机器码是CPU的母语,所以不用再翻译了 需要将其转换为可执行代码。您只需要以某种方式加载组成 将机器代码程序放入内存区域并让处理器加载指令 初始地址:那么电脑就是运行程序

第一个 C 编译器的创建与上文所述大致相同。 The Development of the C Language 是语言发明者记录的历史,Dennis Ritchie


[1] 历史上当然有几种主要的高级语言 编译器早于 C, ~1969-73:

[2] 对于现代编译器来说,这是一个很大的简化。了解 Intermediate Representation 看看,例如The Conceptual Structure of GCC