程序员与编译器
1、编程工作的演进史
(1)CPU需要的只是1和0组成的二进制数据。
- 不管编程怎么变,最终编程得到的可执行二进制程序都是给CPU运行的。CPU需要的只是按照二进制1和0组成的数字(机器码)执行,CPU根本不关心这些二进制是怎么来的。
- 这些二进制可能是一个很厉害的程序员直接用1和0拼出来的;也可以是用汇编语言、C语言或java语言编写程序然后编译得到的;
- 编程工作的演进其实一直是在处理的:就是使用何种语言编写程序,然后如何把这种程序源代码转成二进制(编译器的发明)。
- CPU接收到一串01组成的序列后,如何达到工作目的是设计制造CPU的公司要考虑的事情,与软件工程师完全无关。
(2)早期的纸卡打孔编程者
- 最早期的时候,CPU也很简单,指令集很少,二进制位数也不多。那时候编译器也没被发明,编程语言也没被发明,那时候就是用二进制直接编程的。
(3)编程工作的第一次革命:由二进制机器码到汇编语言。
- 汇编语言的本质就是用一个符号来代替一串二进制。
- 用汇编语言编写的源程序不能直接给CPU运行,必须通过一个翻译过程,把源代码翻译成二进制序列才能给CPU。这个翻译的过程就叫汇编,执行翻译动作的就是汇编器。
(4)编程工作的第二次革命:由汇编语言到C语言。
- 汇编语言有一些不尽如人意的地方,譬如:没有可移植性。在这个CPU上写的汇编程序无法直接在另一个CPU上运行。因此汇编语言是和CPU一一对应的。
- 为了可移植性于是乎发明了高级语言,第一个高级语言就是C语言。C语言进一步靠近人的思维,以人的思维发明了很多CPU没有的东西,譬如数组,最终的目的就是降低编程难度。
- C语言编写的程序通过编译器、汇编器等的翻译后变成二进制然后给CPU运行。
(5)在C语言之上还有更高级语言,譬如:C++、Java、C#、bash等。越往上越靠近人的思维,越往上语言本身提供的封装越多,越往上编程难度越低、语言的掌握越容易。
2、程序员、编译器、CPU之间的关联
(1)CPU只认识二进制机器指令。
(2)人类的大脑本身不喜欢二进制而喜欢符号、文字,人类和机器之间天生有代沟,于是乎编程不容易。
(3)连接人(程序员)与机器(CPU)的桥梁:编译器
- 编译器降低了编程难度。每一种编程语言都有对应的编译器,这个编译器的作用就是把这种语言的源文件编译成可执行程序。
- 有了高级语言之后,我们程序员就不再关注二进制,而是编程语言的语法。
- 发明一门语言关键就在于发明它的编译器,yacc和lex工具就是用来发明编程语言的。
(4)高级语言与低级语言的差别:越高级的语言越靠近人类思维;越低级的语言越靠近机器的需要。
(5)像编译器一样思考,编程语言的语法就是编译器的习性。