Jas*_*S.P 50 c compiler-construction assembly
第一个C编译器是用C本身编写的吗?然后,它是如何执行和编译的?或者,这个编译器是用汇编语言编写的吗?
Han*_*ant 75
在Dennis Ritchie撰写的C语言历史中,它描述得很好.
只给出他在那里写的内容的摘要,使用他的文章获得更精细的细节.C以BCPL语言开头,Ken Thomson可以访问在General Electrics 635主框架上运行的编译器.对该语言不满意,Thomson使用BCPL为B语言编写了一个编译器,这是BCPL之外的一个进化步骤,它消除了BCPL中的一些技术问题.
他们使用B在他们的PDP-7小型机上创建程序,虽然它们大多数只是玩具程序,但机器的硬件功能非常有限.Thomson采取的一个重要步骤是在B本身中重写B编译器.一个常见的自举步骤.
然后通过称为NB(新B)的短暂中间步骤逐渐调整该编译器以开始类似于C. PDP-11小型计算机在该步骤中发挥了作用,为他们提供了足够的空间来改进语言和编译器.
小智 21
第一个C编译器不是用C编写的,通常在编写编译器时我们使用汇编语言或其他编程语言,并且通常在第一次编译之后,编译器会用它的本地语言重写.
有很多编程语言都是用C编写的,然后用他们的母语重写:例如Java,Ada ......
阅读丹尼斯·里奇 (Dennis Ritchie) 关于原始C的笔记表明,就像先有鸡和先有蛋一样,C通过引导从前驱语言及其自己的编译器演变而来。物种形成时间尺度比 Gallus gallusdomesticus 快。
甚至可以看到编译器源代码陷入了进化的混乱之中。该笔记链接到从磁带备份恢复的两个快照。这段代码也放到了github上。这些快照构成了中间化石,比 K&R 语法早了几年。Dennis 对其中一个磁带的描述表明,它是一个自举结构的冻结帧:
“prestruct-c”是编译器的副本,就在我开始将其更改为使用结构本身之前。
换句话说,编译器已被扩充以支持结构,但尚未使用它们。进行磁带备份的好时机...