【创世纪厅】
1958年,Mercury Autocode 自动编码系统正式问世。由Ferranti主导开发,面向大型机平台用户。
英国首款高级编程语言,让程序员摆脱机器码束缚。
技术特色:高级语言、编译器、英国计算机。
影响力评估:技术维度 7/10,商业维度 5/10,文化维度 5/10,用户维度 4/10。
作为创世纪厅的经典代表,Mercury Autocode 自动编码系统在软件发展史上留下了深刻的印记。
英国首款高级编程语言,让程序员摆脱机器码束缚。
【创世纪厅】
1958年,Mercury Autocode 自动编码系统正式问世。由Ferranti主导开发,面向大型机平台用户。
英国首款高级编程语言,让程序员摆脱机器码束缚。
技术特色:高级语言、编译器、英国计算机。
影响力评估:技术维度 7/10,商业维度 5/10,文化维度 5/10,用户维度 4/10。
作为创世纪厅的经典代表,Mercury Autocode 自动编码系统在软件发展史上留下了深刻的印记。
1958年,当Ferranti公司推出Mercury Autocode自动编码系统时,英国曼彻斯特大学的计算实验室里,程序员们正经历着一场静默的革命。在此之前,编写程序意味着在穿孔纸带上用二进制或八进制机器码敲下一串串指令,每个操作码都要对照手册手动查表,每个内存地址都要精确计算。这种工作不仅枯燥、容易出错,而且让数学家和工程师们望而却步,因为他们的时间本该花在解决科学问题上,而不是与机器码搏斗。
Mercury Autocode的出现,就像在黑暗的隧道里点亮了一盏灯。它的设计者布鲁克教授——全名雷金纳德·布鲁克(R. A. Brooker),当时是曼彻斯特大学计算机实验室的讲师——敏锐地察觉到了程序员们的困境。他曾在剑桥大学数学实验室工作过,参与过EDSAC计算机的早期编程,深知手工编码的痛点。1956年,当Ferranti公司委托曼彻斯特大学为即将推出的Mercury计算机设计一种更高效的编程方式时,布鲁克抓住了这个机会。
Mercury计算机是Ferranti公司继Mark I之后的新一代大型科学计算设备,主频约1.5MHz,内存最初只有4K字(每字48比特),后来扩展到8K字。它的设计初衷是服务于原子能研究、弹道计算和科学工程领域。在那个晶体管刚刚开始取代真空管的年代,Mercury计算机仍然使用真空管和磁芯存储器,体积庞大,功耗惊人。但它的计算能力在当时是顶尖的,英国原子能研究机构(AERE)和剑桥大学数学实验室都订购了这台机器。
布鲁克面临的挑战是:如何在有限的硬件资源下,创建一种能让数学家、物理学家和工程师直接编写数学公式的语言。他提出的解决方案被称为“Autocode”——自动编码系统。这个名称本身就暗示了它的使命:让机器自动完成代码编写中的繁琐部分。Mercury Autocode的设计灵感部分来自1949年剑桥大学开发的EDSAC初始指令系统,但布鲁克做了根本性的创新:他引入了变量概念,允许程序员使用类似数学表达式的符号,比如“X = A + B * C”,而不再需要手工处理寄存器分配和内存地址。
最令人惊叹的是Mercury Autocode的编译器。在1958年,编译器这个概念本身还很新鲜——第一个FORTRAN编译器1957年才刚在IBM 704上运行,而ALGOL 58的标准还在制定中。布鲁克的编译器只用了约4KB内存,这听起来小得不可思议,但考虑到Mercury计算机的总内存也只有4K字,这个编译器几乎占据了整个可用内存的十分之一。它的设计极其精巧:编译器采用两遍扫描的方式,第一遍将源代码转换为中间表示,第二遍生成机器码。它能自动管理寄存器的分配,决定哪些变量应该放在快速寄存器中,哪些应该放在主存中,这在当时是革命性的功能——程序员完全不需要知道底层硬件细节。
Mercury Autocode的语法设计也很有特色。它使用类似数学的表达式,但为了适应穿孔纸带输入的限制,采用了一些特殊符号。例如,它使用“.”表示赋值,使用“*”表示乘法,使用“/”表示除法。控制流方面,它提供了条件跳转和循环结构,但形式比较原始。程序员可以定义子程序(类似函数),但参数传递机制比较有限。尽管如此,对于习惯了机器码的程序员来说,Mercury Autocode已经是一个巨大的进步。一位当时在剑桥大学使用Mercury计算机的科学家回忆说:“第一次用Autocode写出‘A = B + C’并看到它正确执行时,我感觉就像在黑暗中看到了光明。”
Mercury Autocode的早期版本在1958年正式发布,但它的开发过程并不平坦。布鲁克和他在曼彻斯特大的团队(包括几位研究生)在调试编译器时遇到了无数问题。有一次,编译器在生成代码时错误地覆盖了自身,导致整个系统崩溃。团队花了整整一周才找到原因:一个寄存器分配算法中的边界条件错误。布鲁克后来在回忆录中写道:“调试Autocode编译器教会了我们关于编译原理的一切,因为几乎每个经典错误我们都犯过。”
尽管有这些早期困难,Mercury Autocode还是迅速在英国的科学计算界流行起来。1960年代初,剑桥大学数学实验室的Mercury计算机每天运行Autocode程序的时间超过12小时。英国原子能研究机构在哈维尔(Harwell)的Mercury计算机也大量使用Autocode进行核反应堆模拟和中子扩散计算。当时的一位用户回忆:“Autocode让我们的生产率提高了至少10倍。以前写一个中子输运程序需要三周,现在三天就完成了。”
Mercury Autocode的成功还体现在它培养了一代英国计算机科学家。曼彻斯特大学和剑桥大学的许多学生通过Autocode接触到了高级编程的概念。其中一些人后来成为了ALGOL和FORTRAN标准委员会的成员,将Autocode的设计经验带到了国际舞台上。例如,参与Mercury Autocode开发的彼得·兰丁(Peter Landin)后来提出了著名的“SECD机”概念,对函数式编程语言产生了深远影响。
然而,Mercury Autocode并非没有缺点。它的变量名长度有限(通常只有单个字母或字母加数字),数组处理能力很弱,而且没有浮点数的自动类型转换。这些限制部分源于Mercury计算机的硬件设计——它的字长只有48比特,而且指令集对浮点运算的支持有限。更重要的是,Mercury Autocode没有像FORTRAN那样得到IBM的强力推广,也没有像ALGOL那样成为学术标准。随着1960年代中期IBM System/360的推出和FORTRAN的标准化,Mercury Autocode逐渐退出了历史舞台。
但Mercury Autocode的遗产远不止于此。它证明了高级语言可以在资源极其有限的计算机上实现,这为后来的嵌入式系统和微型计算机编程语言提供了宝贵经验。它的“自动编码”思想——即让编译器自动处理底层细节——成为了现代编程语言的基石。今天,当我们用Python写一行“x = y + z”时,我们正在享受布鲁克教授在1958年开创的便利。
在曼彻斯特大学计算机科学系的走廊里,至今还保留着一台Ferranti Mercury计算机的复制品,旁边陈列着原始的Mercury Autocode手册。手册的扉页上写着布鲁克的一句话:“编程应该像数学一样自然。”这句话虽然简单,却概括了整个Autocode运动的精髓。从Mercury Autocode到ALGOL,从Pascal到C,从Java到Python,每一代新语言都在朝着这个目标迈进。
值得注意的是,Mercury Autocode的“自动编码”概念在当时并非唯一。几乎同一时期,苏联的安德烈·叶尔绍夫(Andrey Ershov)正在开发PP-1语言,美国的约翰·巴克斯(John Backus)团队在IBM 704上实现了FORTRAN。但Mercury Autocode的独特之处在于它的极简主义设计——用最小的资源实现最大的抽象。这种设计哲学在后来的LISP、APL和Smalltalk等语言中得到了延续,成为了计算机科学中“优雅即力量”这一理念的早期体现。
如果你今天走进曼彻斯特大学的老计算机实验室,想象一下1958年的场景:穿孔纸带在电传打字机上沙沙作响,真空管在机架上发出暖黄色的光芒,程序员们围在Mercury计算机前,第一次看到自己用“X = (A + B) * C”写出的程序正确运行。那一刻的激动,或许就是科技史上最动人的瞬间之一。Mercury Autocode作为英国首款高级编程语言,不仅解放了程序员,更开启了一个全新的时代——在这个时代里,人类可以用数学的语言与机器对话。
对技术发展和工程实践的推动程度
对商业模式和市场格局的影响深度
在科技文化和社会层面的持久影响力
用户群体的广度和普及程度