我就按照自己理解,继续来说说代码是怎么运行的,编译器及链接器又是什么。
为什么现代的程序编写方式,会是今天这样独特的“工作机制”。
三.链接器的概念
自然,程序的规模和复杂程度也提高了一个层次。
子程序的概念开始出现,严格说这时期还没有函数的概念。
比如使用汇编语言,就有了专门的子程序技术。
同时,面向过程的概念也随之出现,古老一些的编程书籍,子程序=过程,它们的含义相同。
这个时期,程序编写的分工合作机制,在第一次雏形的基础上,有了进一步改进。
不同的程序员分别开发一个大程序的局部,最后把这些局部的"子程序"拼接在一起,就形成了完整的可执行程序。
链接器就是在这种背景下诞生的,它同样是一个程序,由天才们开发完成。帮助人们从“手工拼接”转换为“自动拼接"。
在实际开发中,程序的开发者可能互相认识,也可能根本人生一辈子都不认识对方,他们也许来自不同的国家,链接器的概念有了扩展。
显而易见,程序员的工作强度又下降了,他们可以更容易完成程序的编写。
四. 目标文件的概念
有了链接器之后,人们发现直接从源代码到机器码,不利于分工合作的子程序模式,需要有一个“中转”,目标文件由此诞生。
因为子程序的开发模式,要求每一个独立部分都不是完整的。
因此“绕远”成目标文件,最后再“拼接”,更符合分工合作的开发模式。
目标文件,我个人觉得称为“阶段性目标文件"更合适。
目标文件已经不是文本文件了,它的内容是机器码。
既然是机器码,cpu就能识别并执行,为什么不能直接执行目标文件呢?
大部分编程书籍上都写的执行"exe"文件。
实际上,目标文件可以被执行(需要一些技巧), 它是为了区分最后那个完整的程序,而人为规定的。
因为从概念上要求它不完整。
注意,我们可以编写仅有一个目标文件的完整程序,就是把所有工作放在一起。
这样的程序肯定可以运行,但它违背了子程序模式,或者说违背了过程模式。
这样的程序也不容易修改扩展,难以重复利用。
此时的流程图已经接近现代: