assembly 第一个C编译器是怎么写的?

ig9co6j1  于 2023-05-07  发布在  其他
关注(0)|答案(3)|浏览(163)

第一个C编译器是用C本身写的吗?那么,它是如何执行和编译的呢?或者,这个编译器是用汇编语言写的?

ep6jt1vc

ep6jt1vc1#

它在C语言历史的Dennis Ritchie's writeup中有很好的描述。
只给出他在那里写的东西的摘要,用他的文章来了解更精细的细节。C从BCPL语言开始,Ken Thomson有机会获得在通用电气635主机上运行的编译器。Thomson对BCPL不满意,他使用BCPL为B语言编写了一个编译器,这是超越BCPL的一个进化步骤,消除了BCPL中的一些技术问题。
他们使用B语言在PDP-7小型计算机上创建程序,尽管大多数程序都只是玩具程序,但这台机器的硬件能力非常有限。汤姆逊采取的一个重要步骤是用B本身重写B编译器。常见的 Bootstrap 步骤。
然后,通过一个名为NB(新B)的短暂中间步骤,该编译器逐渐被调整,开始类似于C。PDP-11小型计算机在这一步中发挥了重要作用,为他们提供了足够的空间来改进语言和编译器。

wfypjpf4

wfypjpf42#

第一个C编译器不是用C写的,通常在编写编译器时,我们使用汇编语言或其他编程语言,并且在第一次编译后,编译器通常会用其本机语言重写。
有很多编程语言最初是用C编写的,然后用它们的母语重写:例如Java,Ada ...

5f0d552i

5f0d552i3#

阅读Dennis里奇关于primevalC的注解表明,就像鸡和蛋一样,C是通过 Bootstrap 从一种先驱语言 * 沿着它自己的编译器 * 进化而来的。物种形成的时间尺度比家鸡快。
我们甚至可以看到编译器的源代码陷入了进化的混乱之中。注解链接到从磁带备份恢复的两个快照。这段代码也有been placed on github.这些快照构成了中间化石,早于K&R语法。Dennis对其中一盘磁带的描述显示,这是一个正在引导的结构体的冻结帧:
“prestruct-c”是编译器的一个副本,就在我开始改变它以使用结构本身之前。
换句话说,编译器已经扩展到支持结构体,但还没有使用它们。制作磁带备份的好时机...

相关问题