ALGOL
出典: フリー百科事典『ウィキペディア(Wikipedia)』
パラダイム: | 構造化プログラミング |
---|---|
型付け: | 強い静的型付け |
方言: | ALGOL 60、ALGOL 68 |
影響を与えた言語: | Pascal、C言語、PL/I、Simula |
ALGOL(アルゴル、ALGOrithmic Language の略)は、プログラミング言語の一つ。
1950年代後半、FORTRAN等の言語が米国で作られていたのに対抗して、ヨーロッパの研究者が、世界共通のプログラミング言語として開発した。アルゴリズムの研究開発に用いる目的で作成され、アルゴリズム記述のデファクトスタンダードとして普及した。PL/I、PascalやC言語等、後の言語開発に大きな影響を与えたとされるが、現在ではほとんど利用されていない。正確にはALGOLとは下記ALGOL系列の総称で、単に「ALGOL」という名の言語は存在しない。
目次 |
[編集] 歴史
1958年にチューリッヒで行われた国際会議で提案されたのが起源とされる、この言語は後にALGOL 58と呼ばれるようになったが、当初はIAL(International Algorithmic Language)と呼ばれていた。
1960年に提案されたALGOL 60では、文法がBNF記法で記述され、構造化プログラミングの考え方を形づけている。
1968年には、後継としてALGOL 68が開発された。ALGOL 68では、2段階文法のWijngaarden(ワインハールデン)記法で文法が記述された。ALGOL 60の後継言語制定に至るまでの候補としてPascal設計者Wirth氏のALGOL W、日本で設計されたALGOL N等もあったが最終的にALGOL 68が後継として制定された。しかし、あまりに複雑かつ巨大な仕様のためALGOL 68コンパイラの実装は難しく、またWijngaarden記法が難解なこともあり実用的には、ほとんど普及しなかった。
言語の標準化としては、IFIP TC2/WG2.1においてALGOL 60が制定された。その後、遅々として標準化作業はすすまず、1984年になって、ISOでALGOL 60相当の言語が標準化されたのみである。日本では、かつてALGOL 60の言語規格と入出力ライブラリ規格をそれぞれJIS規格で制定していたが、現在では廃止されている。
[編集] 特徴
ALGOL 60は、手続き型言語として初めて再帰呼び出しが可能なプログラミング言語である。
公式のALGOL 60では入出力機能が定義されていなかったため、実際の処理系ではそれぞれに互換性のない方法で実装された。それに対して、ALGOL 68ではtransput(ALGOL 68の用語で入出力を意味する)のための豊富なライブラリが提供された。
ALGOL 60では引数渡しに2種類の評価方法が定義されている。一般的な値渡しとALGOLに特徴的な名前渡しである。名前渡しは遅延評価の一種と考えられ、使いこなすのが難しい機能でもある。詳しくは引数を参照されたい。
ALGOLが後の言語に与えた最大の影響は、begin
/end
(Cなどでは{}
)の入れ子によるブロック構造化、つまり次のような典型的な形の記法である。
begin x := 1; if (x > 0) then begin ... end end
俗に「ALGOL文法」といった場合は、このブロック構造化記法のことを指している。
[編集] コード例
次のコードはALGOL 60で n × m の2次元配列の中から絶対値が最大の要素を求め、その絶対値をyに、添え字をiとkに格納する手続きを記述したものである。なお、コード中で強調表示されている予約語の記法は処理系に依存する。
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m is transferred to y, and the subscripts of this element to i and k; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax
[編集] 外部リンク
- Algol 68 Genie - GPL配布によるフリーのALGOL68 インタプリタ
- Algol60 compiler and interpreter - MS-DOS上で動くフリーのALGOL60コンパイラが配布されている。
- Revised Report on the Algorithmic Language Algol 60