Categories
程式開發

编程语言的老祖宗ALGOL 60诞辰60周年


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诞辰60周年 1

磁带上的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 60诞辰60周年 2

ALGOL程序画的洛伦茨吸引子图

对于那些没有Elliott 803或903在手的人来说,还是有一些办法可以体验ALGOL 60。

MARST可以将ALGOL 60翻译成C语言代码,或者你也可以通过模拟器来模拟803。

你也可以尝试自己开发现一门代编程语言,但其中很可能会有来自ALGOL设计者们的想法。

原文链接:

https://www.theregister.co.uk/2020/05/15/algol_60_at_60