第1章で「なぜ高水準言語が必要とされたか」を見ました。本章では、その渇望に応えて1950年代に次々と生まれた 最初の高水準言語たちを訪ねます。わずか十数年のあいだに、科学計算・AI・事務処理・学術という 4つの異なる源流が出揃い、今日に至るほぼすべての言語の起点が形作られました。この10年は、 プログラミング史の「カンブリア爆発」とも呼べる時代です。
埋もれた先駆者 — Plankalkül と Short Code
実は、最初の高水準言語のアイデアは1940年代に生まれていました。ドイツのコンラート・ツーゼが 1942〜45年に設計した Plankalkül(プランカルキュール)です。代入、サブルーチン、条件分岐、ループ、 配列、さらには例外処理まで備えた、驚くほど先進的な言語でした。しかしナチス・ドイツ崩壊の混乱で論文は埋もれ、 完全な記述が世に出たのは1972年。当時いずれのマシンにも実装されず、歴史の本流には影響を与えられませんでした。
アメリカでは1949年、ジョン・モークリーらが Short Code を実装します。数式を理解しやすい形で書ける 「電子計算機で実際に使われた最初の高水準言語」でしたが、これはインタプリタ方式で、機械語の約50倍も遅いものでした。 1952年にはマンチェスター大学のアリック・グレニーが Autocode を開発。これはコンパイル方式で 直接機械語へ変換した点が画期的でした。役者は揃いつつありました。
FORTRAN(1957)— 高速性で懐疑論を覆す
決定的な転機が FORTRAN(FORmula TRANslation)です。ジョン・バッカス率いるIBMチームが開発し、 1957年4月にIBM 704ユーザーへ出荷されました。「最初の広く使われた汎用高水準言語」です。
当時、高水準言語には根強い懐疑論がありました。「コンパイラが吐く機械語は、熟練者の手書きアセンブリに性能で劣るに決まっている」。 FORTRANはこれを真っ向から覆します。世界初の最適化コンパイラを実装し、手書きアセンブリに匹敵する実行速度を実現したのです。 この一点が、高水準言語の時代の扉を開きました。
C FORTRAN 77形式の Hello World(固定書式)
PROGRAM HELLO
WRITE (*,*) 'Hello, World!'
STOP
END LISP(1958)— もう一つの宇宙
FORTRANが「数式を速く計算する」世界を切り拓く一方、ジョン・マッカーシーがMITで開発した LISP(LISt Processor)は、 まったく異なる宇宙を生み出しました。1958年に開発が始まり、画期的な論文 「Recursive Functions of Symbolic Expressions...」が 1960年4月に発表されます。
LISPは記号処理・AI研究のための言語で、現代から見ても革命的な概念を一度に導入しました—— 第一級関数、再帰、条件式、自動ガベージコレクション、そしてコードとデータを同じ括弧付きの式(S式)で表現する「同形性」。 FORTRANに次いで「現役で使われる2番目に古い高水準言語」であり、関数型プログラミングの源流です(第5章で深掘り)。
; LISP: すべてが括弧で囲まれたS式(前置記法)
(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1))))) ; 再帰で階乗を計算
(format t "5! = ~a~%" (factorial 5)) ; => 5! = 120 COBOL(1959)— 英語のように書く事務処理
科学計算(FORTRAN)、AI(LISP)に続く第3の源流が、事務処理です。 銀行・保険・行政といった業務では、巨額の金額計算や帳票処理を、専門家でなくても読める形で書きたいという要求がありました。 ここで生まれたのが COBOL(Common Business-Oriented Language)。1959年に委員会 CODASYL が策定しました。
COBOLの哲学は徹底した「英語に近い可読性」です。記号より英単語を多用し、ビジネス担当者でも読めることを目指しました。 その背景には、グレース・ホッパーが手がけた FLOW-MATIC の「英語的プログラミング」思想がありました。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, World".
STOP RUN. ALGOL 60 — 学術の標準が遺した文法
4つめの、そしてある意味で最も影響力の大きかった源流が ALGOL(ALGOrithmic Language)です。 米欧の計算機科学者委員会が設計し、ALGOL 60の報告書が1960年1月に刊行されました。 ALGOLは特定企業の製品ではなく、「アルゴリズムを論文で正確に記述するための言語」として設計された、学術的な共通語でした。
商業的には普及しませんでしたが、ALGOL 60が遺した文法的遺産は計り知れません—— ブロック構造のネスト、レキシカルスコープ、再帰サブプログラム、そして言語の文法を厳密に記述する記法 BNF(Backus–Naur Form)。これらはPascal、C、Java、JavaScriptへと脈々と受け継がれ、 ALGOL 60は「プログラミング言語ファミリーツリーの祖父」と呼ばれます。次章で扱う構造化プログラミングの土台もここにあります。
graph TD Z[Plankalkül\n1945 ツーゼ\n埋もれた先駆] SC[Short Code/Autocode\n1949-52] F[FORTRAN\n1957 科学計算\n最適化コンパイラ] L[LISP\n1958 AI/記号処理\nGC・再帰] C[COBOL\n1959 事務処理\n英語的構文] A[ALGOL 60\n1960 学術標準\nBNF・ブロック構造] Z -.influenced.-> F SC --> F F --> MODERN[今日の言語へ] L --> MODERN C --> MODERN A --> MODERN style F fill:#3b82f6,stroke:#1d4ed8,color:#fff style L fill:#8b5cf6,stroke:#6d28d9,color:#fff style C fill:#22c55e,stroke:#15803d,color:#fff style A fill:#f97316,stroke:#ea580c,color:#fff style MODERN fill:#14b8a6,stroke:#0d9488,color:#fff
4つの源流という見取り図
この黎明期を一望すると、目的の違いが言語の性格を決定づけたことがよくわかります。
| 言語 | 年 | 目的 | 革新点 | 哲学を一言で |
|---|---|---|---|---|
| FORTRAN | 1957 | 科学技術計算 | 最適化コンパイラで高速性を証明 | 数式をそのまま、しかも速く |
| LISP | 1958 | AI・記号処理 | 再帰・第一級関数・GC・同形性 | コードもデータも同じ式 |
| COBOL | 1959 | 事務処理 | 英語に近い可読性、移植性志向 | 誰もが読める英語のように |
| ALGOL 60 | 1960 | 学術・アルゴリズム記述 | ブロック構造・BNF・レキシカルスコープ | 正確に、構造的に |
Plankalkül 設計完成
ツーゼによる世界初の高水準言語。だが未公刊のまま埋もれる(完全公開は1972年)
Short Code
モークリーら。電子計算機で実際に使われた最初の高水準言語(インタプリタ型、低速)
A-0 と Autocode
ホッパーのA-0が「compiler」を命名。グレニーのAutocodeは初のコンパイル型言語
FORTRAN 出荷
IBM。最初の広く使われた高水準言語。最適化コンパイラで高速性を証明
LISP 開発開始
マッカーシー。翌1959年にガベージコレクションを発明。論文は1960年4月
COBOL 策定
CODASYL委員会。英語的な事務処理言語。FLOW-MATICの思想を継承
ALGOL 60 報告書
BNF・ブロック構造・再帰。後続言語の文法的源流。「言語ツリーの祖父」
たった4年(1957〜60)で、現代のプログラミングを支える主要な系統がすべて出揃いました。 あなたが今書いているコードも、たどれば必ずこの4本のレールのいずれか——あるいは複数——に行き着きます。 次章では、この中でも特にALGOLの遺産から始まった「構造化プログラミング革命」と、 歴史上もっとも有名なプログラミング論争「GOTO論争」に踏み込みます。
理解度チェック
FORTRAN(1957)が高水準言語への懐疑論を覆した最大の要因は何でしたか?
キーボード: 1〜4 で選択、Enter で回答