有史以来第一种语言是如何编译的
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
这是先有鸡还是先有蛋的问题。引导 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