ALGOL,名称源自算法语言(英语:ALGOrithmic Language)的缩写[1],是一族指令式编程语言,发展于1950年代中期,对许多其它编程语言产生了重大影响。计算机协会在教科书及学术文章采用此语言做为描述算法的标准语法超过三十年。[2]

ALGOL
编程范型过程式, 指令式, 结构化
设计者Bauer英语Friedrich L. Bauer, Bottenbruch英语Hermann Bottenbruch, Rutishauser英语Heinz Rutishauser, Samelson英语Klaus Samelson, Backus, Katz英语Charles Katz, Perlis, Wegstein英语Joseph Henry Wegstein, Naur, Vauquois英语Bernard Vauquois, van Wijngaarden, Woodger英语Michael Woodger, J. Green, McCarthy
发行时间1958年,​66年前​(1958
当前版本
  • ALGOL 58(1958)
  • ALGOL 60(1960)
  • ALGOL 68(1968)
编辑维基数据链接
影响语言
许多后来的命令式语言(被称作ALGOL-like语言)
e.g. Simula, C, CPL, Pascal, Ada
受ALGOL影响的函数式语言:Scheme

由大多数近代编程语言皆使用类似ALGOL的语法来看[3],ALGOL可与差不多同时期的FORTRANLISPCOBOL并列为四大最有影响力的高阶语言[4]。ALGOL被设计用来避免FORTRAN中一些已知的问题,最终引领了许多其它编程语言的兴起,包括PL/ISimulaBCPLBPascalC

ALGOL引入了代码块,并用beginend来分隔。它是第一个利用词法作用域实作巢状函式的语言,也是第一个注重形式语言定义的语言,并在ALGOL 60报告中引入了巴科斯范式来作为设计语言形式文法的原则。


ALGOL主要有三种规格,以初次发表的年份命名:

  • ALGOL 58 – 原提议命名为IAL,代表International Algebraic Language
  • ALGOL 60 – 在1960年代中期首先实作成X1 ALGOL 60,1963年修订。[5][6]
  • ALGOL 68 – 引入许多新元素,像是可变阵列、切片、平行化及算子识别。1973年修订。[7]

尼克劳斯·维尔特在发展Pascal之前,在ALGOL 60的基础下建立了ALGOL W。ALGOL W本是下一代ALGOL的提议,但ALGOL委员会决定采用更先进复杂的设计,而不是一个简洁化ALGOL 60。

ALGOL 58 (IAL)

ALGOL 58没有I/O机制。

ALGOL 60家族

1960年,在巴黎举行的讨论会上,来自欧洲的诺尔Bauer英语Friedrich L. BauerRutishauser英语Heinz RutishauserSamelson英语Klaus SamelsonVauquois英语Bernard Vauquoisvan WijngaardenWoodger英语Michael Woodger,与来自美国的佩利巴科斯麦卡锡Katz英语Charles KatzWegstein英语Joseph Henry Wegstein和J. Green,共同发表了《算法语言ALGOL 60报告》[8]戴克斯特拉实现了ALGOL 60语言的第一个编译器。在1962年罗马会议上,ALGOL 60报告得到了修订,并于1963年出版[9]

Algol 60引进了许多新的概念如:代码词法作用域递归巴科斯-诺尔范式(BNF)等等。

Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。

ALGOL 68

ALGOL 68的“Hello, World”

BEGIN
  printf(($gl$,"Hello, world!"))
END


Algol W:1966年,IFIP吸收尼克劳斯·维尔特参加对Algol语言进行完善与扩充的工作小组。沃思参加进去以后,提交了一份建议书并由东尼·霍尔等人修改、完善以后形成Algol W。同时还催生了一个新的语言PL360

参考资料

  1. ^ 有人大小写混用(Algol 60页面存档备份,存于互联网档案馆)),有人用全大写 (ALGOL68页面存档备份,存于互联网档案馆)),本文采用全大写ALGOL
  2. ^ Collected Algorithms of the ACM页面存档备份,存于互联网档案馆) Compressed archives of the algorithms. ACM
  3. ^ O'Hearn, P. W.; Tennent, R. D. Algol-like languages, Introduction. September 1996 [2017-11-08]. (原始内容存档于2011-11-14). 
  4. ^ "The ALGOL Programming Language"页面存档备份,存于互联网档案馆), University of Michigan-Dearborn
  5. ^ Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K.; Vauquois, B.; Wegstein, J. H.; van Wijngaarden, A.; Woodger, M. Naur, Peter , 编. Report on the Algorithmic Language ALGOL 60. Copenhagen. May 1960. ISSN 0001-0782. doi:10.1145/367236.367262. 
  6. ^ Revised Report on the Algorithmic Language Algol 60. 1963 [8 June 2007]. (原始内容存档于2007-06-25). 
  7. ^ Revised Report on the Algorithmic Language ALGOL 68 (PDF). 1973 [13 September 2014]. (原始内容存档 (PDF)于2016-10-07). 
  8. ^ Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K.; Vauquois, B.; Wegstein, J. H.; van Wijngaarden, A.; Woodger, M. Naur, Peter , 编. Report on the Algorithmic Language ALGOL 60. Communications of the ACM (Copenhagen). May 1960, 3 (5): 299–314. ISSN 0001-0782. S2CID 278290. doi:10.1145/367236.367262. 
  9. ^ Revised Report on the Algorithmic Language Algol 60. 1963 [2020-04-23]. (原始内容存档于2007-06-25).