ALGOL
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/02/06 06:51 UTC 版)
ALGOLのロゴ | |
パラダイム | 手続き型プログラミング、構造化プログラミング、命令型プログラミング |
---|---|
登場時期 | 1958年 |
設計者 | バウアー、 ルティシュハウザー、 サメルソン、 バッカス、 パリス、 ナウア、 ファン・ワインハールデン、 マッカーシー他 |
型付け | 強い静的型付け |
方言 | ALGOL 60、ALGOL 68 |
影響を受けた言語 | FORTRAN |
影響を与えた言語 | Pascal、C言語、PL/I、Simula、CPL、Ada、Mathematica |
ALGOL(アルゴル)は、命令型プログラミング言語ファミリーの1つ[注 1]。名前「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する[1]。1950年代中ごろに開発され、多くの言語に影響を及ぼし、ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われた[2]。現代の多くの言語が「ALGOL系」あるいは「ALGOL風」(algol-like) とされているという意味で[3]、ほぼ同世代の高水準言語である FORTRAN、LISP、COBOL に比べて最も成功したと言うこともできる。FORTRANで明らかとなった問題を防ぐよう設計され、BCPL、B、Pascal、Simula、Cといった様々なプログラミング言語に影響を与えた。ALGOLは「begin
と end
で囲む」という構文によるブロック構造を導入し、制御構造を自在に入れ子(ネスト)にできる初の広まった言語となった。また構文の形式的定義を真剣に検討した最初のプログラミング言語でもあり、"Algol 60 Report"[4] で導入されたバッカス・ナウア記法は、その後のコンピュータ言語等の構文の形式的定義を示す手法として(プログラミング言語だけに限られず)定番の記法となっている。
主なバージョン
次の3つの主要な仕様が存在する。後ろについている数は最初に発表された年を表している。
- ALGOL 58
- 当初 IAL (International Algebraic Language) という名称で提案された[5]。
- ALGOL 60
- 1960年中ごろに X1 ALGOL 60 として実装されたのが最初で、1963年に改訂された[4][6]。
- ALGOL 68
- 1968年に発表され、1973年に改訂された[7]。可変配列、スライス、並列性、演算子識別、その他の拡張可能な機能などが新たに導入されている。
IAL (ALGOL 58) は後の様々なプログラミング言語(いわゆるALGOL系言語)に大きな影響を及ぼし、一般にそれらの先祖とみなされている。また、ALGOLの仕様で示された中間コードは ALGOL object code と呼ばれ、単純でコンパクトなスタックベースの命令セットアーキテクチャであり、計算機科学の分野でコンパイラ構築の教育に使われ、他の高水準言語の実装にも使われた。
歴史
1950年代後半、FORTRAN等の言語が米国で作られていたのに対抗して、ヨーロッパの学術研究者が世界共通のプログラミング言語として開発した。ALGOLは1958年にチューリッヒ工科大学で行われた国際会議で提案されたものが起源とされる。現代のプログラミング言語と比べて著しく異なる点のひとつに、reference syntax、publication syntax、implementation syntax という3種類の構文がある、ということが挙げられる。当時は文字コードの標準化以前であり、また数学の数式のように印刷したいという要望などもあったため、そのようなことになっている(違いは具象の違いであり、抽象構文は共通である)。これにより、キーワード名や小数点に使用する記号(カンマかピリオドか)を選ぶことなどもできた。
ALGOL 58 は主に欧米の計算機科学者がアルゴリズムの研究開発に用いた。商用アプリケーションにはあまり採用されていない。その原因は入出力機能が標準仕様に含まれていなかったためであり、またバロース以外の大手コンピュータメーカーがこの言語に興味を示さなかったためである。
ジョン・バッカスは ALGOL 58 を主たる対象としてプログラミング言語の文法を記述するバッカス正規記法 (Bakus normal form) を開発した。ピーター・ナウアはそれを ALGOL 60 向けに拡張・改訂。ドナルド・クヌースがバッカス・ナウア記法 (Bakus-Naur Form) と改称することを提案した[8]。
ピーター・ナウアは ALGOL Bulletin という学術誌の編集者としてこの言語の国際的議論に参加し、1959年11月にヨーロッパの言語設計グループの一員に選ばれた。そして "Algol 60 Report" の編集者となり、1960年1月にパリで開催された ALGOL 60 についての国際会議の結果を発表した[9]。
このパリでの会議(1960年1月1日から16日まで開催)には以下の人々が参加している。
- ヨーロッパからの参加者
- フリードリッヒ・L・バウアー、ピーター・ナウア、ハインツ・ルティシュハウザー、クラウス・サメルソン、Bernard Vauquois、アドリアン・ファン・ワインハールデン、Michael Woodger
- アメリカからの参加者
- ジョン・バッカス、Julien Green、Charles Katz、ジョン・マッカーシー、アラン・パリス、Joseph Henry Wegstein
アラン・パリスはこの会議について、「会合は疲れさせるもので、果てしなく、活発だった。ある人のよいアイデアが悪いアイデアと共に却下されると、その人は機嫌を損ねた。それにもかかわらず、期間中ずっと勤勉さが持続した。13人の作用は素晴らしいものだった」と評している。
ALGOL 60 はその後の多数の言語に影響を与えた。アントニー・ホーアは ALGOL 60 を「時代に先行していて、それまでの言語の改良だっただけでなく、その後のほぼ全ての後継者の先駆者となった言語」と評している[10]。SchemeというLisp方言の設計者は、その静的スコープは ALGOL からの影響だと述べている。またSchemeの仕様の名称 "Revised Report on the Algorithmic Language Scheme" もALGOLへのオマージュである[11]。
1968年には、後継として ALGOL 68 が開発された。ALGOL 68 では、2段階文法のワインハールデン記法で文法が記述された。ALGOL 60 の後継言語制定に至るまでの候補としてニクラウス・ヴィルトの ALGOL W、日本で設計された ALGOL N 等もあったが最終的に ALGOL 68 が後継として制定された。しかし、あまりに複雑かつ巨大な仕様のため ALGOL 68 コンパイラの実装は難しく、またワインハールデン記法が難解なこともあり実用的には、ほとんど普及しなかった。そのため単に ALGOL と言った場合にはALGOL 68 ではなくて ALGOL 60 やその方言を指すのが一般的である。
言語の標準化としては、IFIP TC2/WG2.1 において ALGOL 60 が制定された。その後、遅々として標準化作業はすすまず、1984年になって、ISOで ALGOL 60 相当の言語が標準化されたのみである。日本では、かつて ALGOL 60 の言語規格と入出力ライブラリ規格をそれぞれJIS規格で制定していたが (JIS C 6210-6219)、1983年(昭和58年)9月1日付で廃止された。
ALGOLとプログラミング言語研究
ピーター・ランディンが指摘したように、ALGOLは命令型の副作用と(名前渡しの)ラムダ計算を一体に結合した初の言語である。この言語の最も見事な定式化はおそらくジョン・C・レイノルズによるもので、その文法および意味論の純粋さをよく表している。レイノルズの「理想化した」ALGOLも名前渡しの言語のコンテキストにおける「ローカル」な副作用の適切さについて説得力のある方法論的主張を行っており、MLのような値渡しの言語が使用する「グローバル」な副作用と対比される。ALGOLの概念的完全性により、PCFやMLと共に意味論研究の主な対象とされるようになった[12]。
実装例
これまでに ALGOL 60 の強化版、拡張版、派生版、サブ言語などが少なくとも70ほど存在した[13]。
ALGOL 60 の実装に関する問題は、Nicholas Enticknap と Pat Woodroffe の書いた "The early days of Algol" で詳しく議論されている。
名称 | 年 | 作者 | 国 | 説明 | 対象システム |
---|---|---|---|---|---|
ZMMD-implementation | 1958年 | Bauer, Rutishauser, Samelson, Bottenbruch | ドイツ | ALGOL 58 の実装 | Z22 (後にツーゼのZ23[14]向けに ALGOL 60 コンパイラを提供している) |
X1 ALGOL 60 | 1960年8月[15] | エドガー・ダイクストラ、 Jaap A. Zonneveld | オランダ | ALGOL 60 の世界初の実装[16] | Electrologica X1 |
Elliott ALGOL | 1960年代 | アントニー・ホーア | イギリス | Elliott 803 & Elliott 503 | |
JOVIAL | 1960年 | Jules Schwarz | アメリカ | Ada以前の DOD HOL | 各種 |
Burroughs Algol (いくつか派生がある) |
1961年 | バロース(ホーアやダイクストラも参加) | アメリカ | バロースのメインフレーム(およびユニシスの後継シリーズ)の基盤 | バロースの大型機 および中型機 |
Case ALGOL | 1961年 | ケース・ウェスタン・リザーブ大学[17] | アメリカ | Simulaは Case ALGOL のシミュレーション向け拡張として開発された。 | UNIVAC 1107 |
GOGOL | 1961年 | Bill McKeeman | アメリカ | ODINタイムシェアリングシステム向け | PDP-1 |
RegneCentralen ALGOL | 1961年 | ピーター・ナウア、Jørn Jensen | デンマーク | ALGOL 60 の完全実装 | DASK (Regnecentralen) |
Dartmouth ALGOL 30 | 1962年 | トーマス・ユージン・カーツ 他 | アメリカ | LGP-30 | |
USS 90 Algol | 1962年 | L. Petrone | イタリア | ||
Algol Translator | 1962年 | G. van der Mey, W.L. van der Poel | オランダ | オランダ国営電話会社 | ZEBRA |
Kidsgrove Algol | 1963年 | F. G. Duncan | イギリス | イングリッシュ・エレクトリック KDF9 | |
VALGOL | 1963年 | Val Schorre | アメリカ | META II コンパイラジェネレータのテストとして開発 | |
Whetstone | 1964年 | Brian Randell, L J Russell | イギリス | イングリッシュ・エレクトリック KDF9 | |
NU ALGOL | 1965年 | ノルウェー | UNIVAC | ||
ALGEK | 1965年 | ソビエト連邦 | ALGOL 60 とCOBOLに基づいた経済タスク用 | Minsk-22 | |
MALGOL | 1966年 | publ. A. Viil, M Kotli & M. Rakhendi | エストニア・ソビエト社会主義共和国 | Minsk-22 | |
ALGAMS | 1967年 | GAMS(中型機のための自動プログラミング)グループとコメコン科学アカデミーの共同開発 | コメコン | Minsk-22、後に ES EVM、BESM | |
ALGOL/ZAM | 1967年 | ポーランド | ZAM(ポーランド製) | ||
Simula 67 | 1967年 | オーレ=ヨハン・ダール、クリステン・ニゴール | ノルウェー | ALGOL 60 にオブジェクト指向を導入 | UNIVAC 1107 |
Chinese Algol | 1972年 | 中国 | 漢字を表示可能 | ||
DG/L | 1972年 | データゼネラル | アメリカ | Eclipseファミリ | |
S-algol | 1979年 | Ron Morrison | イギリス | 直交データ型を追加。教育向け | PDP-11(後に Java VM 上にも実装) |
注釈
- ^ ファミリー名は大文字/小文字をまじえて表記される場合 (Algol 60) と、全て大文字で表記される場合 (ALGOL 68) がある。本項目では ALGOL で統一する。
- ^ ALGOL 68 の用語で入出力を意味する。
- ^ a b 対応フォントが少ない。フリーフォントでは、DejaVu Sans、Quivira、Symbola、和田研2004フォントの絵文字対応版、にしき的フォントなど。JIS X 0208の表記に置き換えるなら「10」のような外見となる。
出典
- ^ P.HAYES 1978, p. 38.
- ^ Collected Algorithms of the ACM ACMによるアルゴリズム集
- ^ “Algol-like languages ,Introduction” (1996年9月). 2012年1月17日閲覧。
- ^ a b Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K. et al. (May 1960). Naur, Peter. ed. Report on the Algorithmic Language ALGOL 60. Copenhagen. doi:10.1145/367236.367262. ISSN 0001-0782
- ^ Perlis, A.J.; Samelson, K. (1958), “Preliminary report: international algebraic language”, Communications of the ACM 1 (12): 8-22, doi:10.1145/377924.594925
- ^ “Revised Report on the Algorithmic Language Algol 60” (1963年). 2007年6月25日時点のオリジナルよりアーカイブ。2007年6月8日閲覧。
- ^ “Revised Report on the Algorithmic Language ALGOL 68” (1973年). 2010年8月25日閲覧。
- ^ Knuth, Donald E. (1964). “Backus Normal Form vs Backus Naur Form”. Communications of the ACM 7 (12): 735–736. doi:10.1145/355588.365140.
- ^ ACM Award Citation / Peter Naur, 2005
- ^ "Hints on Programming Language Design", C.A.R. Hoare, December 1973. Page 27. (なお、この言葉は間違ってエドガー・ダイクストラのものとされることがある。ダイクストラも ALGOL 60 コンパイラの実装に参加していた)
- ^ Jonathan Rees and William Clinger (Editors), Hal Abelson, R. K. Dybvig et al.. “Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60)”. 2009年10月20日閲覧。
- ^ Peter O'Hearn and Robert D. Tennent. 1996. Algol-Like Languages. Birkhauser Boston Inc., Cambridge, MA, USA.
- ^ “The Encyclopedia of Computer Languages”. 2012年1月20日閲覧。
- ^ Computer Museum History, Historical Zuse-Computer Z23, restored by the Konrad Zuse Schule in Hünfeld, for the Computer Museum History Center in Mountain View (California) USA
- ^ Daylight, E. G. (2011). “Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s”. The Computer Journal. doi:10.1093/comjnl/bxr002 .
- ^ Kruseman Aretz, F.E.J. (30 June 2003). “The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1”. Software Engineering. History of Computer Science. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica
- ^ Koffman, Eliot. “All I Really Need to KnowI Learned in CS1”. 2012年5月20日閲覧。
- ^ Aho, Alfred V.; Ravi Sethi, Jeffrey D. Ullman (1986). Compilers: Principles, Techniques, and Tools (1st ed.). Addison-Wesley. ISBN 0-201-10194-7, Section 7.5, and references therein
- ^ https://doi.org/10.1145/366573.366599
- ^ "803 ALGOL", the manual for Elliott 803 ALGOL
- ^ Hello world! ALGOL Example Program page
- ^ How ASCII Got Its Backslash, Bob Bemer
- ^ Baumann, R. (October 1961). “ALGOL Manual of the ALCOR Group, Part 1 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen: 206–212.
- ^ Baumann, R. (December 1961). “ALGOL Manual of the ALCOR Group, Part 2 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen 6: 259–265.
- ^ Baumann, R. (April 1962). “ALGOL Manual of the ALCOR Group, Part 3 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen 2.
- ^ “GOST 10859 standard”. 2007年6月16日時点のオリジナルよりアーカイブ。2007年6月5日閲覧。
ALGOLと同じ種類の言葉
固有名詞の分類
- ALGOLのページへのリンク