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).