ALGOL :算法语言的简称

更新时间:2023-09-25 14:52

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 联邦制 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通过互联网公开出版。

语言标准

ALGOL 60曾经提出两项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,BOOLEAN,COMMENT,CONTINUE,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(($,"Hello, world!"))

end

应用

ALGOL在美国和欧洲广被从事计算机研究的科学家们采用,其标准输入/输出设施在描述中从缺与及大型计算机供应商对本语言缺乏兴趣致使它在商业应用上受阻,然而,ALGOL 60却成为算法语言发布的标准并对其后所有算法类语言发展影响深远。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: