跳至內容

ALGOL 58

維基百科,自由的百科全書
ALGOL 58
編程範型過程式, 指令式, 結構化
設計者Friedrich L. Bauer英語Friedrich L. Bauer, Hermann Bottenbruch英語Hermann Bottenbruch, Heinz Rutishauser英語Heinz Rutishauser, Klaus Samelson英語Klaus Samelson, 約翰·巴科斯, Charles Katz英語Charles Katz, 艾倫·佩利, Joseph Henry Wegstein英語Joseph Henry Wegstein
面市時間1958年,​67年前​(1958
受影響於
FORTRAN, IT, Plankalkül[1], Superplan英語Superplan, Sequentielle Formelübersetzung
影響語言
ALGOL 60,以及類ALGOL語言

ALGOL 58(源自英語:ALGOrithmic Language 1958的縮寫),最早稱為國際代數語言(英語:International Algebraic Language,縮寫為IAL)[2],一種程式語言,是ALGOL家族的第一個成員。它在1958年問世,ALGOL 60即是它的基礎上開發而成。

ALGOL 58介入了複合語句的基礎概念[3],但只局限於控制流程,它沒有以ALGOL 60中的那種方式,結合上標識符作用域

歷史

[編輯]

1958年,美國計算機協會(ACM)與聯邦德國的應用數學和力學協會英語Gesellschaft für Angewandte Mathematik und Mechanik(GAMM)成立小組,在蘇黎世把他們關於算法表示法的建議綜合為一從而形成IAL(國際代數語言)[4],後來改稱ALGOL 58。

ALGOL 58變體時間線

[編輯]
名稱 作者 國家 描述 目標CPU
ZMMD實現 1958 Friedrich L. Bauer英語Friedrich L. Bauer, Heinz Rutishauser英語Heinz Rutishauser, Klaus Samelson英語Klaus Samelson, Hermann Bottenbruch英語Hermann Bottenbruch  德國 ZMMD是ZürichMünchenMainzDarmstadt的縮寫 Z22英語Z22 (computer)
NELIAC英語NELIAC 1958 海軍電子實驗室英語Navy Electronics Laboratory  美國 AN/USQ-17英語AN/USQ-17
JOVIAL 1960 Jules Schwartz英語Jules Schwartz  美國 DODHOL,先於Ada 多種
BALGOL英語BALGOL 1960 Joel Merner等人  美國 Burroughs公司英語Burroughs Corporation B220
MAD英語MAD (programming language) 1960 密西根大學  美國 IBM 7090/7094主機,接著在1960年代中期移植到Univac 1108英語Univac 1108
ALGO英語ALGO 1961 Bendix公司英語Bendix Corporation  美國 Bendix G-15英語Bendix G-15
ALGOL 30英語Dartmouth ALGOL 30 1962 達特茅斯學院Thomas Eugene Kurtz英語Thomas Eugene Kurtz等人  美國 後來演進成ALGOL 60 LGP-30英語LGP-30
SUBALGOL 1962 史丹佛大學Bob Braden英語Bob Braden, Lawrence M. Breed英語Lawrence M. BreedRoger Moore英語Roger Moore (computer scientist)  美國 BALGOL擴展 IBM 7090

例子代碼

[編輯]

下面是語言報告中的例子代碼,採用辛普森積分法計算函數F(x)的積分,函數F(x)的值由假定存在的函數例程提供:

procedure Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
        F() is the function to integrated.
        delta is the permissible difference between two successive Simpson sums.
        V is greater than maximum absolute value of F on a, b;
begin
Simps:  Ibar := V×(b-a)
        n    := 1
        h    := (b-a)/2
        J    := h×(F(a)+F(b))
J1:     S    := 0;
  for   k    := 1 (1) n
        S    := S+F(a+(2×k-1)×h)
        I    := J+4×h×S
  if    (delta < abs(I-Ibar))
begin   Ibar := I
        J    := (I+J)/4
        n    := 2×n; h := h/2
        go to J1 end
        Simps := I/3
return
integer (k, n)
  end   Simps

這裡的非實數類型聲明放在了過程的末尾。原文中的斜體顯示改為了粗體,下面再將其調整為ALGOL 60開創的縮進格局:

procedure Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
    F() is the function to integrated.
    delta is the permissible difference between two successive Simpson sums.
    V is greater than maximum absolute value of F on a, b;
begin
Simps:
    Ibar := V×(b-a)
    n := 1
    h := (b-a)/2
    J := h×(F(a)+F(b))
J1: S := 0;
    for k := 1 (1) n
        S := S+F(a+(2×k-1)×h)
    I := J+4×h×S
    if (delta < abs(I-Ibar))
    begin
        Ibar := I
        J := (I+J)/4
        n := 2×n; h := h/2
        go to J1
    end
    Simps := I/3
    return
    integer (k, n)
end Simps

ALGOL 58對ALGOL 60的影響

[編輯]
  • IAL介入了參考、出版和硬體語言的三級概念,和有別於自由選擇的標識符的有獨立表示的「字分界符」的概念(因此沒有保留字)。ALGOL 60保持了這種三級概念[5]
  • IAL介入了對賦值(表示左向箭頭的:=)和等價關係=的區分,ALGOL 60保持了這種區分。
  • IAL和ALGOL 60都允許了具有任意的下方和上方下標邊界的數組,並允許用整數表達式定義下標邊界。
  • IAL和ALGOL 60都允許嵌套的過程定義以及對應標識符的作用域。
  • IAL報告採用與ALGOL 60報告幾乎相同的術語描述參數替換,將傳名調用的可能性保留開放。但不清楚是否當時就認識到了這一點。
  • IAL允許數值語句標號,ALGOL 60保持了它。
  • IAL在程序內包括非ALGOL代碼的可能性,已經在過程參數的上下文中提示到了。
  • IAL和ALGOL 60都有「switch指定式」,但無關於C語言及其有關語言的switch語句英語switch statement
  • IAL提議了內聯函數形如f(x) := x / 2,這在ALGOL 60中被去掉了。
  • IAL過程聲明為輸入和輸出參數提供了獨立聲明,過程可以返回多個值,這種機制在ALGOL 60中被替代為聲明。
  • IAL中的變量聲明可以位於程序中的任何位置而不必需在過程的開始處。與之相對,在ALGOL 60塊中的聲明的出現應當先於所有執行語句。
  • IAL的for語句擁有形式for i := base (increment) limit,直接模仿了Rutishauser英語Heinz Rutishauser的程式語言Superplan英語Superplan的循環,將其=替代為:=,並將其德語關鍵字Für替代為英語翻譯for;ALGOL 60將圓括號替代為字分界符stepuntil,使得前者語句轉而寫為for i := base step increment until limit
  • IAL的if語句沒有then子句或else子句,它只是守衛後續語句。IAL提供了if either語句來清晰的允許多個條件的測試。二者都被替代為ALGOL的if-then構造,它介入了懸擺else英語Dangling else歧義。
  • IAL通過do語句提供宏替代,這在ALGOL 60中被去掉了。
  • IAL允許在將數組傳遞給過程時忽略一個或多個數組下標,允許將給一個過程的任何或所有的實參傳遞給另一個過程。
  • IAL的中綴布爾運算符都有相同的優先級。指數通過成對的上下箭頭來指示,這去除了嵌套指數的解釋混淆;ALGOL 60將成對的箭頭替代為一個單一的上箭頭,它的功能等價於FORTRAN的**
  • IAL報告不明確規定要提供哪些標準函數,模糊的提及了「標準分析函數」。ALGOL 60報告擁有標準函數的更明確列表。

引用

[編輯]
  1. ^ Rojas, Raúl; Hashagen, Ulf. The First Computers: History and Architectures. MIT Press. 2002: 292 [October 25, 2013]. ISBN 978-0262681377. (原始內容存檔於2020-08-04). 
  2. ^ Perlis, A.J. Talk on Computing in the fifties. ACM National Conference. Nashville,. TN. (Transcript in J. A. N. Lee (ed.), Computer Pioneers, IEEE Computer Society Press, Los Alamito, CA, 1995, 545-556). 1981. 
  3. ^ Perlis, A. J.; Samelson, K. Preliminary report: international algebraic language (PDF). Communications of the ACM (New York, NY, USA: ACM). 1958, 1 (12): 8–22 [2023-02-20]. doi:10.1145/377924.594925. (原始內容存檔 (PDF)於2023-02-20). Strings of one or more statements may be combined into a single (compound) statement by enclosing them within the "statement parentheses" begin and end. Single statements are separated by the statement separator ";". 
  4. ^ Perlis, A.J.; Samelson, K. Preliminary report: international algebraic language. Communications of the ACM. 1958, 1 (12): 8–22. doi:10.1145/377924.594925. 
  5. ^ Naur, P (編). Revised report on the Algorithmic Language ALGOL 60 (PDF). International Federation for Information Processing. 1962. 

外部連結

[編輯]