ALGOL 60
ALGOL 60 ( Algorithmic Language 1960の略)は、ALGOLファミリーのコンピュータープログラミング言語のメンバーです。コードブロックと、それらを区切るための開始ペアと終了ペアを導入したALGOL 58に続きます。 ALGOL 60は、レキシカルスコープを持つネストされた関数定義を実装した最初の言語でした。 CPL、Simula、BCPL、B、Pascal、Cなど、他の多くのプログラミング言語が生まれました。
Niklaus Wirthは、Pascalの開発に移る前に、ALGOL 60を基に独自のALGOL Wを開発しました。 Algol-Wは次世代のALGOLであることが意図されていましたが、ALGOL 68委員会は、クリーンな簡素化されたALGOL 60ではなく、より複雑で高度な設計を決定しました。アルゴル68はアルゴル60とは実質的に異なり、そのように部分的に批判されているため、一般に「アルゴル」はアルゴル60の方言を指します。
標準化
ALGOL 60 — COBOLを使用—標準化を追求した最初の言語でした。
- ISO 1538:1984プログラミング言語— Algol 60(安定化)
- ISO / TR 1672:1977 ALGOL基本シンボルのハードウェア表現...(現在廃止)
歴史
ALGOL 60は、主に米国およびヨーロッパの研究コンピューター科学者によって使用されました。商用アプリケーションでの使用は、その記述に標準の入出力機能がなく、大規模なコンピューターベンダーが言語に興味を持っていないために妨げられました。ただし、ALGOL 60はアルゴリズムの公開の標準となり、将来の言語開発に大きな影響を与えました。
John Backusは、ALGOL 58専用のプログラミング言語を記述するBackus標準形式のメソッドを開発しました。ALGOL60のPeter Naurによって改訂および拡張され、Donald Knuthの提案でBackus–Naur形式に名前が変更されました。
ピーターナウア:「ALGOL Bulletinの編集者として、私は言語の国際的な議論に引き込まれ、1959年11月にヨーロッパ言語デザイングループのメンバーに選ばれました。この立場で、私はALGOL 60レポートの編集者で、 1960年1月にパリで開催されたALGOL 60会議の結果。」
次の人々がパリでの会議に参加しました(1月11日から16日まで)。
- フリードリヒ・L・バウアー、ピーター・ナウア、ハインツ・ルティスハウザー、クラウス・サメルソン、バーナード・ヴォコイ、アドリアーン・ファン・ウィンガーデン、マイケル・ウッドガー(ヨーロッパ出身)
- ジョン・W・バッカス、ジュリアン・グリーン、チャールズ・カッツ、ジョン・マッカーシー、アラン・J・ペルリス、ジョセフ・ヘンリー・ウェグシュタイン(米国出身)。
アラン・ペルリスは会議について鮮明な説明をしました。 13は素晴らしかった。」
この言語にはもともと再帰が含まれていませんでした。委員会の一部の意向に反して、土壇場で仕様に挿入されました。
ALGOL 60は、それに続く多くの言語に影響を与えました。 Tony Hoareは次のように述べています。「これはその時代よりもはるかに先の言語であり、前任者だけでなく後継者のほぼすべてをも改善した言語です。」 ALGOLのブロック構造と語彙範囲を採用したLispの変種であるSchemeプログラミング言語は、ALGOLに敬意を表して標準文書に「アルゴリズム言語スキームに関する改訂レポート」という文言も採用しました。
ALGOL 60実装タイムライン
現在までに、Algol 60の少なくとも70の拡張、拡張、派生、およびサブ言語がありました。
名前 | 年 | 著者 | 状態 | 説明 | ターゲットCPU |
---|---|---|---|---|---|
X1 ALGOL 60 | 1960年8月 | エドガー・W・ダイクストラとヤープ・A・ゾンネフェルト | オランダ | ALGOL 60の最初の実装 | Electrologica X1 |
アルゴル | 1960 | エドガー・T・アイアンズ | 米国 | アルゴル60 | CDC 1604 |
バローズアルゴル (いくつかのバリアント) | 1961 | バローズコーポレーション(ホア、ダイクストラなどが参加) | 米国 | バローズ(および現在はユニシスMCPベース)コンピューターの基礎 | バローズの大規模システム その中域も同様です。 |
ケースALGOL | 1961 | 米国 | Simulaは元々、ケースALGOLのシミュレーション拡張として契約されていました。 | UNIVAC 1107 | |
GOGOL | 1961 | ウィリアム・M・マッキーマン | 米国 | ODINタイムシェアリングシステム用 | PDP-1 |
DASK ALGOL | 1961 | ピーター・ナウア、ジョーン・ジェンセン | デンマーク | アルゴル60 | RegnecentralenのDASK |
SMIL ALGOL | 1962 | トルギル・エクマン、カール・エリック・フレバーグ | スウェーデン | アルゴル60 | ルンド大学のSMIL |
GIER ALGOL | 1962 | ピーター・ナウア、ジョーン・ジェンセン | デンマーク | アルゴル60 | RegnecentralenのGIER |
ダートマスアルゴル30 | 1962 | トーマス・ユージン・カーツ他 | 米国 | LGP-30 | |
USS 90アルゴル | 1962 | L.ペトローネ | イタリア | ||
エリオット・アルゴル | 1962 | カーホア | イギリス | 1980年のチューリング賞講演で議論された | エリオット803&エリオット503 |
アルゴル翻訳者 | 1962 | G.ファンデルメイとWLファンデルポエル | オランダ | スタッスベドリフデアポステリジェン、Telegrafie en Telefonie | シマウマ |
キッズグローブアルゴル | 1963 | FGダンカン | イギリス | イングリッシュエレクトリックカンパニーKDF9 | |
バルゴール | 1963 | ヴァル・ショレ | 米国 | META IIコンパイラコンパイラのテスト | |
FP6000アルゴル | 1963 | ロジャー・ムーア | カナダ | サスカチュワン電力公社のために書かれた | FP6000 |
砥石 | 1964 | ブライアンランデルとローフォードジョンラッセル | イギリス | English Electric Companyの原子力部門。 Ferranti Pegasus、National Physical Laboratories ACE、およびEnglish Electric DEUCEの実装の前身。 | イングリッシュエレクトリックカンパニーKDF9 |
NU ALGOL | 1965年 | ノルウェー | ユニバック | ||
アルゲック | 1965年 | ソビエト連邦 | ミンスク-22 | ALGOL-60およびCOBOLサポートに基づく、経済的なタスクのためのАЛГЭК | |
マルゴール | 1966 | publ。 A.ヴィイル、Mコトリ&M.ラケンディ、 | エストニアSSR | ミンスク-22 | |
藻類 | 1967 | GAMSグループ(ГАМС、группаавтоматизациипрограммированиядлямашинсреднегокласса)、Comecon Academies of Scienceの協力 | コメコン | ミンスク-22、後にES EVM、BESM | |
ALGOL / ZAM | 1967 | ポーランド | ポーランドのZAMコンピューター | ||
中国のアルゴル | 1972 | 中国 | 記号システムを介して表される漢字 | ||
DG / L | 1972 | 米国 | DG Eclipseコンピューターファミリー | ||
NASE | 1990 | エリック・シェーンフェルダー | ドイツ | 通訳 | LinuxおよびMS Windows |
マースト | 2000年 | アンドリュー・マホリン | ロシア | Algol-60からCへのトランスレーター | GNU Compiler CollectionでサポートされているすべてのCPU。 MARSTはGNUプロジェクトの一部です |
バローズ方言には、ESPOLやNEWPなどの特別なシステムプログラミング方言が含まれていました。
物性
公式に定義されているALGOL 60にはI / O機能がありませんでした。実装は、相互にほとんど互換性のない方法で独自に定義しました。対照的に、ALGOL 68は、広範なトランスポートライブラリ(入力/出力用のALGOL 68用語)を提供しました。
ALGOL 60では、パラメーターを渡すための2つの評価戦略として、一般的な値による呼び出しと名前による呼び出しが許可されていました。名前による呼び出しには、参照による呼び出しとは対照的に、特定の効果があります。たとえば、パラメーターをvalueまたはreferenceとして指定せずに、渡される実際のパラメーターが整数変数およびその同じ整数変数によってインデックス付けされた配列である場合、2つのパラメーターの値を交換するプロシージャを開発することは不可能です。関数にswap(i、A)へのポインタを渡すことを考えてください。これで、スワップが参照されるたびに、再評価されます。 i:= 1およびA:= 2と言うと、swapが参照されるたびに、値の他の組み合わせ(、、など)が返されます。同様の状況は、実引数として渡されたランダム関数でも発生します。
名前による呼び出しは、それを実装するために使用される興味深い「サンク」で多くのコンパイラ設計者に知られています。ドナルド・クヌースは、「男または少年テスト」を考案して、「再帰および非ローカル参照」を正しく実装したコンパイラーを分離しました。このテストには、名前による呼び出しの例が含まれています。
ALGOL 60予約語と制限付き識別子
標準的なバローズの大規模システムのサブ言語には、このような予約語が35個あります。
|
|
|
|
|
標準的なバローズの大規模システムのサブ言語には、このような制限付き識別子が71個あります。
|
|
|
|
|
また、すべての組み込み関数の名前。
標準演算子優先 | オペレーター | |
---|---|---|
最初 算術 | 最初 | ↑(パワー) |
第二 | ×、/(実数)、÷(整数) | |
三番 | +、- | |
第二 | 、≤、=、≥、>、≠ | |
三番 | ¬(ではない) | |
第4 | ∧(および) | |
第五 | ∨(または) | |
第六 | ⊃(含意) | |
第七 | ≡(同等) |
例と移植性の問題
コードサンプルの比較
ALGOL 60 手続き Absmax(a)サイズ:(n、m)結果:(y)下付き文字:(i、k); 値 n、m; 配列 a; 整数 n、m、i、k; 本当の y; コメントサイズn x mのマトリックスaの絶対最大要素がyに転送され、この要素の添字がiおよびkに転送されます。 整数 p、qを開始します。 y:= 0; i:= k:= 1; = 1つのステップ 1 N q に対して 行う まで :p に対して M = 1つのになるまで ステップ 1 を行う 場合 、ABS(A)> yは、次に Y 開始 := ABS(A)を、 i:= p; k:= q end end Absmax実装は、太字のテキストの記述方法が異なります。一部の実装では、上記のintegerの代わりに、引用符を含む単語「INTEGER」を使用する必要があります。これにより、特別なキーワードとして指定されます。
以下は、Elliott 803 ALGOLを使用してテーブルを作成する方法の例です。
浮動小数点ALGOL TEST 'BEGIN REAL A、B、C、D' READ D 'FOR A:= 0.0 Step D UN 6.3 DO PRINT PUNCH(3)、££L ??' B:= SIN(A) 'C:= COS(A)' PRINT PUNCH(3)、SAMELINE、ALIGNED(1,6)、A、B、C 'END' END 'ALGOL 60ファミリーALGOL 60にはI / O機能がないため、ALGOLにはポータブルなHello Worldプログラムはありません。次のプログラムは、Unisys AシリーズメインフレームのALGOL実装上でコンパイルおよび実行できます(そしてこれからも実行されます)。ミシガン大学ディアボーンコンピュータおよび情報科学部Hello Worldの言語ガイドから取られたコードの簡単な単純化です。 ! ALGOLサンプルプログラムページ。
BEGIN FILE F(KIND = REMOTE); EBCDICアレイE; 「HELLO WORLD!」でEを置き換えます。 WRITE(F、*、E);終わり。インライン形式を使用した簡単なプログラム:
BEGIN FILE F(KIND = REMOTE); WRITE(F、"HELLO WORLD!">);終わり。Displayステートメントを使用したさらに簡単なプログラム:
BEGIN DISPLAY( "HELLO WORLD!")END。Elliott Algol I / Oを使用する別の例は次のとおりです。エリオット・アルゴルは、「open-string-quote」と「close-string-quote」に異なる文字を使用しましたが、ここでは「と」で表されています。
プログラム HiFolks; プリント 開始 'Hello world' end ;エリオット803アルゴル(A104)のバージョンは次のとおりです。標準のエリオット803は5穴の紙テープを使用していたため、大文字のみでした。コードには引用文字が含まれていなかったため、公開引用符には£(英国ポンド記号)が使用され、? (疑問符)近い引用。特別なシーケンスを二重引用符で囲みました(例:££L ??がテレプリンターで新しい行を作成しました)。
HIFOLKS 'BEGIN PRINT£HELLO WORLD£L ??'終わり'ICT 1900シリーズのAlgol I / Oバージョンでは、紙テープまたはパンチカードからの入力が許可されていました。紙テープの「フル」モードでは小文字を使用できました。出力はラインプリンターへでした。 '('、 ')'および%の使用に注意してください。
「プログラム」(こんにちは)「開始」「コメント」開いている引用符は「(」、「閉じる」は「)」です。スペースが無視されるため、印刷可能スペースを書き込む必要があります。 WRITE TEXT( '(' HELLO%WORLD ')'); 「終了」「終了」