2020 年是 ALGOL 60 的 60 周年诞辰。ALGOL 60 为多种计算机编程语言奠定了基础。
The Register 网站采访了英国国家计算机博物馆的 Peter Onion 和 Andrew Herbert,进一步了解了穿孔磁带时代的美好往昔。
ALGOL 60 是 ALGOL 58 的继承者。ALGOL 58 于 1958 年问世,引入了代码块的概念(代码块使用 begin 和 end 包围起来)。不过,ALGOL 60 让结构化编程真正落地,并为 Pascal、C 语言、B 语言和 Simula 的出现打下了坚实基础。
前剑桥大学微软研究院主任 Herbert 说,“在 20 世纪 50 年代,大部分代码是机器或汇编代码”,每一台电脑都有自己的独特之处。第一代编程语言被称为“Autocode”,它们的存在是为了将一些问题(比如方程)编码并翻译成机器码,但不具备现今编程语言的大部分功能。更糟糕的是,它们的特性也不尽相同,导致系统的切换变得非常麻烦。
Onion 说,“有一种适用于 Elliott 803 机器的 Autocode,但它只支持简单的表达式,比如 A + B = C。如果你有一个复杂的方程,必须先把它分解成简单的二元运算。所以,程序员需要做很多工作”。
Herbert 说,“Fortran 是第一种真正用于科学和数学计算的编程语言”。它让人们相信,使用高级编程语言(当时人们认为它是高级语言,但以现代标准来衡量的话它们还相当原始)可以提高程序员的生产力”。
由于编译开销和编译器本身的低效,导致机器码仍然是性能之王。但是,对于那些从事科学工作的人来说,通过编写代码来解决实际问题才是他们更看重的。
Herbert 继续说道:“Fortran 更像是一种 Autocode。即使到了现在,在某些方面仍然是”。
Herbert 回忆说,国际信息处理联合会(IFIP)“有一大堆委员会成员专门研究与计算相关的标准和问题”。
有一个小组开始设计当时被称为“算法语言”的东西:一种用于编写算法的语言。1958 年,这种语言问世了,也就是“ALGOL 58”。然而,当工程师们开始为新系统开发编译器时,他们发现“有很多东西没有被考虑在内”。
于是就有了修订和变更。一份名为“The ALGOL Bulletin”的期刊翔实记录了参与者的辛劳历程,他们尝试着解决这门语言存在的问题和不足。
这个过程与今天的开源邮件组差不多,只是采用了纸质的形式。
最后,Herbert 说,“他们发布了 ALGOL 60 报告,为当时的编程语言工作奠定了基础”。
委员会成员承受着压力,而国际化问题也给他们造成了一些影响。美国人比较熟悉 Fortran,他们希望编程语言能够快速在计算机上运行起来,而欧洲人则比较理性一些,他们“对语言是否优雅有着近乎可怕的执着”。
“人们想了很多东西,比如结构化编程、数据结构和数据类型,尽管这些东西在今天看来是很自然的”。
为了解决不同系统和硬件之间的可移植性问题,也为了避免因计算机更新换代导致需要重写程序的痛苦,厂商们接受了这种语言,并在很多厂商中出现了变体。
磁带上的 ALGOL 60
然后,那些想要看到“HELLO WORLD”示例的人要失望了,因为这门语言的致命弱点是它缺乏标准的输入/输出能力。
Herbert 说,“委员会无法就输入/输出问题达成一致。他们决定把这个问题留给库去解决,而库取决于用户”。
Onion 补充说,“用户就是开发编译器的人”。
这在很大程度上影响到了厂商无关性,因为厂商会有自己的做法,于是在系统之间留下了大量不兼容的代码。ALGOL 60 中也有一些元素是开放性的,等于从一开始就做出了一些妥协。
在 ALGOL 演化的同时,Fortran 也在并行演化。Herbert 解释说,“Fortran 用户很喜欢 ALGOL 里的一些想法,并把它们带了过来”。几十年过去了,Fortran 仍然以科学计算为中心,而 ALGOL 则成了一种用于教授计算机科学思想的编程语言。
Herbert 说,“它在科学界被广泛采用,大多数大型机制造商都支持它”。
ALGOL 60 背后的一些团队继续开发这个项目,并推出了 ALGOL 68,“理清了 ALGOL 60 留下的所有模棱两可的东西”。
事实上,在 20 世纪 70 年代,对于那些学习计算机课程的人来说,这个是很难避免的。当时,Register 副主编 Richard Currie 的祖父也参与了 ALGOL 68-R 和 RS 的开发。
Herbert 笑着说,“它拥有世界上最奇异的输入输出系统”。
不幸的是,对于那些狂热的爱好者来说,它也有点像一条死胡同。尽管 ALGOL 68-R 在一段时间内被广泛应用于(特别是在英国)军事应用,但直到 20 世纪 70 年代才完全实现 ALGOL 68。
“The ALGOL Bulletin”的最后一期于 1988 年出版,编辑指出:“作为一种编程语言,ALGOL 68 非常稳定。那些了解它的好处的人非常喜欢它,其他人则忽视了它(甚至是误解)”。
ALGOL 60 的故事并没有随着它的命运一起终结,而是随着受它启发的其他语言延续了下来。ALGOL W,基于 Niklaus Wirth 和快速排序发明者 Tony Hoare 提出的 ALGOL X 提议,启发了 Wirth 的 Pascal 和 Modula-2,而 Pascal 的的影响一直延续到今天。
ALGOL 60 还对组合编程语言(Combined Programming Language,CPL)产生了重大影响。CPL 诞生于 20 世纪 60 年代,但历经了 10 年才得以全部实现。CPL 反过来又催生了 Basic CPL (BCPL),B 语言的祖先,而 B 语言又进一步发展成为 C 语言。
Tony Hoare 负责 ALGOL 60 在 Elliott 803(英国国家计算机博物馆仍然保留着这款机器)上的实现,它的编译和运行方式与现在的程序员所习惯的开发环境很不一样。
首先需要从纸带加载编译器,然后由磁带读取器读取 ALGOL 程序。Onion 说,“不管编译什么,都需要 30 秒到 15 或 20 分钟不等”。
编译完成之后,程序就可以自由地使用最初由编译器占用的空间。但是,下一个用户仍然需要重新加载编译器。不过程序可以留在内存中,也就是说可以同时运行多个程序。
Herbert 说,“这让计算机教学变得很方便,因为你会有很多学生,每个学生都有自己的纸带程序,你让机器加载 ALGOL 系统,运行程序,产生输出,然后让下一个学生运行他们的程序”。
纸带让编程多了一些专注。Onion 说,“当代码的修改和编译过程超过了 10 分钟,你会更专注于代码……”
英国国家计算机博物馆收藏了两台 Elliott 电脑,一台是 1962 年的 803B,另一台是 903。这两台电脑都还能运行,等到博物馆重新开放时人们就可以看到它们。
由 Onion 维护的 803B 有绘图仪功能和一些额外的输入/输出功能。
ALGOL 程序画的洛伦茨吸引子图
对于那些没有 Elliott 803 或 903 在手的人来说,还是有一些办法可以体验 ALGOL 60。
MARST可以将 ALGOL 60 翻译成 C 语言代码,或者你也可以通过模拟器来模拟 803。
你也可以尝试自己开发现一门代编程语言,但其中很可能会有来自 ALGOL 设计者们的想法。
原文链接:
https://www.theregister.co.uk/2020/05/15/algol_60_at_60
评论