本文へスキップ
totonoe.tech

プログラミング言語を整える

初級

プログラミング言語の歴史を整える。

= 41のプログラミング言語が、どの言語から影響を受けたかを系統図で見る

プログラミング言語の歴史が初めての方は、先に プログラミング言語の歴史を知ると何がうれしいか・どんな場面で使うか をどうぞ。

全41言語の年は「初めて公開された年」で揃えています(1957年〜2014年)。設計の開始や正式な仕様の確定が別の年の言語は、各言語のページに「年の決め方」を書いています。

影響の系統図

横が年、縦が系統(その言語の先頭の系統で置いています)。点は言語、矢印は「影響を与えた→受けた」の向きです。言語を押すと祖先と子孫の線だけが残ります。

系統
年代へ
1960197019801990200020102020FortranCOBOLALGOL 60BASICPascalCAdaGoRustSimulaSmalltalkObjective-CC++Visual BasicJavaC#ScalaDartKotlinTypeScriptSwiftLispAPLMLSchemeErlangHaskellROCamlF#ClojureElixirJuliaPrologPerlPythonLuaJavaScriptPHPRubySQL

スマホでは図の中を横にスクロールできます。言語はキーボードの Tab で選び、Enter か Space で押せます。Esc で解除します。

言語を押すと、ここに年・作った人・ひとことと、言語ページへのリンクが出ます。

冗談と実験の枝もあります。冗談と実験の枝:難解プログラミング言語(Brainf*ck・Malbolge ほか)。ふつうの言語を同じものさしで比べるなら プログラミング言語の比較へ。

プログラミング言語の歴史を知ると何がうれしいか

新しい言語も、前の言語のよいところを受け継ぎ、使いにくさを直して生まれている。

プログラミング言語は、ゼロから突然現れるのではなく、前の言語の考え方を受け継いだり、使いにくい点を直したりして作られます。たとえば C の書き方は、C++・Java・C# にも受け継がれています。

このページは、言語どうしの影響関係を年と系統の図にしたものです。言語の「なぜこうなっているのか」の背景が見えると、仕組みを丸暗記せずに理解できます。

どこで・どんな場面で使うか

  • 新しい言語を学ぶとき

    系統の近い言語から学ぶと、書き方や考え方が似ていて早く身につきます。

  • 言語を選ぶとき

    その言語が何を解決しようとして生まれたかを知ると、自分の目的に合うかを判断しやすくなります。

  • 古い言語の現場

    COBOL や C のように古くからある言語が今も使われる理由は、歴史を知ると納得しやすくなります。

  • 研修や勉強会

    「この仕組みはどの言語から来たか」を説明できると、後輩や仲間への解説に役立ちます。

  • 求人票を読むとき

    歴史そのものが募集条件になることはありませんが、求人に挙がる言語名の背景がわかると、仕事の中身を想像しやすくなります。

なぜ覚えておくと得か

  • 丸暗記が減る。「前の言語の何を直したか」を理由として覚えられるので、機能の違いが頭に残りやすくなります。
  • 似た言語の関係がわかる。どの言語が兄弟や親子の関係かがわかると、1つ覚えたあとに次を学ぶ道筋が見えます。
  • 流行に振り回されにくい。新しい言語が出ても、過去の言語とのつながりで位置づけられるようになります。

下の系統図で気になる言語を押して、その祖先と子孫の線をたどってみてください。

思想の歴史

言語の設計に影響した考え方を、年の順に18件並べました。各項目の下に、関わった人・関わった言語・出典を載せています。

  1. 1960年

    ガベージコレクション

    McCarthy の Lisp では、リスト構造の不要部分を明示的に消す作業が煩雑だと考え、使えなくなった記憶領域を自動で回収する方式を採った。記憶領域を使い切るまで放置し、使い切ったら変数から辿れる部分に印を付けて残りを回収する。参照カウントの方式も比較されたが、Lisp は印を付けて回収する方を選んだ。この仕組みは1960年の CACM 論文でも言語の特徴に挙げられている。

    関わった人: John McCarthy

    関わった言語: Lisp

    出典: McCarthy, History of Lisp (転載版で内容を確認)

  2. 1967年

    オブジェクト指向の始まり

    Simula は ALGOL 60 を拡張して作られ、シミュレーション対象を独立したオブジェクトとして扱った。Dahl と Nygaard は1966年12月に「接頭辞」の考え方に至り、これがクラスとサブクラスの概念になった。Kay は Simula の記憶割り当てが Sketchpad の実体に似ていることに気づき、1972年の Smalltalk の前身になったと述べている。Smalltalk はすべてをオブジェクトとし、メッセージで動かす形にまとめた。

    関わった人: Ole-Johan Dahl、Kristen Nygaard、Alan Kay

    関わった言語: Simula・Smalltalk

    出典: Nygaard & Dahl, The Development of the SIMULA Languages (転載版で内容を確認)

  3. 1968年

    構造化プログラミング

    Dijkstra は、goto 文の多いプログラムほど質が下がると経験から述べ、高水準言語から goto を無くすべきだと主張した。プログラムの文面上の並びと、実行時の経過の対応を分かりやすくすることが理由だった。この主張は1968年に CACM の手紙「Go To Statement Considered Harmful」として公表された。Wirth は Pascal が構造化プログラミングの考えに強く影響されたと書いている。

    関わった人: Edsger W. Dijkstra、Niklaus Wirth

    関わった言語: ALGOL 60・Pascal・C

    出典: Dijkstra, A Case against the GO TO Statement (EWD215)

  4. 1972年

    論理型プログラミング

    Colmerauer の研究室は自然言語処理のために定理証明の技術を使い、1972年に Prolog を作った。名前は PROgrammation en LOGique の略で、Kowalski との1971年の対面が転機になった。プログラムは論理式の規則として書かれ、実行は推論として進む。Hewitt の Planner は知られていたが、Lisp を知らなかったこともあり影響は小さかったと本人は書いている。

    関わった人: Alain Colmerauer、Philippe Roussel、Robert Kowalski

    関わった言語: Prolog

    出典: Colmerauer & Roussel, The birth of Prolog (https に未対応のため、リンクなし)

  5. 1977年

    関数型の考え方

    Backus は1977年のチューリング賞講演で、代入と逐次実行に縛られた従来の言語は大きくなるばかりで強くならないと批判した。代わりに、関数を組み合わせる形式で新しいプログラムを作る関数型のスタイルと、プログラムの代数を提案した。Lisp は関数を値として扱う先行例で、ML や Scheme も関数を中心にしている。この講演は1978年に CACM に掲載された。

    関わった人: John Backus

    関わった言語: Lisp・ML・Scheme

    出典: Backus, Can Programming Be Liberated from the von Neumann Style? (転載版で内容を確認)

  6. 1978年

    型推論

    Milner は、型を書かなくても自動で型を決め、型の誤りを実行前に見つける多相型の仕組みを1978年に論文で示した。この仕組みは定理証明系 LCF のメタ言語 ML にすでに組み込まれ、約2年使われていた。型検査によって、誤った証明が作れないことが保証される。ML 系の言語は後に型推論・データ型・モジュールなどをそろえた Standard ML に発展した。

    関わった人: Robin Milner

    関わった言語: ML

    出典: Milner, A Theory of Type Polymorphism in Programming

  7. 1986年

    並行処理とアクター/耐障害(Erlang)

    Erlang は1986年、Ericsson の研究所で Joe Armstrong が Prolog に並行プロセスを足す実験として始めた。軽量なプロセスを互いに強く分離し、メッセージだけで通信させ、失敗したら即座に止まる(フェイルファスト)作りをとる。Armstrong は『let it crash』、つまり誤りは別のプロセスに直させる考え方を述べている。電話交換機のように止まってはならないソフトを作る目的が、言語の形を決めた。なお、アクターモデルとの関係を述べた記述は、今回確かめた資料の範囲では見つからなかった。

    関わった人: Joe Armstrong、Robert Virding、Mike Williams

    関わった言語: Erlang・Prolog

    出典: Joe Armstrong, Making reliable distributed systems in the presence of software errors (2003) / Erlang FAQ: Academic and Historical Questions

  8. 1987年

    スクリプト言語の広がり

    Perl はテキストを走査して報告書を出す作業から始まり、システム管理の道具として広がった。Python は Amoeba 分散OSでの管理作業のために、C のプログラムや Bourne シェルのスクリプトに代わるものとして作られた。Ruby は Perl や Smalltalk など好きな言語の良さを混ぜ、プログラマが楽しく書けることを目指した。三つとも、速さや小ささより『書く人の手間を減らす』ことを軸にした点が共通する。

    関わった人: Larry Wall、Guido van Rossum、Yukihiro Matsumoto

    関わった言語: Perl・Python・Ruby

    出典: perldoc perlintro / Python docs, General Python FAQ / ruby-lang.org, About Ruby

  9. 1990年

    純粋関数型と遅延評価(Haskell)

    1980年代、遅延評価をする関数型言語が各大学で作られ、互いに少しずつ違う言語が乱立していた。そこで共通の言語を委員会で設計することが決まり、1990年4月1日付で Haskell Report 1.0 が出た。設計の目標は非正格で純粋な関数型であること。Haskell は Miranda の影響を強く受け、型クラスやモナドによる入出力など、型システムと副作用の扱いに仕組みを加えた。

    関わった人: Paul Hudak、John Hughes、Simon Peyton Jones、Philip Wadler、David Turner

    関わった言語: Haskell・ML

    出典: Hudak, Hughes, Peyton Jones, Wadler, A History of Haskell: Being Lazy With Class (HOPL III) (転載版で内容を確認)

  10. 1995年

    「書く人の楽しさ」を目指す設計(Ruby)

    Ruby の作者まつもとゆきひろは、人生の目的の一部は楽しむことで、プログラマは創造的な面に集中できるとき楽しさを感じる、だから Ruby はプログラマを幸せにするよう設計した、と語っている。ruby-lang.org は、Perl・Smalltalk・Eiffel・Ada・Lisp の良さを混ぜ、関数型と命令型の均衡をとった言語だと説明する。『単純ではなく自然に』という方針も本人の言葉として載っている。

    関わった人: Yukihiro Matsumoto

    関わった言語: Ruby・Perl・Smalltalk・Lisp

    出典: Bill Venners, The Philosophy of Ruby: A Conversation with Yukihiro Matsumoto / ruby-lang.org, About Ruby

  11. 1995年

    仮想マシンと一度書けばどこでも動く

    Java は機種や OS が入り混じるネットワークの環境を前提に、ソースを機種に依存しないバイトコードへ変換し、各機種の仮想マシンで動かす形をとった。公式の白書は、これにより配布や更新の問題を解けると述べる。プロジェクトは1991年に Gosling らが始め、1995年5月に SunWorld で発表された。仮想マシンの考え方は Erlang の JAM 機械(1989年)や OCaml の前身 Caml Light のバイトコード解釈系(1990年)でも使われている。

    関わった人: James Gosling、Patrick Naughton、Mike Sheridan

    関わった言語: Java・Erlang・OCaml

    出典: Oracle, The Java Language Environment (white paper) / Sun Microsystems, Java technology: the early years (java.sun.com) (転載版で内容を確認) / Joe Armstrong, Making reliable distributed systems in the presence of software errors (2003) / ocaml.org, About OCaml

  12. 1995年

    Web とブラウザの言語

    1995年、Netscape と Sun は、企業ネットワークとインターネットでアプリケーションを作るための『オブジェクトスクリプト言語』として JavaScript を発表した。Brendan Eich が5月にブラウザ向けに実装したのが始まりで、HTML の中にコードの断片を埋め込む形をとる。PHP は Rasmus Lerdorf の CGI プログラム群が1995年にソース公開され、HTML 埋め込みのスクリプト言語に育った。ブラウザ内(JavaScript)とサーバー側(PHP)の両方で、HTML にコードを埋め込む形が広がった。

    関わった人: Brendan Eich、Rasmus Lerdorf

    関わった言語: JavaScript・PHP

    出典: Netscape and Sun announce JavaScript (press release, 1995-12-04) (転載版で内容を確認) / Eich & Wirfs-Brock, JavaScript: The First 20 Years (HOPL IV, abstract page) / php.net, History of PHP

  13. 2003年

    JVM の上の新言語(Scala・Clojure・Kotlin)

    Java の仮想マシン上で動く新しい言語が、2000年代に次々と生まれた。Scala は Java の拡張ではなく、完全に相互運用できる別の言語として設計された。Clojure は JVM を意図的なホストとし、Java のライブラリを直接使える Lisp である。Kotlin は Java と100%相互運用できる静的型付き言語として JetBrains が作った。いずれも既存の Java 資産を捨てずに、新しい書き方を持ち込んだ。

    関わった人: Martin Odersky、Rich Hickey

    関わった言語: Scala・Clojure・Kotlin・Java

    出典: Scala history (scala-lang.org, old site)

  14. 2009年

    シンプルさと並行処理(Go のゴルーチンと CSP)

    Go は Google の大規模なコードでの作業のしやすさを目的に設計された。ビルドの速さ、依存関係の厳密な管理、明快さと単純さを重んじる。並行処理は Hoare の CSP の流れを汲み、チャネルを第一級の値として扱う。この系譜は Newsqueak や Limbo などを経ている。Go FAQ は、並行処理の基本部品が CSP 系の言語に由来すると述べる。

    関わった人: Robert Griesemer、Rob Pike、Ken Thompson、Tony Hoare

    関わった言語: Go・C・Pascal

    出典: Pike, Go at Google: Language Design in the Service of Software Engineering

  15. 2012年

    漸進的型付け(TypeScript)

    TypeScript は JavaScript の上位集合として2012年に発表された。既存の JavaScript をそのまま TypeScript として受け入れ、型注釈は必要な箇所から少しずつ足せる。型はコンパイル時に消えるので、出力は通常の JavaScript になる。型は省略でき、コンパイラが推論することも多い。同じ2011年の Dart も、省略可能な型を最初から掲げていた。

    関わった人: Anders Hejlsberg、Lars Bak

    関わった言語: TypeScript・JavaScript・Dart

    出典: TypeScript: JavaScript Development at Application Scale (2012)

  16. 2012年

    科学技術計算の「二言語問題」(Julia)

    科学技術計算では、試作は書きやすい言語で行い、速さや配備のために別の言語で書き直すことが多い。Julia の作者たちは2012年のブログで、C の速度と Ruby の動的さ、Lisp のマクロ、MATLAB の数式表記を一つの言語で得たいと書いた。2014年の論文は、試作と本番で言語を分ける前提そのものに異を唱えている。なお「二言語問題」という名前は2012年のブログ本文には出てこず、論文は同じ内容を言葉を換えて述べている。

    関わった人: Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman

    関わった言語: Julia・Lisp・Ruby・Python・R

    出典: Why We Created Julia (2012)

  17. 2014年

    null 安全(Kotlin・Swift・Dart)

    null 参照による実行時エラーを、型の仕組みで防ぐ流れ。Swift は nil を許す値をオプショナルとして明示させ、2014年の発表時から option 型を掲げた。Kotlin は null を許す型と許さない型を区別する。Dart は2.12 で、宣言しない限り値は null にならない健全な null 安全を導入した。Dart の公式文書は、Kotlin・Swift・Rust がそれぞれ自分なりの答えを持つ問題だと書く。

    関わった言語: Kotlin・Swift・Dart・Rust

    出典: Understanding null safety (dart.dev)

  18. 2015年

    メモリ安全と所有権(Rust)

    C や C++ は手でメモリを管理し、多くの言語はガベージコレクタに任せる。Rust は第三の方法として、所有権の規則をコンパイラが検査し、守られなければコンパイルを通さない。これにより GC やランタイムなしで、メモリ安全とスレッド安全を保証しようとした。実行時の速度を落とさないことも明言されている。Rust 1.0 は2015年5月15日に公開された。

    関わった人: Graydon Hoare

    関わった言語: Rust・C++・C

    出典: The Rust Programming Language: What Is Ownership?

年表(41言語)

言語名・年・系統・作った人で検索できます。列見出しを押すと並べ替えます。年は初めて公開された年に揃えています。

列見出しをクリックすると並べ替えます(もう一度で逆順)
言語 年 系統 作った人 組織
Fortran 1957年 命令型 John Backus IBM
Lisp 1958年 関数型 John McCarthy MIT
COBOL 1959年 命令型 CODASYL Short Range Committee (Grace Hopper は技術顧問) CODASYL
ALGOL 60 1960年 命令型 Peter Naur (編)、John Backus、John McCarthy、Alan Perlis ほか13名 国際委員会 (ACM/GAMM)
APL 1962年 関数型・命令型 Kenneth E. Iverson、Adin D. Falkoff Harvard / IBM
BASIC 1964年 命令型 John Kemeny、Thomas Kurtz Dartmouth College
Simula 1965年 オブジェクト指向・命令型 Ole-Johan Dahl、Kristen Nygaard Norwegian Computing Center
Pascal 1970年 命令型 Niklaus Wirth ETH Zürich
C 1972年 命令型 Dennis Ritchie Bell Labs
Prolog 1972年 論理型 Alain Colmerauer、Philippe Roussel Université d'Aix-Marseille
Smalltalk 1972年 オブジェクト指向 Alan Kay、Dan Ingalls、Adele Goldberg Xerox PARC
ML 1973年 関数型 Robin Milner、Lockwood Morris、Malcolm Newey University of Edinburgh
SQL 1974年 マルチ・その他 Donald Chamberlin、Raymond Boyce IBM Research
Scheme 1975年 関数型 Gerald Jay Sussman、Guy L. Steele Jr. MIT AI Lab
Ada 1980年前後 命令型・オブジェクト指向 Jean Ichbiah (Green チーム) CII-Honeywell Bull / 米国防総省
Objective-C 1980年代初め オブジェクト指向 Brad Cox、Tom Love PPI(のち Stepstone)
C++ 1985年 オブジェクト指向・命令型 Bjarne Stroustrup AT&T Bell Labs
Erlang 1987年 関数型・マルチ・その他 Joe Armstrong、Robert Virding、Mike Williams Ericsson(計算機科学研究所)
Perl 1987年 スクリプト・命令型 Larry Wall (個人開発、のち Perl コミュニティ)
Haskell 1990年 関数型 Paul Hudak、John Hughes、Simon Peyton Jones、Philip Wadler 委員会(Yale、Glasgow、Chalmers、Edinburgh ほか)
Python 1991年 スクリプト・オブジェクト指向・マルチ・その他 Guido van Rossum CWI(オランダ)
Visual Basic 1991年 オブジェクト指向・命令型 Microsoft Microsoft
R 1993年 関数型・スクリプト Ross Ihaka、Robert Gentleman オークランド大学統計学科(ニュージーランド)
Lua 1994年 スクリプト・マルチ・その他 Roberto Ierusalimschy、Luiz Henrique de Figueiredo、Waldemar Celes Tecgraf、PUC-Rio(ブラジル)
Java 1995年 オブジェクト指向 James Gosling、Patrick Naughton、Mike Sheridan Sun Microsystems
JavaScript 1995年 スクリプト・オブジェクト指向 Brendan Eich Netscape Communications
PHP 1995年 スクリプト Rasmus Lerdorf、Andi Gutmans、Zeev Suraski (個人開発、のち PHP コミュニティ)
Ruby 1995年 スクリプト・オブジェクト指向 Yukihiro Matsumoto (個人開発、のちコミュニティ)
OCaml 1996年 関数型・オブジェクト指向・マルチ・その他 Xavier Leroy、Jérôme Vouillon、Damien Doligez、Didier Rémy INRIA(フランス)
C# 2000年 オブジェクト指向・マルチ・その他 Anders Hejlsberg Microsoft
F# 2002年 関数型・マルチ・その他 Don Syme Microsoft Research Cambridge
Scala 2003年 オブジェクト指向・関数型 Martin Odersky EPFL(ローザンヌ連邦工科大学)
Clojure 2007年 関数型 Rich Hickey (個人。のち Cognitect)
Go 2009年 命令型・マルチ・その他 Robert Griesemer、Rob Pike、Ken Thompson Google
Rust 2010年 命令型・関数型・マルチ・その他 Graydon Hoare Mozilla
Dart 2011年 オブジェクト指向 Lars Bak Google
Elixir 2011年 関数型 José Valim Plataformatec(当時)
Kotlin 2011年 オブジェクト指向・関数型・マルチ・その他 Michail Zarečenskij(現在のリード設計者。FAQ の記述) JetBrains
Julia 2012年 関数型・マルチ・その他 Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman MIT ほか
TypeScript 2012年 オブジェクト指向・スクリプト・マルチ・その他 Anders Hejlsberg Microsoft
Swift 2014年 オブジェクト指向・関数型・マルチ・その他 Chris Lattner Apple

影響の線の引き方

  • 線は、作者・公式文書・論文など出典が影響を明言したものだけを引いています(全84本)。「似ている」「同じ時代」という推測では引いていません。Wikipedia は使っていません。
  • この一覧に無い言語(B・BCPL・Modula-3 など)からの影響は、図には描かず、各言語のページに名前だけを書いています。
  • 線が無い言語は「一覧の中で確かめられた影響元が無い」という意味で、影響が無かったという意味ではありません。現時点で影響元の線が無いのは、Fortran・COBOL・ALGOL 60・APL・BASIC・Prolog・ML・SQL・Perl・Dartです。
  • 線ごとに、影響を受けた側が述べたか、与えた側が述べたかを各言語のページに記しています。出典は各線に付けています。
  • 調べても明言が見つからなかった線は引いていません。生まれた年が公式資料で確かめきれなかった言語は、各言語のページの「年の決め方」に注記しています。

このページは静的で、入力欄はありません。閲覧数の計測についてはプライバシーポリシーをご覧ください。調査日: 2026-10-25。

このツールについて

41のプログラミング言語がどの言語から影響を受けたかを、年と系統の図にしました。言語を押すと、その祖先と子孫の線だけが浮かびます。各言語の作者・組織・目指したこと、思想の歴史18件、年表つき。影響の線は、作者や公式文書が明言したものだけを引いています。

41言語の影響関係84本を、年と系統の系統図に。言語を押すと祖先と子孫の線だけが浮かぶ。思想の歴史18件と検索できる年表つき。線は出典が明言したものだけ。送信ゼロ。

主な機能

  • 41言語の系統図(横=年、縦=系統)。言語を押すと祖先と子孫だけを強調
  • 系統での絞り込みと年代ジャンプ。キーボードでも言語を選べる
  • 思想の歴史18件を年順のタイムラインで(関わった人・言語・出典つき)
  • 言語名・年・系統・作った人で検索・並べ替えできる年表
  • 言語ごとのページ41枚(作者・組織・目指したこと・影響の線・出典・小さな系統図)
  • 影響の線は出典が明言したものだけ(Wikipedia は使わない)・静的ページ・送信ゼロ

よくある質問

Q. このページでは何が分かりますか?

A. 41のプログラミング言語について、どの言語から影響を受けたかを年と系統の系統図で見られます。影響の線は84本で、作者・公式文書・論文が明言したものだけを引いています。言語ごとのページには、作った人・組織・目指したこと・出典があります。

Q. 系統図の見方を教えてください。

A. 横が年、縦が系統(命令型・オブジェクト指向・関数型・論理型・スクリプトなど)です。矢印は影響を与えた言語から受けた言語へ向かいます。言語を押すと、その言語の祖先と子孫の線だけが残り、ほかは薄くなります。もう一度押すか「解除」で戻ります。

Q. 線が1本もない言語があるのはなぜですか?

A. 出典が影響を明言した線だけを引いているためです。線が無いのは「一覧の中で確かめられた影響元が無い」という意味で、影響が無かったという意味ではありません。一覧に無い言語(B・BCPL・Modula-3 など)からの影響は、各言語のページに名前だけを書いています。

Q. 言語の年は何の年ですか?

A. 初めて公開された年に揃えています。設計の開始や仕様の確定が別の年の言語(Ada・Objective-C など)は、各言語のページの「年の決め方」に理由を書いています。

Q. 思想の歴史では何を扱っていますか?

A. 構造化プログラミング、ガベージコレクション、オブジェクト指向の始まり、型推論、所有権など、言語の設計に影響した考え方18件を年順に並べています。関わった人・関わった言語・出典を添えています。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

運営サイト

私たちが運営するサイト