← ホームへ戻る

ALGOL 60現代プログラミング言語の礎を築いた構造化言語

🗓 2026年8月13日

現代の多くのプログラミング言語に共通する設計思想の源流を辿ると、1960年に登場したALGOL 60(Algorithmic Language 1960)に行き当たります。この言語は、単なる計算手段ではなく、アルゴリズムを記述するための共通言語として設計され、その後のコンピュータサイエンスに革命的な影響を与えました。

ALGOL 60は、先行するALGOL 58の概念を継承しつつ、「begin」と「end」によるコードブロックの導入など、構造化プログラミングの先駆けとなる機能を実装しました。これにより、複雑なプログラムを論理的な単位で分割して記述することが可能になりました。

Key Facts

  • 構造化の先駆者: コードブロックの概念を導入し、構造化プログラミングの普及に寄与した。
  • 高度な機能: 再帰呼び出しが可能な関数定義や、関数内に関数を定義できる入れ子構造(レキシカルスコープ)をいち早く実装した。
  • 言語設計への貢献: 言語仕様を記述するための「バッカス・ナウア形式(BNF)」の発展に直接的に寄与した。
  • 広範な影響力: Pascal、C、Ada、Simulaなど、後続の主要な命令型言語の設計に多大な影響を与えた。
  • 学術的標準: 商用利用よりも、研究者間でのアルゴリズム公開のための標準言語として重宝された。

言語の特性と技術的革新

ALGOL 60は、静的で強力な型付け(Static, Strong Typing)を採用した命令型・手続き型言語です。特に注目すべきは、そのスコープ管理と関数設計にあります。関数を別の関数の中に定義できるレキシカルスコープの導入は、当時の言語設計において非常に先進的な試みでした。

また、パラメータ渡しにおいて「値渡し(call-by-value)」と「名前渡し(call-by-name)」という2つの戦略を提供していました。特に名前渡しは、引数が参照されるたびに再評価されるため、参照渡しとは異なる特有の挙動を示し、高度な柔軟性を持っていました。

言語レベルの定義

ALGOL 60の仕様書では、言語を3つのレベルに分けて定義していました。理論的な基準となる「参照言語(Reference Language)」、出版物などで用いられる「出版言語(Publication Language)」、そして実際のハードウェアで動作させるための「ハードウェア表現(Hardware Representations)」です。これにより、理論的な純粋さと実装上の制約を切り離して管理することができました。

歴史的背景と標準化の歩み

1960年1月にパリで開催された会議を経て、ピーター・ナウア(Peter Naur)らの編集により最初の報告書がまとめられました。その後、1962年の改訂報告書、そして1975年の修正報告書へと洗練され、最終的にISO 1538:1984として標準化されました。

特筆すべきは、ジョン・バッカスが開発した言語記述法が、ALGOL 58から60への移行過程でピーター・ナウアによって拡張され、ドナルド・クヌースの提案でバッカス・ナウア形式(BNFと名付けられたことです。これは現代のあらゆる言語仕様書の記述における世界標準となっています。

一方で、商用利用においては課題もありました。標準的な入出力(I/O)機能が仕様に含まれていなかったため、各実装者が独自にI/Oを定義せざるを得ず、互換性が欠如していました。これが、商用アプリケーションよりも研究分野での利用に偏った一因となりました。

実装の展開と後継言語への影響

ALGOL 60の登場後、世界中で70以上の派生言語や拡張版が作成されました。オランダのX1 ALGOLから始まり、米国のBurroughs Algol、さらにはソ連のALGEKなど、多様なCPU向けに実装されました。また、ニクラウス・ヴィルトはALGOL 60をベースにAlgol-Wを開発し、それが後のPascalへと繋がりました。

後継のALGOL 68はより複雑で高度な設計を目指しましたが、その複雑さゆえに批判も受けました。そのため、一般的に「ALGOL」と呼ぶ場合は、ALGOL 60のダイアレクト(方言)を指すことが多いのが現状です。

ALGOL 60の基本仕様まとめ
項目 内容
パラダイム 手続き型、命令型、構造化
型システム 静的型付け、強い型付け
スコープ レキシカルスコープ
主要な機能 再帰関数、入れ子構造の関数定義、コードブロック
影響を受けた言語 C, Pascal, Ada, Simula, PL/I, CPL
標準規格 ISO 1538:1984

Frequently Asked Questions

ALGOL 60が現代の言語に与えた最大の影響は何ですか?

最も大きな影響は「構造化プログラミング」の概念を定着させたことです。begin/endによるブロック構造や、再帰関数の導入、そして言語仕様を厳密に記述するBNFの確立など、現代のほぼすべての命令型言語がこれらの恩恵を受けています。

なぜ商用利用ではなく研究用途に限定されたのですか?

主な理由は、言語仕様に標準的な入出力(I/O)機能が定義されていなかったためです。これにより、異なるコンピュータ間でプログラムを移植することが困難であり、実用的な商用開発よりも、アルゴリズムの理論的な記述という学術的な目的に適していました。

「名前渡し(call-by-name)」とは具体的にどのような挙動ですか?

引数として渡された式が、関数内で使用されるたびにその都度再評価される仕組みです。例えば、配列のインデックスとして変数を渡し、関数内でその変数の値が変化した場合、参照されるたびに異なる配列要素にアクセスすることになります。

ALGOL 60とALGOL 68の違いは何ですか?

ALGOL 60がシンプルで構造化の基礎を築いたのに対し、ALGOL 68はより複雑で高度な機能(広範な入出力ライブラリなど)を備えていました。しかし、その複雑さが受け入れられず、多くの開発者はより簡潔なALGOL 60ベースの派生言語を好みました。

References

  1. , which came decades later, supports all of
    • U+003A : COLON
    • U+003B ; SEMICOLON
    • U+005B [ LEFT SQUARE BRACKET
    • U+005D ] RIGHT SQUARE BRACKET
    • U+00AC ¬ NOT SIGN
    • U+00D7 × MULTIPLICATION SIGN
    • U+00F7 ÷ DIVISION SIGN
    • U+2191 ↑ UPWARDS ARROW
    • U+2227 ∧ LOGICAL AND
    • U+2228 ∨ LOGICAL OR
    • U+2260 ≠ NOT EQUAL TO
    • U+2261 ≡ IDENTICAL TO
    • U+2264 ≤ LESS-THAN OR EQUAL TO
    • U+2265 ≥ GREATER-THAN OR EQUAL TO
    • U+2283 ⊃ SUPERSET OF
    in addition to lower case letters.