| パラダイム | 手続き的、命令的、構造化された |
|---|---|
| 家族 | アルゴル |
| デザイン: | バッカス、バウアー、グリーン、カッツ、マッカーシー、ナウル、ペルリス、ルーティシャウザー、サメルソン、ファン・ワインガルデン、ヴォーコワ、ウェグシュタイン、ウッガー |
| 初登場 | 1960年 |
| タイピングの規律 | 静的、強い |
| 範囲 | 語彙 |
| 影響を受けた | |
| アルゴル58 | |
| 影響を受けた | |
| その後のほとんどの命令型言語(いわゆるALGOL系言語)、例えばPL/I、 Simula、CPL、Pascal、Ada、C | |
ALGOL 60 ( Algorithmic Language 1960の略) は、コンピュータプログラミング言語ALGOLファミリーの 1 つです。これは、コード ブロックとそれらを区切るためのと のペアを導入したALGOL 58の後継であり、構造化プログラミングの台頭における重要な進歩を表しています。ALGOL 60 は、関数定義 (再帰的に呼び出すことができる) を実装した最初の言語の 1 つです。ALGOL 60 の関数定義は、レキシカル スコープを使用して、互いにネストできます (これは、どのプログラミング言語でも初めて導入されました)。ALGOL 60 は、 CPL、PL/I、Simula、BCPL、B、Pascal、Cなど、他の多くの言語を生み出しました。当時のほぼすべてのコンピュータには、ALGOL 60 の概念に基づいた
システム プログラミング言語がありました。beginend
Niklaus Wirth は、Pascalの開発に移る前に、ALGOL 60 に基づいて独自のALGOL W を開発しました。Algol-W は次世代の ALGOL となる予定でしたが、ALGOL 68委員会は、簡素化された ALGOL 60 ではなく、より複雑で高度な設計を決定しました。公式の ALGOL バージョンは、最初に公開された年にちなんで命名されています。ALGOL 68 は ALGOL 60 とは大幅に異なり、その点が部分的に批判されたため、一般に「ALGOL」は ALGOL 60 の方言を指します。
標準化
ALGOL 60 はCOBOLとともに標準化を求めた最初の言語でした。
- ISO 1538:1984 プログラミング言語 – ALGOL 60 (安定化)
- ISO/TR 1672:1977 ALGOL 基本シンボルのハードウェア表現 ... (現在は廃止)
歴史
ALGOL 60 は、主に米国およびヨーロッパのコンピュータ科学者の研究に使用されていました。その記述に標準入出力機能がないことと、大手コンピュータベンダーがこの言語に関心を示さなかったことから、商用アプリケーションでの使用は妨げられました。しかし、ALGOL 60 はアルゴリズムの公開の標準となり、その後の言語開発に大きな影響を与えました。
ジョン・バッカスは、 ALGOL 58専用にプログラミング言語を記述するバッカス正規形の方法を開発しました。これはALGOL 60用にピーター・ナウアによって改訂・拡張され、ドナルド・クヌースの提案によりバッカス・ナウア形式と改名されました。[1]
ピーター・ナウア:「私はALGOL Bulletinの編集者として、言語に関する国際的な議論に巻き込まれ、1959年11月にヨーロッパ言語設計グループのメンバーに選ばれました。この立場で、私は1960年1月にパリで開催されたALGOL 60会議の結果として作成されたALGOL 60レポートの編集者でした。」[2]
パリでの会議(1月11日から16日)には以下の人々が出席しました。
- フリードリヒ・ルートヴィヒ・バウアー、ペーター・ナウル、ハインツ・ルーティシャウザー、クラウス・ザメルソン、ベルナール・ヴォーコワ、アドリアン・ファン・ワインガルデン、マイケル・ウッドガー(ヨーロッパ出身)
- ジョン・ワーナー・バッカス、ジュリアン・グリーン、チャールズ・カッツ、ジョン・マッカーシー、アラン・ジェイ・パーリス、ジョセフ・ヘンリー・ウェグスタイン(米国)。
アラン・パーリスは、この会議の様子を次のように鮮明に描写しています。「会議は疲れ果て、果てしなく、そして爽快でした。自分の良いアイデアが他人の悪いアイデアと一緒に却下されると、イライラしました。しかし、会議中ずっと勤勉さは続きました。13 人の相性は抜群でした。」
この言語には元々再帰が含まれていなかった。委員会の一部の意に反して、仕様の最後の段階で再帰が追加された。[3]
ALGOL 60は、その後に続く多くの言語に影響を与えました。トニー・ホーアは次のように述べています。「これは時代をはるかに先取りした言語であり、その前身だけでなく、ほぼすべての後継言語よりも優れたものでした。」[4] [5]
ALGOL 60 実装タイムライン
現在までに、ALGOL 60の拡張、派生、サブ言語は少なくとも70件存在しています。[6]
Burroughs 方言には、ESPOLやNEWPなどの特殊なシステム プログラミング方言が含まれていました。
プロパティ
公式に定義された ALGOL 60 には I/O 機能がなく、実装は互いに互換性がほとんどない方法で独自に定義していました。対照的に、ALGOL 68 は、トランスプット (ALGOL 68 の用語で入力/出力) 機能の広範なライブラリを提供していました。
ALGOL 60 では、パラメータの受け渡しに2 つの評価戦略が提供されていました。一般的なのは、値渡しと名前渡しです。プロシージャ宣言では、各仮パラメータのどちらを使用するかを指定していました。値渡しでは値が指定され、名前渡しでは省略されます。名前渡しは、参照渡しとは対照的に、特定の効果があります。たとえば、パラメータを値または参照として指定しないと、渡される実際のパラメータが整数変数とその同じ整数変数でインデックス付けされた配列である場合に、2 つのパラメータの値を交換するプロシージャを開発することはできません。[19] swap(i, A[i]) へのポインタを関数に渡すことを考えてみましょう。これで、swap が参照されるたびに再評価されます。i := 1 で A[i] := 2 とすると、swap が参照されるたびに、値の別の組み合わせ ([1,2]、[2,1]、[1,2] など) が返されます。実際の引数として渡されたランダム関数でも同様の状況が発生します。
名前による呼び出しは、それを実装するために使用される興味深い「サンク」で多くのコンパイラ設計者に知られています。Donald Knuth は、 「再帰と非ローカル参照」を正しく実装したコンパイラを区別するために、「男か少年かのテスト」を考案しました。このテストには、名前による呼び出しの例が含まれています。
ALGOL 60 予約語と制限付き識別子
標準のBurroughs Large Systemsサブ言語には、このような予約語が 35 個あります。
ALPHAARRAYBEGINBOOLEANCOMMENTCONTINUEDIRECTDODOUBLEELSEENDEVENTFALSEFILEFORFORMATGOIFINTEGERLABELLISTLONGOWNPOINTERPROCEDUREREALSTEPSWITCHTASKTHENTRUEUNTILVALUEWHILEZIP
標準の Burroughs Large Systems サブ言語には、このような制限付き識別子が 71 個あります。
ACCEPTANDATTACHBYCALLCASECAUSECLOSEDEALLOCATEDEFINEDETACHDISABLEDISPLAYDIVDUMPENABLEEQLEQVEXCHANGEEXTERNALFILLFORWARDGEQGTRIMPININTERRUPTISLBLEQLIBERATELINELOCKLSSMERGEMODMONITORMUXNEQNONOTONOPENOROUTPICTUREPROCESSPROCUREPROGRAMDUMPRBREADRELEASEREPLACERESETRESIZEREWINDRUNSCANSEEKSETSKIPSORTSPACESWAPTHRUTIMESTOWAITWHENWITHWRITE
また、すべての組み込み関数の名前も表示されます。
標準演算子
例と移植性の問題
コードサンプルの比較
アルゴル60
手順Absmax(a) サイズ:(n, m) 結果:(y) 添え字:(i, k);
値n, m;配列a;整数n, m, i, k;実数y;
コメントサイズ n × m の行列 a の絶対最大要素。
y にコピーされ、この要素の添え字が i と k にコピーされます。
整数p、qを開始します。
y := 0; i := k := 1;
p := 1ステップ1 、 nまで実行
、 q := 1ステップ1 、 mまで実行
、 abs(a[p, q]) > y の場合、 y := abs(a[p, q]);から
開始
i := p; k := q
終了
終了Absmax
太字のテキストの書き方は実装によって異なります。一部の実装では、引用符を含む「INTEGER」という単語を上記のintegerの代わりに使用して、これを特別なキーワードとして 指定する必要があります。
以下はElliott 803 ALGOLを使用して表を作成する方法の例です。[20]
浮動小数点アルゴリズムテスト リアルA、B、C、Dの開始 読むD' A:= 0.0 ステップD 6.3まで実行 始める プリントパンチ(3)、££L??' B := SIN(A)' C := COS(A)' 印刷パンチ(3)、同一線、整列(1,6)、A、B、C' 終わり' 終わり'
ALGOL 60 ファミリー
ALGOL 60 には I/O 機能がなかったため、ALGOL には移植可能なhello world プログラムはありません。次のプログラムは、Unisys A シリーズ メインフレームの ALGOL 実装でコンパイルして実行できます (現在でも実行できます)。これは、ミシガン大学ディアボーン校のコンピューターおよび情報科学部の Hello world! ALGOL サンプル プログラム ページ[22]の言語ガイド[21]から取得したコードを単純に簡略化したものです。
始める ファイル F(KIND=REMOTE); EBCDIC配列E[0:11]; E を "HELLO WORLD!" に置き換えます。 書き込み(F, *, E); 終わり。
ここで、*等はFORTRANで使用されるフォーマット指定を表す。例[23]
インライン形式を使用したより単純なプログラム:
BEGIN
FILE F ( KIND = REMOTE );
WRITE ( F , < "HELLO WORLD!" > );
END .
Display ステートメントを使用したさらに簡単なプログラム:
BEGIN DISPLAY ( "HELLO WORLD!" ) END .
Elliott Algol I/Oを使用した別の例は次のとおりです。Elliott Algolは「open-string-quote」と「close-string-quote」に異なる文字を使用していました。ここでは次のように表されます。 ' そして ' 。
プログラムHiFolks ; begin print ' Hello world ' end ;
これは Elliott 803 Algol (A104) のバージョンです。標準の Elliott 803 は 5 穴の紙テープを使用していたため、大文字のみでした。コードには引用符がなかったので、引用符の開始には£ (ポンド記号)、引用符の終了には? (疑問符)を使用しました。特別なシーケンスは二重引用符で囲みました (たとえば、£L?? はテレプリンターで新しい行を生成しました)。
ハイフォークス
始める
£HELLO WORLD£L?? を印刷します。'
終わり'
ICT 1900シリーズのAlgol I/Oバージョンでは、紙テープまたはパンチカードからの入力が可能でした。紙テープの「フル」モードでは小文字が使用できました。出力はラインプリンタで行われました。'('、')'、および%の使用に注意してください。[24]
「プログラム」(こんにちは)
'始める'
「コメント」の引用開始は「(」、引用終了は「)」、印刷可能なスペースは
スペースは無視されるため、% と記述します。
テキストを書き込みます('('HELLO%WORLD')');
'終わり'
'仕上げる'
飛躍
LEAP は、ALGOL 60 プログラミング言語の拡張機能で、トリプルの連想記憶を提供します。トリプル内の 3 つの項目は、オブジェクトの属性が特定の値を持つという関連付けを示します。LEAP は、1967 年に Jerome Feldman (カリフォルニア大学バークレー校) と Paul Rovner (MIT リンカーン研究所) によって作成されました。LEAP は SAIL にも実装されました。
参照
参考文献
- ^ Knuth, Donald E. (1964 年 12 月). 「Backus 正規形と Backus Naur 形」. Communications of the ACM . 7 (12): 735–6. doi : 10.1145/355588.365140 . S2CID 47537431.
- ^ ACM 賞受賞 / ピーター・ナウア、2005 年
- ^ van Emden, Maarten (2014). 「プログラミングに再帰が取り入れられた経緯: 陰謀、裏切り、高度なプログラミング言語セマンティクスの物語」A Programmer's Place。
- ^ Hoare, CAR (1973 年 12 月). 「プログラミング言語設計のヒント」(PDF) . p. 27.(この発言は、最初の ALGOL 60コンパイラの実装にも関わったEdsger W. Dijkstraの発言であると誤って解釈されることがあります。)
- ^ Abelson, Hal ; Dybvig, RK ; et al. Rees, Jonathan; Clinger, William (eds.). 「アルゴリズム言語スキームに関する改訂版(3)報告書 (ALGOL 60の記念に捧げる)」 。 2009年10月20日閲覧。
- ^ コンピュータ言語百科事典 2011年9月27日アーカイブ、Wayback Machine
- ^ Daylight, EG ( 2011 ). 「ダイクストラの一般化への呼びかけ: 再帰的手順の出現、1950 年代後半から 1960 年代前半」。The Computer Journal。54 ( 11 ): 1756–1772。doi :10.1093/comjnl/bxr002。
- ^ Kruseman Aretz、FEJ (2003 年 6 月 30 日)。「Electrologica X1 用の Dijkstra-Zonneveld ALGOL 60 コンパイラ」(PDF)。ソフトウェア エンジニアリング。コンピュータ サイエンスの歴史。アムステルダム: Centrum Wiskunde & Informatica。ISSN 1386-3711。2004年 1 月 17 日の オリジナル(PDF)からアーカイブ。
- ^ Irons, Edgar T.、「ALGOL 60 用の構文指向コンパイラ」、Communications of the ACM、Vol. 4、p. 51。(1961 年 1 月)
- ^ Kurtz, Thomas E. (1978). 「BASIC」.プログラミング言語の歴史. pp. 515–537. doi : 10.1145/800025.1198404 . ISBN 0127450408。
- ^ Gries, D.; Paul, M.; Wiehle, H. R (1965). 「ALCOR Illinois 7090 で使用されたいくつかの技術」Communications of the ACM . 8 (8): 496–500. doi : 10.1145/365474.365511 . S2CID 18365024.
- ^ Bayer, R.; Gries, D.; Paul, M.; Wiehle, HR (1967). 「ALCOR Illinois 7090/7094 死後ダンプ」Communications of the ACM . 10 (12): 804–808. doi : 10.1145/363848.363866 . S2CID 3783605.
- ^ Rechenautomaten mit Trommelspeicher、Förderverein der Technischen Sammlung ドレスデン
- ^ Mounier-Kuhn, Pierre (2014). 「フランスにおけるAlgol: ユニバーサルプロジェクトから組み込み文化へ」IEEE Annals of the History of Computing . 36 (4): 6. ISSN 1058-6180.
- ^ Kurtz、前掲書、517ページ。
- ^ ジャン=クロード、ブサール (1964 年 6 月)。 Etude et réalisation d'un compilateur Algol60 sur Calculur éléctronique du type IBM 7090/94 et 7040/44 [電子計算機 IBM 7090/94 および 7040/44 上のコンパイラー Algol60 の設計と実装] (PhD) (フランス語)。ジョゼフ フーリエ大学 - グルノーブル I.
- ^ クロード・ペア (1965 年 4 月 27 日)。ALGOL のコンパイルに関する説明。欧州地域 1620 ユーザー グループ。 IBM。
- ^ クルーゼマン・アレッツ、FEJ (1973)。Algol 60 の Algol 60 コンパイラ。数学センター地区。アムステルダム: 数学センター。
- ^ Aho, Alfred V. ; Sethi, Ravi ; Ullman, Jeffrey D. (1986).コンパイラ: 原理、テクニック、ツール(第 1 版). Addison-Wesley. ISBN 978-0-201-10194-2。、第7.5節およびその中の参照
- ^ 「803 ALGOL」、 Elliott 803 ALGOLのマニュアル
- ^ 「ALGOLプログラミング言語」www.engin.umd.umich.edu。2010年2月10日時点のオリジナルよりアーカイブ。2022年1月11日閲覧。
- ^ 「Hello world! サンプルプログラム」www.engin.umd.umich.edu。2010年2月4日時点のオリジナルよりアーカイブ。2022年1月11日閲覧。
- ^ Fortran#"Hello, World!" の例
- ^ 「ICL 1900 シリーズ: Algol 言語」ICL 技術出版物 3340。1965 年。
さらに読む
- Dijkstra, Edsger W. (1961)。「ALGOL 60 変換: X1 用の ALGOL 60 トランスレータと ALGOL 60 用トランスレータの作成(PDF) (技術レポート)。」アムステルダム: Mathematisch Centrum。35。
- Randell, Brian ; Russell, Lawford John (1964)。ALGOL 60 実装: コンピュータ上での ALGOL 60 プログラムの変換と使用。Academic Press。OCLC 526731 。Whetstone コンパイラの設計。コンパイラの実装に関する初期に公開された説明の 1 つです。関連論文を参照してください: Whetstone Algol Revisited、およびBrian Randellによる The Whetstone KDF9 ALGOL Translator
- グース、ゲルハルト[ドイツ語] (2017-08-07)。 Geschichte der deutschsprachigen Informatik - Programmiersprachen und Übersetzerbau [ドイツ語圏における情報学の歴史 - プログラミング言語とコンパイラー設計] (PDF) (ドイツ語)。カールスルーエ、ドイツ: Fakultät für Informatik、カールスルーエ工科大学(KIT)。2022-05-19 にオリジナルからアーカイブ(PDF)されました。2022 年 11 月 14 日に取得。(11ページ)
外部リンク
- アルゴリズム言語 ALGOL 60 に関する改訂報告書 (ピーター・ナウアー他著) ALGOL の定義
- ALGOL 60 の BNF 構文の概要
- 「皇帝の古着」 – ホーアの1980年のACMチューリング賞受賞スピーチ。ALGOLの歴史と彼の関与について語る。
- MARST、無料のALGOL-Cトランスレータ
- FP6000 用の ALGOL 60 の実装。Wayback Machineに 2020-07-25 にアーカイブされました。実装に関するいくつかの問題についての議論。
- Naur, Peter (1978年8 月)。「ALGOL 60 開発の最終段階におけるヨーロッパ側」。ACM SIGPLAN通知。13 (8): 15–44。doi :10.1145/960118.808370。S2CID 15552479 。
- エディンバラ大学は、当初 Atlas から KDF-9 にブートストラップされた Atlas Autocode コンパイラに基づいて、Algol60 (後に Algol60M 用に更新) 用のコンパイラを作成しました。エディンバラ コンパイラは、ICL1900、ICL4/75 (IBM360 クローン)、および ICL2900 用のコードを生成しました。以下は、Algol60 Archived 2020-05-15 at the Wayback Machineの BNFと ICL2900 コンパイラ ソース Archived 2020-05-15 at the Wayback Machine、ライブラリ ドキュメント Archived 2020-05-15 at the Wayback Machine 、およびBrian Wichmann のテストを含むかなりのテスト スイート Archived 2020-05-15 at the Wayback Machineです。 Archived 2020-05-15 at the Wayback Machineまた、かなり表面的な Algol60 から Atlas Autocode へのソースレベル トランスレータ Archived 2020-05-15 at the Wayback Machineもあります。
- Eric S. Raymondの Retrocomputing Museum には、C で書かれた NASE ALGOL 60 インタープリターへのリンクなどもあります。
- NASEインタープリター
- B5000とそこにいた人々の物語:専用のALGOLコンピュータ[1]、[2]
- Bottenbruch, Hermann (1961). ALGOL 60 の構造と使用 (レポート). doi : 10.2172/4020495 . OSTI 4020495.
- NUMAL ALGOL 60 の数値手続きのライブラリ。The Stichting Centrum Wiskunde & Informatica ( Stichting Mathematisch Centrum の法的後継者) の法的所有者によって開発されました。
- ALGOL 60 リソース: トランスレータ、ドキュメント、プログラム
- ラケットに含まれるALGOL 60
