ALGOL 58(源自英語:ALGOrithmic Language 1958的縮寫),最早稱為“国际代数语言”(英語:International Algebraic Language,縮寫為IAL)[4],它是一種用于计算机编程算法语言,是ALGOL家族的第一個成員。它在1958年問世,ALGOL 60即是它的基礎上開發而成。

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年,​68年前​(1958
受影响于
FORTRAN, IT[1], Plankalkül[2], Superplan英语Superplan, Sequentielle Formelübersetzung[3]
影響語言
ALGOL 60,以及类ALGOL语言

ALGOL 58介入了复合语句的基础概念[5],但只局限于控制流程,它没有以ALGOL 60中的那种方式,结合上标识符作用域

歷史

编辑

1958年,美国计算机协会(ACM)与联邦德国的应用数学和力学协会英语Gesellschaft für Angewandte Mathematik und Mechanik(GAMM)在苏黎世成立小组,把美国方面提出的“编程语言[6],和欧洲方面提出的“描述计算进程通用语言英语Universal language[7],这两种提议综合为一从而形成“国际代数语言”(IAL)[8],随后在1959年正式报告中改称为算法语言ALGOL[9]

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

例子代码

编辑

下面是IAL报告中的例子代码,采用辛普森积分法计算函数F(x)的积分,函数F(x)的值由假定存在的函数例程提供:

块缩进排版 语言报告的排版[9]
procedure Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
        F() i​​s 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
procedure     Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
        F() i​​s 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

这里在过程主体的复合语句的begin之后,必须为前面的过程头部中声明的过程名字包含此标识符的恰好一个语句标签,它被用作过程入口点;这里的非实数类型声明integer (k, n)放在了过程主体的末尾,即就在这个复合语句的end之前;有标签的复合语句在其end之后可以跟随着这个标签(尾随;来分隔于后续字符),它被用来指示这个复合语句的范围。

ALGOL 58对ALGOL 60的影响

编辑
  • IAL介入了参考、出版和硬件语言的三级概念,和有别于自由选择的标识符的有独立表示的“字分界符”的概念(因此没有保留字)。ALGOL 60保持了这种三级概念[10]
  • 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 ~ or if ~ end来清晰的允许多个条件的测试。二者都被替代为ALGOL的if ~ then ~ else ~构造,它介入了悬摆else英语Dangling else歧义。
  • IAL通过do语句提供宏替代,这在ALGOL 60中被去掉了。
  • IAL允许在将数组传递给过程时忽略一个或多个数组下标,允许将给一个过程的任何或所有的实参传递给另一个过程。
  • IAL的中缀布尔运算符都有相同的优先级。指数通过成对的上下箭头来指示,这去除了嵌套指数的解释混淆;ALGOL 60将成对的箭头替代为一个单一的上箭头,它的功能等价于FORTRAN的**
  • IAL报告不明确规定要提供哪些标准函数,模糊的提及了“标准分析函数”。ALGOL 60报告拥有标准函数的更明确列表。

引用

编辑
  1. ^ Alan Jay Perlis, With J. W. Smith and H. R. Van Zoeren. Internal Translator (IT): A Compiler for the 650 (PDF). 1957. 
  2. ^ Rojas, Raúl; Hashagen, Ulf. The First Computers: History and Architectures (PDF). MIT Press. 2002: 292. ISBN 978-0262681377. In his self-righteous way, Zuse blamed the failure of the Plankalkül on others. In the 1993 English version of his autobiography, he wrote (p. 102) "…… only occasionally [I] had the opportunity to have discussions with some of the creators of ALGOL, for example Rutishauser and Bauer. Most of the time we talked past one another. The basic idea of the Plankalkül to systematically construct a programming language from its logical roots, appeared outdated to my partners, or was considered unnecessary ballast." 
  3. ^ Sequential formula translation. Communications of the ACM, Volume 3, Number 2, pages 76-83. February 1960. 
  4. ^ 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. 
  5. ^ 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 ";". 
  6. ^ J. W. Backus, P. H. Diselets, D. C. Evans, R. Goodman, H. Huskey, C. Katz, J. McCarthy, A. Orden, A. J. Perlis, R. Rich, S. Rosen, W. Turanski, J. Wegstein. Proposal for A Programming Language (PDF). ACM Ad Hoc Committee on Languages, From Herbert Stoyan Collection on LISP Programming, Lot X5687.2010, Computer History Museum. 1958. 
  7. ^ F. L. Bauer, H. Bottenbruch, H. Rutishauser, K. Samelson. Proposal for a universal language for the description of computing processes (PDF). In: J. W. Carr (ed.), Computer Programming and Artificial Intelligence, University of Michigan Summer School, pages 355-373. 1958. 
  8. ^ Perlis, A.J.; Samelson, K. Preliminary report: international algebraic language. Communications of the ACM. 1958, 1 (12): 8–22. doi:10.1145/377924.594925. 
  9. ^ 9.0 9.1 A. J. Perlis and K. Samelson. Report on the Algorithmic Language Algol by the ACM Committee on Programming Languages and the GAMM Committee on Programming (PDF). Numerische Mathematik, Volume 1, Number 1. 1959. 
  10. ^ Naur, P (编). Revised report on the Algorithmic Language ALGOL 60 (PDF). International Federation for Information Processing. 1962. 

外部連結

编辑

📚 Artikel Terkait di Wikipedia

Python

(computer programming))关键字,Python的对象方法沿袭自Modula-3,使用显式的第一个形式参数来访问实例特性,习惯上将其命名为self(英语:this (computer programming))。 Python支持一些名字以__开始和结束

Swift語言

還可以接受非整數的cases條件值, 諸如此類。 支援面向对象(Object-oriented programming),即使Swift主張協定導向程式設計(Protocol-oriented programming) 语句(statement)不需要用分号(;)結束,但分号可以作为一行上两个以上语句的分割符。 不需要头文件(Header

Rust (编程语言)

Uniqueness Types in the Clean programming language, and ownership types and borrowed pointers in the Rust programming language.  Lattner, Chris. Chris

COBOL

History of Programming Languages. Academic Press: 572. 19781981. ISBN 0127450408. doi:10.1145/800025.1198410.  What is PL/B - The Programming Language for

块 (编程)

statements; i.e., the semicolon is not part of the statement.  Brian Kernighan, Dennis Ritchie. The C Programming Language, Second Edition (PDF). Prentice Hall

指定敘述

在程序設計中,指定敘述(英語:assignment statement),會將一個特定的值設定到某個特定的儲存位址去,這個位置被標記成一個特定的變數名稱。換句話說,這個敘述會複製一個值到某個特定變數中。在多數的指令式程式語言中,這種敘述是其中最基礎的結構。 指定敘述的通用表示方法通常是 x =

Java

RMI Java 5.0的多种新特性(包括foreach循环,自动装箱、拆箱(英语:Object type (object-oriented programming)#Autoboxing),可变参数函数以及annotations)是在相似的競爭對手C#更新後增加的。 Niklaus Wirth stated

GNU Octave

Business Media. 2008: 345. ISBN 978-1-4020-8636-6.  Kapuno, Raul Raymond. Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers