TL

プログラミング言語の系統樹(言語の派生図)

なぜこの言語はこう書くのか、が腑に落ちる。ALGOL・Lisp・C・Smalltalk の4祖から主要言語へ続く影響関係を、年代と分岐つきの系統図として俯瞰します。

応用言語史設計思想パラダイム系統樹最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.現代の主要言語の大半は ALGOL・Lisp・C・Smalltalk の4系統に源流をたどれ、各祖が異なる設計思想(ブロック構造・第一級関数・低水準制御・メッセージ送信)を継承させた。
  • 2.系統は厳密な「親子」ではなく多重継承で、C++ や Python のように複数の祖から思想を取り込むハイブリッドが現代の主流。
  • 3.言語の文法や型の癖は偶然ではなく、どの祖から何を受け継いだかで説明でき、新言語の学習コストの当たりもつけられる。

なぜ「系統樹」で言語を見るのか

新しい言語を学ぶとき、文法を丸暗記するより「どの系統に属し、何を受け継いだか」を押さえる方が速く理解できます。生物の系統樹と同じく、言語にも祖(共通祖先)から派生した影響関係があり、似た特徴を共有するグループが存在するからです。

ただし重要な前提があります。言語の系統は生物のような単一の親子関係ではなく、**多重継承(複数の祖から思想を取り込む)**が普通です。C++ は C の構文と Simula のクラスを、Python は ALGOL 系の構文と Lisp 系の高階関数を同時に継承しました。したがって「系統樹」は厳密な木ではなく、**有向グラフ(影響の矢印が交差する図)**として捉えるのが正確です。

4つの祖と継承された設計思想

現代の主要言語をたどると、源流は概ね次の4本に収束します。各祖が「何を発明し、後世に何を残したか」を押さえることが、系統理解の核心です。

登場中心思想後世に残した核
ALGOL1958/1960ブロック構造と構造化begin–end ブロック、字句スコープ、再帰、構文の数学的定義(BNF)
Lisp1958コードもデータ(同図像性)第一級関数、ガベージコレクション、再帰、リスト処理、マクロ
C1972ハードウェアに近い手続き型ポインタ、明示的メモリ管理、移植性の高い低水準制御、C系の波括弧構文
Smalltalk1972/1980純粋オブジェクト指向すべてがオブジェクト、メッセージ送信、動的ディスパッチ、IDE/GC一体の環境

ALGOL は今日では使われませんが、**字句スコープ(変数が見える範囲をソースの構造で決める)**や if/while/for を持つ「普通の手続き型構文」の原型を作りました。私たちが当たり前と思う制御構文の多くは ALGOL の子孫です。詳しくは変数のスコープとクロージャも参照してください。

系統別の主要な派生(年代付き)

源流ごとに、代表的な派生を年代順に並べます。矢印(→)は「強い影響を受けた」を意味し、複数祖からの合流は併記します。

ALGOL 系(手続き型・構造化の本流)

ALGOL 60 (1960)
  → Pascal (1970)        教育向け・厳格な型
  → CPL (1963) → BCPL (1967) → B (1969) → C (1972)
  → Simula 67 (1967)     クラスとオブジェクトを世界初導入
  → Ada (1983)           大規模・安全性重視

ここで見落とせないのが Simula 67 です。Simula は ALGOL を拡張して「クラス」「オブジェクト」「継承」を初めて言語機能化し、C++ のクラス設計の直接の祖(さらに C++ を介して Java の OOP の源流)になりました。OOP の源流は Smalltalk「だけ」ではなく、Simula 系(型付き静的 OOP)と Smalltalk 系(動的 OOP)の2系統がある点が上級者の要注意ポイントです。

C 系(システム言語と波括弧の覇権)

C (1972)
  → C++ (1985)           C + Simula のクラス → 静的OOP
  → Objective-C (1984)   C + Smalltalk のメッセージ送信
  → Java (1995)          C++構文 + GC + VM + 単一継承
  → C# (2000)            Java系 + .NET、後に関数型機能を吸収
  → JavaScript (1995)    C系構文 + Scheme(Lisp)の関数 + Selfのプロトタイプ
  → Go (2009)            C系 + Pascal系の簡潔さ + CSP並行

C++ と Objective-C は、どちらも「C に OOP を足す」という同じ目的に対し、継承元の祖が違うために性格が正反対になった好例です。C++ は Simula 由来の静的なクラス、Objective-C は Smalltalk 由来の動的メッセージ送信を採りました。型の静的/動的の違いについては型システムが詳しいです。

Lisp 系(関数型と「コードはデータ」)

Lisp (1958)
  → Scheme (1975)        字句スコープを徹底した極小Lisp
  → Common Lisp (1984)   実用大規模Lisp
  → ML (1973) → Haskell (1990)   静的型 + 純粋関数型
  → Clojure (2007)       JVM上のLisp、不変データ重視

Lisp はガベージコレクション第一級関数を世界で初めて実装した言語で、これらは今やほぼ全言語が継承しています(ガベージコレクション参照)。ML 系で生まれた Hindley–Milner 型推論(型注釈なしで型を自動決定する仕組み)は、後に Rust や Swift、TypeScript の型推論へ流れ込みました。不変性を核に据える設計はイミュータビリティで扱う思想と直結します。

Smalltalk 系(純粋OOPと動的環境)

Smalltalk (1980)
  → Objective-C (1984)   メッセージ送信構文をCへ移植
  → Ruby (1995)          Smalltalkの純粋OOP + Perlの実用性
  → Python (1991)        ALGOL系構文 + Lisp系高階関数 + 動的OOP

Smalltalk の「すべてがオブジェクト・すべてはメッセージ送信」という思想は、Ruby に最も純粋な形で受け継がれました。Ruby で 3.times { ... } のように数値さえメソッドを持つのは、この系統の刻印です。

ハイブリッドが主流になった現代

単系統の言語はもう少数派

2000年代以降の主要言語は、ほぼ例外なく複数祖のハイブリッドです。たとえば Scala は「C/Java系の静的型 OOP」と「Haskell系の関数型」を融合し、Rust は「C系の低水準制御」「ML系の型推論と代数的データ型」「所有権という独自概念」を組み合わせています。系統樹の末端ほど枝が合流する、と理解しておくと混乱しません。

この合流を、設計思想の継承という観点で整理すると次のようになります。

言語主に継承した祖受け継いだ核となる思想
C++C + Simula(ALGOL系)低水準制御 + 静的クラス、ゼロコスト抽象
JavaC++ + Lisp(GC)波括弧構文 + GC + VM移植性、単一継承
PythonALGOL + Lisp + Smalltalk読みやすい構文 + 高階関数 + 動的OOP
JavaScriptC + Scheme + SelfC系構文 + クロージャ + プロトタイプ継承
RustC + MLメモリ安全 + 型推論・代数的データ型・所有権

JavaScript が「C に似た見た目なのに関数がやたら強力」なのは、構文を C から、関数の扱い(クロージャ・第一級関数)を Scheme から受け継いだ異なる祖の混血だからです。見た目と中身の祖が違うことを知っていると、言語の「意外な挙動」の多くが腑に落ちます。

資格・面接での頻出ポイント

「OOP を最初に言語機能化したのは?」の答えは Smalltalk ではなく Simula 67 です。Smalltalk は「純粋 OOP(すべてがオブジェクト)」を確立した言語であり、両者の役割を区別できるかが上級者の分かれ目になります。

まとめ:系統を知ると何が得か

言語の文法や型の癖は偶然の産物ではなく、どの祖から何を継承したかでほぼ説明できます。ALGOL は構造化構文を、Lisp は第一級関数と GC を、C は低水準制御を、Smalltalk と Simula は OOP の2系統を残しました。新しい言語に出会ったら「これはどの系統の混血か」を見極めることで、学習すべき勘所と既存知識からの差分が一気に見通せます。系統樹は暗記表ではなく、未知の言語を高速に位置づけるための地図なのです。

プログラミング Article

プログラミング言語の系統樹(言語の派生図)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

言語史

比較で見る軸

難易度: advanced / カテゴリ: プログラミング / タグ数: 4

導入後に効く点

系統は厳密な「親子」ではなく多重継承で、C++ や Python のように複数の祖から思想を取り込むハイブリッドが現代の主流。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
プログラミング
タグ数
4

判断チェックリスト

  • 自社の用途が「言語史 / 設計思想」に近いか確認する。
  • 強みである「現代の主要言語の大半は ALGOL・Lisp・C・Smalltalk の4系統に源流をたどれ、各祖が異なる設計思想(ブロック構造・第一級関数・低水準制御・メッセージ送信)を継承させた。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

言語史設計思想パラダイム系統樹言語史設計思想パラダイム系統樹