Algol_60

**ALGOL 60**（源自 ALGOrithmic Language 1960 的縮寫），是一種程式語言。它是 ALGOL 語言家族中的成員之一，以 ALGOL 58 為基礎，在 1960 年創建，其官方後繼者是 ALGOL 68。Algol 60 引進了許多新的概念如：塊結構、詞法作用域、遞歸、巴科斯 - 諾爾範式（BNF）等等，它在程式語言設計和發展演化中有著很大的影響力。

## 歷史

1960 年 1 月，艾倫・佩利在巴黎舉行的有全世界一流軟體專家參加的討論會上，發表了《算法語言 Algol 60 報告》，確定了程序設計語言 Algol 60。艾茲赫爾・戴克斯特拉實現了 Algol60 語言的第一個編譯器。1962 年，艾倫・佩利又對 Algol 60 進行了修訂。

Algol 60 是程序設計語言發展史上的一個里程碑，影響到其後的 Simula、CPL、ALGOL W、BCPL、B、Pascal、C 等。它標誌著程序設計語言成為一門獨立的科學學科，並為後來軟體自動化及軟體可靠性的發展奠定了基礎。

## 標準

ALGOL 60 以及 COBOL，是第一個企圖標準化的程式語言。ALGOL60 曾經提出兩項 ISO 標準，但現在都已經撤消：

* ISO 1538: 1984 年，程式語言 Algol 60 - 已撤消。
* ISO TR 1672: 1977 年，Algol 60 基本符號的硬體表示 - 已撤消。

## 性質

ALGOL 60 在官方定義上沒有 I/O 設施；諸多實現以少有相互兼容的方式定義了自己設施。

ALGOL 60 為參數傳遞提供了兩種求值策略：共通的傳名調用，和傳值調用。過程聲明為每個形式參數指定使用其中哪一個：`value` 指定傳值調用，預設則為傳名調用。對比於傳引用調用，傳名調用有特殊效果。例如，不指定參數為 `value` 或 `reference`，就不可能開發出交換兩個參數的值的過程，存在著傳遞進來的實際參數是一個整數變量和以同一個整數變量為索引的數組的情況。

傳名調用由於用來實現它的有趣的 thunk，而被很多編譯器設計者熟知。Donald Knuth 設計了「男人或男孩測試」，來區分編譯器是否正確的實現了「遞歸和非局部引用」。這個測試包含傳名調用的例子。

### 保留字和限制標識符

在標準 Burroughs 大型系統子語言中有 35 個保留字：

在標準 Burroughs 大型系統子語言中有 71 個限制標識符：

和所有固有函數的名字。

#### 標準運算符

## 例子

下面是語言報告中過程聲明的例子：

這裡的關鍵字寫法依賴於實現，比如將 `integer` 加引號寫為 `'INTEGER'`，這叫做索繞（stropping）。

## 實現時間線

迄今 Algol 60 已經有了至少 70 個擴充、擴展、派生和子語言。

## 參見

## 引用

## 外部連結

* Revised Report on the Algorithmic Language Algol 60 （頁面存檔備份，存於網際網路檔案館） by Peter Naur, et al. ALGOL definition
* A BNF syntax summary （頁面存檔備份，存於網際網路檔案館） of ALGOL 60
* "The Emperor's Old Clothes" – Hoare's 1980 ACM Turing Award speech, which discusses ALGOL history and his involvement
* MARST （頁面存檔備份，存於網際網路檔案館）, a free Algol-to-C translator
* An Implementation of ALGOL 60 for the FP6000 （頁面存檔備份，存於網際網路檔案館） Discussion of some implementation issues.
* Naur, Peter. The European Side of the Last Phase of the Development of ALGOL 60. ACM SIGPLAN Notices. August 1978, **13** (8): 15–44. S2CID 15552479. doi:10.1145/960118.808370.
* Edinburgh University wrote compilers for Algol60 (later updated for Algol60M) based on their Atlas Autocode compilers initially bootstrapped from the Atlas to the KDF-9. The Edinburgh compilers generated code for the ICL1900, the ICL4/75 (an IBM360 clone), and the ICL2900. Here is the BNF for Algol60 網際網路檔案館的存檔，存檔日期 2020-05-15. and the ICL2900 compiler source 網際網路檔案館的存檔，存檔日期 2020-05-15., library documentation 網際網路檔案館的存檔，存檔日期 2020-05-15., and a considerable test suite 網際網路檔案館的存檔，存檔日期 2020-05-15. including Brian Wichmann's tests. 網際網路檔案館的存檔，存檔日期 2020-05-15. Also there is a rather superficial Algol60 to Atlas Autocode source-level translator 網際網路檔案館的存檔，存檔日期 2020-05-15..
* Eric S. Raymond's Retrocomputing Museum （頁面存檔備份，存於網際網路檔案館）, among others a link to the NASE Algol-60 interpreter written in C.
* The NASE interpreter （頁面存檔備份，存於網際網路檔案館）
* Stories of the B5000 and People Who Were There: a dedicated ALGOL computer [1] （頁面存檔備份，存於網際網路檔案館）, [2] （頁面存檔備份，存於網際網路檔案館）
* Hermann Bottenbruch. Structure and Use of ALGOL 60. 1961 [2021-04-10]. doi:10.2172/4020495. （原始內容存檔於 2021-04-24）.
* NUMAL （頁面存檔備份，存於網際網路檔案館） A Library of Numerical Procedures in ALGOL 60 developed at The Stichting Centrum Wiskunde & Informatica (legal successor of Stichting Mathematisch Centrum) legal owner.
* Algol 60 resources: translators, documentation, programs （頁面存檔備份，存於網際網路檔案館）
* Algol-60 （頁面存檔備份，存於網際網路檔案館） included in Racket.