诞生于穿孔纸带时期的语言,ALGOL 60今年60岁了

选自theregister
作者:RichardSpeed
机器之心编译
参与:Panda
「诞生于穿孔纸带时代的古老编程语言ALGOL60已经问世60年 。 而在当今很多编程语言中 , 你仍能看到它的影子 。
ALGOL , 为算法语言(ALGOrithmicLanguage)的缩写 , 是计算机发展史上首批产生的高级程式语言家族 。 当时还是晶体管计算机流行的时代 , 由于ALGOL语句和普通语言表达式接近 , 更适于数值计算 , 所以ALGOL多用于科学计算机 。
ALGOL60是指1960年问世的ALGOrithmicLanguage , 这种编程语言影响了之后的CPL、BCPL、B语言、Pascal、Simula、C语言 , 对程序设计领域具有很强的影响力 。 今年 , 这门古老的语言已经60岁了 , 英国科技媒体TheRegister近日走进英国国家计算博物馆 , 带我们回顾了这门语言的发展故事 。
诞生于穿孔纸带时期的语言,ALGOL 60今年60岁了
文章图片
拉夫堡文法学校的Elliott803计算机 , 1976年
60年前 , ALGOL60奠定了多种计算机语言的基础 。
在那个依赖穿孔纸带的计算机时代 , ALGOL60究竟发挥着怎样的价值?英国国家计算博物馆的PeterOnion和AndrewHerbert将带领我们重温那个年代的故事 。
ALGOL60是ALGOL58语言的后继语言(ALGOL58于1958年问世) 。 ALGOL58引入了代码块的概念(并使用begin和end对来分割) , 而ALGOL60真正开始使用结构化编程并将其发扬光大 , 后来的Pascal和C , 以及B和Simula等都采用了类似的设计 。
「1950年代 , 大部分代码最初都是用机器码或汇编代码写的 。 」微软剑桥研究院前院长AndrewHerbert说 , 每台计算机都有自己独特的代码特点 。 第一代语言中有一种名为Autocode , 是为方程等编码问题而设计的 , 然后用该语言写的代码会被转译为机器码 。 不过与如今的语言不同 , 该语言并没有很多花哨的功能 。 更糟糕的是 , 某些Autocode语言具备的某种功能另一些Autocode语言却没有 , 使得开发者难以从一个系统转向另一个系统 。
Onion说:「有一种用于Elliott803的Autocode , 但它仅支持A+B=C这样的表达式 , 所以如果你的方程很复杂 , 那么你就必须将其分解为不同的单个二元运算 。 因此那时的程序员还是需要做大量艰辛的工作 。 」
Herbert表示:「Fortran是首个真正能用于科学和数值工作的编程语言 。 」这使人们相信 , 使用高级语言(那时候他们是这么称呼的 , 尽管这些语言以现在的标准看还比较原始)能提升程序员的生产力 。
但是 , 由于这些语言在编译方面需要额外的成本 , 而且当时的编译器本身又很低效 , 因此机器码在性能方面仍更占优势 。 不过对于科研工作而言 , 性能并不是最高需求;如果只需敲一些代码就能求解问题 , 然后再钻研下一问题 , 这当然是再好不过了 。
Herbert继续说:「Fortran更像是Autocode 。 现在在某种程度上仍然如此!而且很多人认为它还能做得更好 。 」
国际信息处理联合会(IFIP)的一个团队开始设计后来被称为「算法语言」(AlgorithmicLanguage)的ALGOL , 即用于编写算法的语言 。 1958年 , 他们的成果面世 , 这就是ALGOL58 。 Herbert说 , 但是正当工程师开始为这个新系统创建编译器时 , 他们发现「所有的事情都还没被真正想清楚和研究透彻 。 」
因此出现了各种改版和修订 。 一个名叫《TheALGOLBulletin》的公告详细记录了这个艰辛的历程以及他们解决或尝试解决的问题和缺点 。
与如今的开源邮件列表不同 , 当时这个过程是以纸质形式进行的 。
最后 , 他们发布了「ALGOL60报告」 , 而这也成为后来每个人进一步开发的根基 。
当时IFIP的这些委员会承受了很大的压力 , 还因为各个国家的不同方法而倍感痛苦 。 美国方面的Fortran经验很丰富 , 希望得到的成果能在他们的计算机上快速应用;而欧洲人则更理智 , Herbert笑道 , 「他们还考虑了这门语言的美观和优雅程度 。 」
他补充道:「当时人们想出一些新思路 , 而现在我们已经觉得这些思路理所当然了 , 比如结构化编程 。 」
这门语言受到了供应商的欢迎 , 因为程序员可以更轻松地在不同代际的硬件设备上移植系统和代码 , 而不必在每次计算机更新换代时都重写各种程序 。 」
诞生于穿孔纸带时期的语言,ALGOL 60今年60岁了
文章图片
写在穿孔纸带上的ALGOL60
不过 , ALGOL60可没法用来简单地编写出「HELLOWORLD」程序示例 。 这门语言有一个致命缺点:缺乏标准的输入/输出功能 , 这一缺点激励了后来很多语言的创新 。
Herbert说:「委员会无法在输入/输出方面达成共识 。 他们最后决定将其留到软件库中解决 , 而这个软件库取决于用户 。 」
Onion补充说:「在这里 , 用户就是指编译器作者 。 」
那就没办法了 。 遗漏的这部分只能靠供应商自己解决 , 而生产商自然更偏爱自己的方案 , 因此最后很多不同系统之间的代码都不兼容 。 ALGOL60还有一些没有具体定义的元素 , 因此一开始就具备一定的妥协性 。
在ALGOL开始应用之后 , Fortran的发展仍在继续 。 Herbert说:「Fortran世界的人看到ALGOL中有他们喜欢的思路 , 就直接将其移植了过去 。 」几十年后 , Fortran依然处于科学计算的中心 , 而ALGOL则更倾向于是一种学术语言 , 用于教授计算机科学的思想 。 」
Herbert表示:「ALGOL在科研社区得到了广泛应用 , 大多数大型机制造商都支持它 。 」
ALGOL60背后的某些团队继续研发 , 后来发布了ALGOL68 。 正如Herbert所说的那样 , ALGOL68解决了ALGOL60中含混未定的问题 。
实际上 , 在上世纪70年代的计算机科学课程中 , 这门语言基本上是难以回避的 。
Herbert笑道:「它拥有世界上最奇特的输入/输出系统 。 」
但对于喜爱这门语言的人来说 , 很不幸它走到了末路 。 尽管有一段时间ALGOL68-R在军事应用中得到了广泛的使用(尤其是英国) , 但直到70年代ALGOL68的完整实现版本才出现 。
《TheALGOLBulletin》的最后版本发布于1988年 , 编辑在其中写道:「ALGOL68是一门非常稳定的语言 。 了解它的好处和优势的人仍在使用和热爱它 , 而其他人则无视(或误解)了它 。 」
ALGOL60本身的故事并不是这门语言的最终命运 , 它还启发了其它很多语言 。 NiklausWirth和QuickSort的创造者TonyHoare基于ALGOLX提案开发的ALGOLW后来还催生了Wirth的Pascal与Modula-2 。 而Pascal的影响至今仍在持续 。
ALGOL60也极大地影响了1960年代开发的组合编程语言(CombinedProgrammingLanguage/CPL) , 但这门语言直到下个十年才得以实现 。 后来 , CPL又催生了BasicCPL(BCPL) , 进而又带来了B语言 。 B语言后来又进一步发展成C语言 。
TonyHoare负责在Elliott803计算机上开发ALGOL60的实现版本 , 这个实例至今仍可在英国国家计算博物馆的机器上运行 , 不过在该硬件上编译和运行程序的方式与如今程序员所熟悉的开发环境有所不同 。
首先 , 编译器必须用穿孔纸带载入程序 。 然后 , ALGOL程序本身会被送入纸带读取器 。 Onion表示:「这个过程有点任意性 , 编译耗时从30秒到15-20分钟不等 。 」
视频:https://www.youtube.com/watch?v=AIxZ1i8pvZI
编译完成后 , 程序可以开始使用之前由编译器占据的空间 。 不过做这种事并不讨喜 , 因为下个用户又必须重新载入编译器才行 。 将其保留在内存中意味着可以运行多个程序 。
Herbert表示:「这在教学方面很受欢迎 , 因为你可以让学生排队使用他们写有程序的穿孔纸带 。 你只需要走到机器旁把ALGOL系统装载好 , 运行自己的程序 , 得到一些数据 , 然后你可以走开去思考结果 , 下一个学生接着运行自己的程序 。 」
在纸带为王的时代 , Onion认为学习编程还能提升专注能力 。 「当编辑、编译、编辑、编译的循环可能持续10分钟以上时 , 你必须非常关注自己的源代码……」
英国国家计算博物馆有两台Elliott计算机藏品 , 一台是1962年的803B(其在一间谷仓中闲置了15年后被捐赠出来)以及一台903 。 这两台计算机都功能完好 , 你可以在参观博物馆时看到它们运行 。
其中由Onion负责维护的803B还带有Calcomp滚筒式绘图仪以及一些额外的输入/输出功能 。
诞生于穿孔纸带时期的语言,ALGOL 60今年60岁了
文章图片
一个ALGOL程序正在绘制洛伦兹吸引子
当然 , 不是人人都能玩这种古董计算机 , 不过你还是能以其它方式体验一番Elliott803或903 。 MARST将把ALGOL60代码转译成C语言 , 你可以通过模拟器来体验整个803计算机:http://elliott803.sourceforge.net/ 。
【诞生于穿孔纸带时期的语言,ALGOL 60今年60岁了】尽管ALGOL60已经60岁了 , 但你仍能在很多现代编程语言中找到ALGOL设计者曾经的想法 。


    推荐阅读