【外评】为什么 ALGOL 是一种重要的编程语言?
内容提要
本文回顾了20世纪50年代末ALGOL语言的诞生和发展,ALGOL是一种重要的编程语言,创造者为德国和美国科学家合作。ALGOL 60引入了块、嵌套函数和递归等新特性,对后来的编程语言产生了巨大影响。ALGOL的遗产包括代码块和递归的概念,以及BNF形式的语法定义。ALGOL推动了编译器的发展,为计算机科学带来了新的高度。
延伸解读
ALGOL 的诞生背景:从汇编到高级语言的转折
20世纪50年代,编程主要用汇编语言,费力且难以移植。1955年达姆施塔特研讨会提出需要独立于平台的算法语言。1957年GAMM与ACM合作,1958年苏黎世会议推出ALGOL 58,但未广泛认可。1959年磋商后,1960年巴黎会议13位科学家制定ALGOL 60,引入块、嵌套函数和递归等特性,成为计算机科学的重要里程碑。
ALGOL 60 的核心创新:块、递归与BNF
ALGOL 60 首次引入块结构(begin/end)和词法作用域,允许嵌套函数。递归由约翰·麦卡锡提议,虽未设关键字,但规范不禁止递归调用。参数传递有按值传递和按名称传递两种策略。ALGOL 60 还是第一种用BNF(巴科斯-诺尔范式)定义的编程语言,使语法描述独立于自然语言,成为后续语言定义的标准。
ALGOL 的接受与挑战:欧洲热捧,美国遇冷
ALGOL 60 报告仅十几页,无参考实现,且未规定输入输出,导致“Hello World”都难写。第一个编译器由迪克斯特拉和宗内维尔德为荷兰Electrologica X1开发。到1963年,UNIVAC、Elliot等出现编译器,60年代后期苏联集团也有实现。但IBM全力支持FORTRAN,ALGOL缺乏维护机制,导致ALGOL 68失败。欧洲研究中心热烈接受,美国则因商业实用性而冷落。
ALGOL 的深远遗产:影响至今的编程范式
ALGOL 启发了大多数命令式语言,如Pascal、Simula(首个面向对象语言)和C。代码块和递归成为后来所有编程语言的标配。ALGOL 68 还带来大小写表达式、记录和引用等概念。BNF及其发展已成为描述编程语言的标准,在Python或JavaScript中随处可见。ALGOL 还推动了编译器技术的发展,因为其特性不适合顺序翻译,需要更先进的编译技术。
Q&A
ALGOL语言的起源是什么?
ALGOL语言起源于20世纪50年代末,由德国和美国的科学家合作创造,旨在提供一种通用的算法语言。
ALGOL 60引入了哪些重要特性?
ALGOL 60引入了块、嵌套函数和递归等重要特性,极大地丰富了编程语言的表达能力。
ALGOL对后来的编程语言有什么影响?
ALGOL对后来的编程语言,如Pascal、Simula和C产生了深远影响,尤其是在代码块和递归的概念上。
为什么ALGOL没有取得商业成功?
ALGOL缺乏支持和参考实现,导致其在商业应用中不如FORTRAN等语言受欢迎。
ALGOL 58和ALGOL 60有什么区别?
ALGOL 58是ALGOL的第一个版本,主要引入复合语句,而ALGOL 60则在此基础上进行了更全面的改进,增加了块和嵌套函数等特性。
ALGOL的语法定义有什么创新?
ALGOL 60是第一种以BNF形式定义的编程语言,这种形式为后来的编程语言描述提供了标准。