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