1947年,ENIAC计算机的设计者之一约翰·莫奇利发表了一篇短文,探讨了一个耐人寻味的问题:如何将一个存储在磁带上的子程序,放置到内存中的其他位置,并仍然让它运行?这只是一个对实际问题的简单陈述,但其内部却隐藏着当今每位软件开发者都依赖的某些东西的种子。莫奇利当时描述的正是重定位和库搜索,这两个理念最终构成了链接器和加载器的基础。
早期的数字计算机没有汇编器,没有符号语言,当然也没有链接器。程序不过是一串数字操作码和字面内存地址的序列。如果程序员插入或删除了一条指令,后续的所有地址都必须手动重新计算。仅仅因为一个小的算术错误,数小时的工作就可能付诸东流。在这种条件下,可重用子程序的概念不仅是一种便利,更是一种挑战。一段代码无法轻易地从内存中的一个位置移动到另一个位置,因为其内部的每一个绝对地址都会是错误的。可重定位子程序的概念——即无需重写其地址即可重用的代码——在当时是一个全新的想法。
莫奇利的备忘录出现在EDVAC(ENIAC的继任者,也是首批采用存储程序概念的设计之一)的开发期间。与ENIAC需要为新任务重新布线不同,EDVAC将数据和指令都保存在内存中。这种新的灵活性带来了新的问题。如果一个程序可以被…