ALGOL

演演算法語言的簡稱

ALGOL是演演算法語言(ALGOrithmic Language)的簡稱,是在計算機發展史上首批清晰定義的高級語言,由歐美計算機學家合力所組成的聯席大會於仍是晶體管計算機流行的1950年代所開發。

國際計算機學會(ACM)將ALGOL模式列為演演算法描述的標準,啟發ALGOL類現代語言Pascal、Ada、C語言等出現。

由於ALGOL語句和普通語言表達式接近,更適於數值計算,所以ALGOL多用於科學計算機。

歷史背景


1955年,德國的應用數學和力學學會(Gesellschaft für Angewandte Mathematik und Mechanik,GAMM) 因力拒IBM在計算機領域的主導地位,特設置一個專責於設計一通用但與計算機無關的演演算法語言的開發委員會。
1950年代末期,大量的新增計算機語言湧現,而這些新語言大都圍繞單個體系結構如UNIVAC計算機、IBM700系列計算機等開發,使不同系統用 戶間的交流變得困難。針對這種計算機專用語言大量增多情況,美國一些主要的計算機用戶組,在1957年5月10日向國際計算機學會(Association for Computing Machinery,ACM)提交申請,建議研究與開發適用於與計算機無關的科學用程序設計語言
1957年末,因應在美國湧現多方計算機高級語言,GAMM原小組委員會認為應該包攬美國同道中人而向ACM發出邀請,1958年4月,兩個小組正式同意加入這一聯合語言設計項目。
1958年5月27日至6月1日,GAMM和ACM各有4人出席在蘇黎世舉行第一次設計會議,為新語言定下目標。亦因應語言特性,先被命名為國際代數語言(International Algebraic Language,IAL) ,轉輾后定名為ALGOL,即演演算法語言。

發展歷程


ALGOL 58

1958年12月,ALGOL小組發表了ALGOL58報告引起反響。這語言被視程序設計語言思想的集成者。這份用於國際化討論草案為基礎的ALGOL58報告,啟迪了包括密歇根大學的MAD語言,以及長期用於美國軍務系統的NELIAC語言和JOVIAL語言的誕生。ALGOL小組曾通過ACM向IBM建議為所有700系列的計算機實現ALGOL58,IBM和其主要的科學用戶組SHARE亦曾成立SHARE IAL作實踐研究。
1959年,歐洲和美國方各自在己方的ALGOL Bulletin和ACM通訊上羅列增改建議而展開激烈辯論;1959年中,IBM與SHARE因應700系列上運作更替的成本効益,終止ALGOL 58的使用。

ALGOL 60

1960年1月,第二次ALGOL會議在巴黎召開,正式對80項提案作出討論。來自丹麥的Peter Naur認定應該使用John Backus於1959年6月在國際信息處理大會(International Conference on Information Processing)上提出的程序設計語言語法的新方法BNF來正式描述1960年ALGOL會議的成果。
1960年5月,Peter Naur的ALGOL 60報告發表;報告中概括部份ALGOL歧義,亦訂下於第三次會議對這些問題作出討論。
1962年4月,ALGOL會議在羅馬召開,委員會決議不向語言添加新的特性,只作出問題解決的討論;議會亦決定將ALGOL 60的維繫與支援權利轉予成立不久的國際信息處理聯合會(International Federation for Information Processing, IFIP),IFIP為此成立工作組IFIP WG 2.1。
1962年8月,IFIP WG 2.1在德國慕尼黑舉行首次會議;工作組定出代碼ALGOL X程序語言,作為ALGOL 60的臨時修正版本。
1963年1月,由John Backus等以"演演算法語言ALGOL 60的修訂報告"為題將羅馬會議成果正式發表。

ALGOL W

1966年,WG 2.1工作小組中的Niklaus Wirth與C. A. R. Hoare以ALGOL X為基礎作出修改與完善形成ALGOL W,礙於調整與改進幅度略顯保守,委員會並未以此作為ALGOL 60的後繼者。然而,Niklaus Wirth在史丹福大學,透過他所撰寫的PL/360在IBM/360上成功運行ALGOL W。Niklaus Wirth的研發最後導至他本人在1970年創造Pascal的誕生。

ALGOL 68

1968年2月,IFIP WG 2.1工作小組共同改進ALGOL的ALGOL 68初稿出版,小組其後在3月、6月、8月於各地協商,終在12月於慕尼黑的IFIP會員大會上發表主要由Adriaan van Wijngaarden設計的兩段式語法規範ALGOL 68完整版本並獲大會通過。
1970年4月,ALGOL 68R成為以 GEORGE 3 操作系統在ICL 1907F上運行的首個ALGOL 68編譯器。
1973年9月,IFIP WG 2.1工作小組最終修訂的ALGOL 68修正版本出版。
1975年,Stephen R. Bourne等人創設能在多種不同計算機平台上輸出ZCODE的移動式編譯器ALGOL 68C。
1984年,Charles H. Lindsey創設能在Sun3、Sun Sparc、Atari ST、Acorn Archimedes等PC上執行的ALGOL 68S編譯器。
1997年5月,ALGOL 68S通過網際網路公開出版。

語言標準


ALGOL60曾經提出兩項ISO標準:
ISO 1538-1984年,程式語言ALGOL 60(Programming language Algol 60 )
ISO TR 1672- 1977年,ALGOL 60硬體要求(Algol 60 Hardware Representation )已撤回
自1968年12月ALGOL 68最終方案(MR 101)被IFIP WG 2.1接受及在聯合國教科文組織轄下IFIP聯席大會通過並出版后,該語言標準被翻譯成俄語、德語、法語、保加利亞語、日語、中文及盲文等。ALGOL 68在俄羅斯廣泛普及並成為俄羅斯GOST標準:
GOST 27974-1988年,程式語言 ALGOL 68(Язык программирования АЛГОЛ 68 )
GOST 27975-1988年,程式語言 ALGOL 68 延綴(Язык программирования АЛГОЛ 68 расширенный )

語言特點


ALGOL是因應人們為科學應用大規模合作設計而產生的工作語言,具下列重要特點:
一、引入模式化數據類型概念,允許使用者加上新的數據環境或作用域,可將程序中某些部分局部化,非浮點型的變數需要顯式聲明。
二、率先加入了複合語句的概念,成為複合語句引入先驅。
三、標識符可以用任意長度,數組維數可用無限數量,使用者可指定數組下界。
四、可使用按值傳遞及按名稱傳遞兩段式語法規範向子程序傳遞參數,允許嵌套選擇語句。
五、可行使遞歸過程,棧動態數組適用。

語言組成


特別字元

ALGOL系語言誕生時,正值字元趨向多元化及迅速蛻變時代,特別字元的採用亦隨著時間推移不斷更新。
ALGOL 60
全採用大寫來編撰,再加上×, ÷, ≤, ≥, ≠, ¬, ∨, ∧, ⊂, ≡, ␣,口等數學標號。
ASCII
在早期發展階段中,將"\"號加在ASCII字元設置上以支援ALGOL的Boolean運算。
ALCOR
這字元設置中包含有罕用的 "᛭"及"口"作浮點註標。
GOST
在俄羅斯GOST10859標準中,ALGOL可行使4、5、6、7位元字元編碼
ALGOL 68
在1968年以前定下的ALGOL字元上,加上自IBM2741鍵盤上字元→, ↓, ↑, □, ⌊, ⌈, ⎩, ⎧, ○, ⊥, ¢ 等。

關鍵字

ALGOL 60語言關鍵字共35個:
ALPHA,ARRAY,BEGIN,BOOLEANCOMMENTCONTINUE,DIRECT, DO,DOUBLE,ELSE,
END,EVENT,FALSE,FILE,FOR,FORMAT,GO,IF,INTEGER,LABEL,LIST,LONG
OWN,POINTER,PROCEDURE,REAL,STEP,SWITCH,TASK,THEN,TRUE,UNTIL,VALUE,
WHILE,ZIP
ALGOL 68語言關鍵字共60個:
mode, op, prio, proc,
flex, heap, loc, long, ref, short,
bits, bool, bytes, char, compl, int, real, sema, string, void,
channel, file, format, struct, union,
at "@", eitherr0, is ":=:", isnt is notr0 ":/=:" ":≠:", of "→"r0, true, false, empty, nil "○", skip "~",
co "¢", comment "¢", pr, pragmat,
case ~ in ~ ouse ~ in ~ out ~ esac "( ~ | ~ |: ~ | ~ | ~ )",
for ~ from ~ to ~ by ~ while ~ do ~ od,
if ~ then ~ elif ~ then ~ else ~ fi "( ~ | ~ |: ~ | ~ | ~ )",
par begin ~ end "( ~ )", go to, goto, exit "."r0.

語言執行

ALGOL系語言,其多樣版本及版本間在移動設施從缺可透過執行Hello World程序來體現。
ALGOL 58
ALGOL 58無標準輸入/輸出設施。
ALGOL 60
ALGOL 60無標準輸入/輸出設施,全採用大寫來編撰,Hello World程序移動設施從缺。
ALGOL 68
ALGOL 68以一貫的粗體或下劃線關鍵字小寫作撰寫代碼。
begin
printf(($gl$,"Hello, world!"))
end

應用


ALGOL在美國和歐洲廣被從事計算機研究的科學家們採用,其標準輸入/輸出設施在描述中從缺與及大型計算機供應商對本語言缺乏興趣致使它在商業應用上受阻,然而,ALGOL 60卻成為演演算法語言發布的標準並對其後所有演演算法類語言發展影響深遠。