十、程序员和编译器之间的暧昧
10.1.1 CPU需要的只是1和0组成的二进制数据
(1)不管编程怎么变,最终编程得到的可执行二进制程序都是给CPU运行的。CPU需要的只是按照CPU设计时的规律(机器指令)排布的一串二进制1和0组成的数字(机器码),CPU根本不关心这些二进制是怎么来的。
(2)这些二进制可能是一个很厉害的程序员直接用1和0拼出来的,也可以是用汇编语言编写最终编译得到的;也可以是用C语言编写最终编译得到的;也可以是用Java、C#、php、bash等语言编写然后解释得到的;
(3)编程工作的演进其实一直是在处理上一个层次段落,就是使用何种语言编写程序(用某种语言进行编程),然后如何把这种程序源代码转成二进制(编译器的发明)。
(4)CPU接收到一串1010序列后如何工作达到目的,这就是设计制造CPU的公司要考虑的事情了,与软件工程师完全无关。
10.1.2 早期的纸卡打孔编程者
自己去了解;
10.1.3 编程工作的第一次革命:由二进制机器码到汇编语言
(1)用汇编语言编写的源程序不能直接给CPU运行,必须通过一个翻译过程,把源代码翻译成二进制序列才能给CPU。这个翻译的过程就叫汇编,执行翻译动作的就是汇编器。
10.1.4 编程工作的第二次革命:由汇编语言到C语言
(1)汇编语言也有一些不如人意的地方,譬如:没有可移植性。在这个CPU上写的汇编程序无法直接在另一个CPU上运行。因此汇编语言是和CPU一一对应的。
(2)为了可移植性于是乎发明了高级语言。第一个高级语言就是C语言。C语言进一步靠近人的思维,为人的思维发明了很多CPU没有的东西,譬如数组。最终的目的就是降低编程难度,让高级语言更接近人的思维,然后通过汇编器、汇编器等的翻译将这些源代码变成二进制然后给CPU运行。
10.1.5 革命无穷尽,层次变更多
(1)在C语言质上还有更高级语言,譬如:C++、Java、C#、bash等。越往上越靠近人的思维,越往上语言本身提供的封装越多,越往上编程难度越低、语言的掌握越容易。