【问题标题】:How was the first ever language compiled第一种语言是如何编译的
【发布时间】:2018-08-23 04:32:46
【问题描述】:

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

【问题讨论】:

  • Stackoverflow 是一个分享特定编程问题并寻求社区其​​他成员指导的网站。
  • 您可以通过将字节压入内存来编写机器代码。不方便,但可以做到。
  • 手工编译。这是一个非常费力的过程。这些天的年轻人不知道我们必须忍受什么。 youtu.be/VAdlkunflRs

标签: compiler-construction bootstrapping


【解决方案1】:

让我们将其视为任何非 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

【讨论】:

  • 现在说得通了。谢谢!
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2011-01-04
  • 2012-06-26
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多