ALGOL 58

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

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

歷史
1958年,美国计算机协会(ACM)与联邦德国的(GAMM)在苏黎世成立小组,把美国方面提出的“编程语言”,和欧洲方面提出的“描述计算进程的”,这两种提议综合为一从而形成“国际代数语言”(IAL),随后在1959年正式报告中改称为算法语言ALGOL。

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

{|
! 块缩进排版 !! 语言报告的排版。

  • IAL介入了对赋值(表示左向箭头的:=)和等价关系=的区分,ALGOL 60保持了这种区分。
  • IAL和ALGOL 60都允许了具有任意的下方和上方下标边界的数组,并允许用整数表达式定义下标边界。
  • IAL和ALGOL 60都允许嵌套的过程定义以及对应标识符的作用域。
  • IAL报告采用与ALGOL 60报告几乎相同的术语描述参数替换,将传名调用的可能性保留开放,但不清楚是否当时就认识到了这一点。
  • IAL允许数值语句标号,ALGOL 60保持了它。
  • IAL在程序内包括非ALGOL代码的可能性,已经在过程参数的上下文中提示到了。
  • IAL和ALGOL 60都有“switch指定式”,但无关于C语言及其有关语言的。
  • IAL提议了内联函数形如f(x) := x / 2,这在ALGOL 60中被去掉了。
  • IAL过程声明为输入和输出参数提供了独立声明,过程可以返回多个值,这种机制在ALGOL 60中被替代为值声明。
  • IAL中的变量声明可以位于程序中的任何位置而不必需在过程的开始处。与之相对,在ALGOL 60块中的声明的出现应当先于所有执行语句。
  • IAL的for语句拥有形式for i := base (increment) limit,直接模仿了的编程语言的循环,将其=替代为:=,并将其德语关键字Für替代为英语翻译for;ALGOL 60将圆括号替代为字分界符step和until,使得前者语句转而写为for i := base step increment until limit。
  • IAL的if语句没有then子句或else子句,它只是用布尔表达式守卫后续语句,进行关系运算的布尔表达式需要用圆括号包围起来。IAL提供了交替语句if either ~ or if ~ end来清晰的允许多个条件的测试。二者都被替代为ALGOL的if ~ then ~ else ~构造,它介入了歧义。
  • IAL通过do语句提供宏替代,这在ALGOL 60中被去掉了。
  • IAL允许在将数组传递给过程时忽略一个或多个数组下标,允许将给一个过程的任何或所有的实参传递给另一个过程。
  • IAL的中缀布尔运算符都有相同的优先级。指数通过成对的上下箭头来指示,这去除了嵌套指数的解释混淆;ALGOL 60将成对的箭头替代为一个单一的上箭头,它的功能等价于FORTRAN的**。
  • IAL报告不明确规定要提供哪些标准函数,模糊的提及了“标准分析函数”。ALGOL 60报告拥有标准函数的更明确列表。

引用
外部連結
*[http://www.softwarepreservation.org/projects/ALGOL/algol58impl/ Algol 58] at the Software Preservation Group (cf. Computer History Museum)
*[http://www.softwarepreservation.org/projects/ALGOL/report/Algol58_preliminary_report_CACM.pdf/ Algol 58 report from CACM] at the Software Preservation Group

评论 (0)

  • 还没有评论,来抢沙发吧。