0.机器语言与译码器
详见。
1.汇编语言与编译器/ISA
详见。
2.C/C++语言与编译器
高级语言只是文本,文本用来看的,没有执行能力,也可以屏蔽具体硬件实现,做到不依赖于任何特定的计算机。
高级语言方便了人类之间交流,但对于编译程序作者是一个很大的挑战。
最初的语言就是几个符号,所以最初的编译器肯定是简单粗糙的,最初的编译器肯定也无法变异今天的C语言。
编译器和语言是配套的,随着符号的越来越多,不断地去优化升级这个编译器。
2.1 C编译器与汇编编译器关系
gcc,内部要调用汇编器来完成汇编语言到机器码的翻译。
因为已有汇编语言编译器,汇编器已经无比健壮,那何必浪费这个资源不用,自己非要把c语言直接翻译成机器码呢,
毕竟将c直接变成机器码这个难度比将c语言翻译为汇编语言大多了,这属于重新造轮子的行为。
参考:https://baijiahao.baidu.com/s?id=1590200878691044278&wfr=spider&for=pc 程序是用编程语言写的,编译器也是程序,先有编译器还是编程语言
2.2 C语言发展
2.2.1 C语言发育第一阶段:科学计算
1958,ALGOL (ALGOrithmic Language)算法语言,首批高级语言。晶体管时代,由于ALGOL语句和普通语言表达式接近。
1963年,CPL是英国剑桥大学在ALGOL 60 (首批高级语言)的基础上提出。
1967年,BCPL由剑桥大学的Matin Richards在CPL语言上改进而来。
2.2.2 C语言发育第二阶段:小型化
1969年,B语言由贝尔实验室的Ken Thompson在Dennis Ritchie的支持下,删除BCPL非必备的组件以便能小型计算机上运行。
1970年,Ken用B语言在PDP-7上写出了UNIX的第一个版本,
1971年,C语言由贝尔实验室Dennis Ritchie在B语言的基础上设计。
1973年,Ken和Dennis 在用C重写Unix。
2.2.3 C语言移植性
1977年,Dennis 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
机器语言和汇编语言都不具有移植性,为