プログラミング言語を整える
初級プログラミング言語の歴史を整える。
= 41のプログラミング言語が、どの言語から影響を受けたかを系統図で見る
プログラミング言語の歴史が初めての方は、先に プログラミング言語の歴史を知ると何がうれしいか・どんな場面で使うか をどうぞ。
全41言語の年は「初めて公開された年」で揃えています(1957年〜2014年)。設計の開始や正式な仕様の確定が別の年の言語は、各言語のページに「年の決め方」を書いています。
影響の系統図
横が年、縦が系統(その言語の先頭の系統で置いています)。点は言語、矢印は「影響を与えた→受けた」の向きです。言語を押すと祖先と子孫の線だけが残ります。
スマホでは図の中を横にスクロールできます。言語はキーボードの Tab で選び、Enter か Space で押せます。Esc で解除します。
言語を押すと、ここに年・作った人・ひとことと、言語ページへのリンクが出ます。
1957年 ・ 命令型
Fortran
作った人: John Backus(IBM)
科学技術計算の式を数式に近い書き方でそのまま計算機に入力できるようにするため、IBM のバッカスらが作った言語。手で機械語を書く代わりに、高水準の言語から実行時間の短いコードを作る最適化コンパイラとともに提供された。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 2
1958年 ・ 関数型
Lisp
作った人: John McCarthy(MIT)
人工知能研究のため、記号式をリスト構造で扱う言語として McCarthy らが作った。条件式・再帰・関数を値として渡す書き方・eval によるプログラム自身のデータ化・ガベージコレクションを備えた。
影響を受けた言語 1 ・ 影響を与えた言語 6
1959年 ・ 命令型
COBOL
作った人: CODASYL Short Range Committee (Grace Hopper は技術顧問)(CODASYL)
機種に依存しない事務処理向けの共通言語として、メーカー・官庁の代表が委員会で定めた。英語に近い文でデータの定義と処理を書き分ける構造を持つ。
一覧内で確かめられた影響元なし ・ 一覧内で確かめられた影響先なし
1960年 ・ 命令型
ALGOL 60
作った人: Peter Naur (編)、John Backus、John McCarthy、Alan Perlis ほか13名(国際委員会 (ACM/GAMM))
数値計算の手順を国際的に共通の書き方で表すために定義された。ブロック構造・再帰的な手続き・形式的な文法記述(BNF)を採用した。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 3
1962年 ・ 関数型・命令型
APL
作った人: Kenneth E. Iverson、Adin D. Falkoff(Harvard / IBM)
数式の表記法として Iverson が考え、配列全体に作用する記号を並べて書く言語に発展した。のちに IBM で処理系が作られ、対話的に使えるようになった。
一覧内で確かめられた影響元なし ・ 一覧内で確かめられた影響先なし
1964年 ・ 命令型
BASIC
作った人: John Kemeny、Thomas Kurtz(Dartmouth College)
タイムシェアリングシステムの利用者が短時間で覚えて使えるよう、Dartmouth の Kemeny と Kurtz が学生とともに作った。FORTRAN や ALGOL を学ぶ前の踏み台としても位置づけられていた。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 1
1965年 ・ オブジェクト指向・命令型
Simula
作った人: Ole-Johan Dahl、Kristen Nygaard(Norwegian Computing Center)
離散事象のシミュレーションを記述するため、ALGOL 60 を拡張して作られた。Simula 67 ではクラスとサブクラス(接頭辞による継承)が導入され、オブジェクト指向の出発点とされる。
影響を受けた言語 1 ・ 影響を与えた言語 2
1970年 ・ 命令型
Pascal
作った人: Niklaus Wirth(ETH Zürich)
教育と実用の両方に使える言語として Wirth が設計した。厳密な定義、少数の明快な基本要素、データ型の検査を持ち、構造化プログラミングの考え方を取り入れた。
影響を受けた言語 1 ・ 影響を与えた言語 2
1972年 ・ 命令型
C
作った人: Dennis Ritchie(Bell Labs)
Unix を高級言語で書くため、Ritchie が B 言語に型などを加えて作った。機械に近い操作と移植しやすさを両立し、小さなコンパイラで実装できる。
影響を受けた言語 1 ・ 影響を与えた言語 4
1972年 ・ 論理型
Prolog
作った人: Alain Colmerauer、Philippe Roussel(Université d'Aix-Marseille)
自然言語(フランス語)の処理のため、一階述語論理の定理証明の技術を使って作られた。プログラムを規則と事実で書き、実行は論理的な推論として進む。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 1
1972年 ・ オブジェクト指向
Smalltalk
作った人: Alan Kay、Dan Ingalls、Adele Goldberg(Xerox PARC)
子どもを含む誰もが使える個人用計算機の言語として Kay らが作った。すべてをオブジェクトとし、オブジェクト同士がメッセージを送り合う形でプログラムを組む。
影響を受けた言語 2 ・ 影響を与えた言語 4
1973年 ・ 関数型
ML
作った人: Robin Milner、Lockwood Morris、Malcolm Newey(University of Edinburgh)
定理証明系 LCF で証明戦略を書くメタ言語として作られた。多相的な型を型注釈なしで自動推論し、型検査で誤った証明を作れないようにした。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 6
1974年 ・ マルチ・その他
SQL
作った人: Donald Chamberlin、Raymond Boyce(IBM Research)
Codd の関係モデルに基づくデータベース操作を、キーボードで打てる英語風の構文で書けるようにするため、IBM の System R で作られた。
一覧内で確かめられた影響元なし ・ 一覧内で確かめられた影響先なし
1975年 ・ 関数型
Scheme
作った人: Gerald Jay Sussman、Guy L. Steele Jr.(MIT AI Lab)
Lisp 風の言語に Actor モデルとラムダ計算の考え方を取り入れて Sussman と Steele が作った。レキシカルスコープと小さな規則の集まりで意味を単純にした。
影響を受けた言語 2 ・ 影響を与えた言語 4
1980年前後 ・ 命令型・オブジェクト指向
Ada
作った人: Jean Ichbiah (Green チーム)(CII-Honeywell Bull / 米国防総省)
米国防総省が組込み系ソフトの言語を一本化するため、要求仕様を先に定め、その競争設計から選ばれた。型・パッケージ・並行処理を言語に含める。
影響を受けた言語 1 ・ 影響を与えた言語 2
1980年代初め ・ オブジェクト指向
Objective-C
作った人: Brad Cox、Tom Love(PPI(のち Stepstone))
C に Smalltalk 風のオブジェクト指向を足した言語。Unix と C の環境を使う開発現場で、既存資産と共存できるオブジェクト指向の道具として作られた。のちに NeXT の NeXTSTEP、さらに Apple の OS X と iOS の標準言語になった。
影響を受けた言語 2 ・ 影響を与えた言語 2
1985年 ・ オブジェクト指向・命令型
C++
作った人: Bjarne Stroustrup(AT&T Bell Labs)
C に Simula 流のクラスを加える形で、Bell 研究所でストラウストラップが作った言語。C 並みの実行効率と低水準の柔軟さを保ったまま、プログラムを整理する仕組みを持ち込んだ。のちにテンプレートと標準ライブラリ(STL)でジェネリックプログラミングを取り込んだ。
影響を受けた言語 4 ・ 影響を与えた言語 5
1987年 ・ 関数型・マルチ・その他
Erlang
作った人: Joe Armstrong、Robert Virding、Mike Williams(Ericsson(計算機科学研究所))
電話交換機のソフトを書くため、Ericsson の研究所で Prolog の拡張として始まった言語。軽量なプロセス同士がメッセージだけをやり取りする形で並行処理を書き、止まらないシステムを作ることを狙った。
影響を受けた言語 1 ・ 影響を与えた言語 2
1987年 ・ スクリプト・命令型
Perl
作った人: Larry Wall((個人開発、のち Perl コミュニティ))
テキストファイルを走査し、情報を取り出して報告書を出力するための言語として作られ、すぐにシステム管理の道具として広がった。のちに汎用言語になり、1990年代の CGI による Web 開発でも使われた。
一覧内で確かめられた影響元なし ・ 影響を与えた言語 2
1990年 ・ 関数型
Haskell
作った人: Paul Hudak、John Hughes、Simon Peyton Jones、Philip Wadler(委員会(Yale、Glasgow、Chalmers、Edinburgh ほか))
遅延評価をする関数型言語が各大学で乱立していたため、共通の言語として委員会で設計された、非正格で純粋な関数型言語。のちに型クラスやモナドによる入出力など、型システムと副作用の扱いに関する仕組みが加わった。
影響を受けた言語 1 ・ 影響を与えた言語 4
1991年 ・ スクリプト・オブジェクト指向・マルチ・その他
Python
作った人: Guido van Rossum(CWI(オランダ))
CWI で ABC 言語の設計に加わっていた Guido が、Amoeba 分散OSでの管理作業のために作ったスクリプト言語。インデントによる文のまとまり、高水準のデータ型、例外処理を持ち、C などで拡張しやすくした。
影響を受けた言語 2 ・ 影響を与えた言語 4
1991年 ・ オブジェクト指向・命令型
Visual Basic
作った人: Microsoft(Microsoft)
Microsoft の BASIC の流れをくむ言語に、画面部品をマウスで並べるフォーム設計を組み合わせた開発環境。Windows の GUI アプリケーションの開発を易しくすることを狙った。
影響を受けた言語 1 ・ 一覧内で確かめられた影響先なし
1993年 ・ 関数型・スクリプト
R
作った人: Ross Ihaka、Robert Gentleman(オークランド大学統計学科(ニュージーランド))
統計計算のための環境を自分たちで作る実験として、小さな Scheme 風のインタプリタに S 風の構文を載せて生まれた。見た目は S に近いが、実装と意味づけは Scheme に由来する。
影響を受けた言語 2 ・ 影響を与えた言語 1
1994年 ・ スクリプト・マルチ・その他
Lua
作った人: Roberto Ierusalimschy、Luiz Henrique de Figueiredo、Waldemar Celes(Tecgraf、PUC-Rio(ブラジル))
ブラジルの研究室で、データ入力用の言語 DEL と記述言語 Sol を一つにする形で生まれた、組み込み向けのスクリプト言語。連想配列(テーブル)を中心にした小さな言語で、のちに匿名関数、字句スコープ、コルーチンを備えた。
影響を受けた言語 2 ・ 一覧内で確かめられた影響先なし
1995年 ・ オブジェクト指向
Java
作った人: James Gosling、Patrick Naughton、Mike Sheridan(Sun Microsystems)
組み込み機器やネットワーク機器向けの研究計画から生まれた、オブジェクト指向言語。ソースはバイトコードという機種に依存しない中間形式に変換され、仮想マシンの上で動く。C++ に似た見た目を保ちながら、ポインタや多重継承などを外した。
影響を受けた言語 3 ・ 影響を与えた言語 5
1995年 ・ スクリプト・オブジェクト指向
JavaScript
作った人: Brendan Eich(Netscape Communications)
Netscape Navigator に組み込むため、Brendan Eich が短期間で作ったスクリプト言語。HTML に断片的なコードを埋め込み、ブラウザがページ表示時に解釈する。Eich 自身は、主な部品として Scheme 風の第一級関数と Self 風のプロトタイプを選んだと述べている。
影響を受けた言語 2 ・ 影響を与えた言語 2
1995年 ・ スクリプト
PHP
作った人: Rasmus Lerdorf、Andi Gutmans、Zeev Suraski((個人開発、のち PHP コミュニティ))
自分の履歴書サイトへの訪問を記録する CGI プログラムとして始まり、HTML に埋め込む形のスクリプト言語に育った。PHP 3 でゲーツマンとスラスキが解析器を書き直し、現在に近い形になった。
影響を受けた言語 2 ・ 一覧内で確かめられた影響先なし
1995年 ・ スクリプト・オブジェクト指向
Ruby
作った人: Yukihiro Matsumoto((個人開発、のちコミュニティ))
まつもとゆきひろが、好きな言語の良さを混ぜて作ったオブジェクト指向スクリプト言語。すべてがオブジェクトで、ブロックとイテレータを備える。
影響を受けた言語 4 ・ 影響を与えた言語 4
1996年 ・ 関数型・オブジェクト指向・マルチ・その他
OCaml
作った人: Xavier Leroy、Jérôme Vouillon、Damien Doligez、Didier Rémy(INRIA(フランス))
ML の系統の Caml に、静的な型づけのまま使えるオブジェクトシステムを加えた言語。ネイティブコードコンパイラも備える。
影響を受けた言語 1 ・ 影響を与えた言語 3
2000年 ・ オブジェクト指向・マルチ・その他
C#
作った人: Anders Hejlsberg(Microsoft)
2000年に Microsoft が .NET プラットフォーム向けに発表したオブジェクト指向言語。C/C++ の技術者が既存の技能を使えることを狙い、構文は C 系に近い。1.0 は Java によく似ていたが、その後ジェネリクス、LINQ、async/await などを加え、関数型の要素も取り込んだ。
影響を受けた言語 4 ・ 影響を与えた言語 5
2002年 ・ 関数型・マルチ・その他
F#
作った人: Don Syme(Microsoft Research Cambridge)
Don Syme が OCaml の中核を .NET 上に再実装するところから始めた、型付き関数型言語。.NET の型・例外・スレッドをそのまま F# のものとして扱い、他の .NET 言語と双方向に連携できる。その後、非同期処理(async)の計算式などを持ち込み、C# など他言語にも影響を与えたと本人は述べている。
影響を受けた言語 3 ・ 影響を与えた言語 4
2003年 ・ オブジェクト指向・関数型
Scala
作った人: Martin Odersky(EPFL(ローザンヌ連邦工科大学))
Odersky らが EPFL で2001年に設計を始めた、オブジェクト指向と関数型を一つの静的型付き言語にまとめた言語。JVM 上で動き、Java のコードと相互運用できる。Java の拡張ではなく、別の言語として設計された。
影響を受けた言語 7 ・ 影響を与えた言語 1
2007年 ・ 関数型
Clojure
作った人: Rich Hickey((個人。のち Cognitect))
Rich Hickey が2005年に設計し2007年に公開した、JVM などの上で動く Lisp の方言。不変データと純粋関数を基本とし、可変な状態は専用の構成要素で扱う。どの先行 Lisp の直系でもなく、互換性を求めなかった。
影響を受けた言語 3 ・ 影響を与えた言語 1
2009年 ・ 命令型・マルチ・その他
Go
作った人: Robert Griesemer、Rob Pike、Ken Thompson(Google)
Google の3人が2007年に構想し、2009年に公開した静的型付きのコンパイル言語。C 系の構文に、Pascal 系の宣言とパッケージ、CSP に由来するチャネル(並行処理)を組み合わせた。ツールによる整形など、大規模なコードでの作業のしやすさを重視した。
影響を受けた言語 2 ・ 一覧内で確かめられた影響先なし
2010年 ・ 命令型・関数型・マルチ・その他
Rust
作った人: Graydon Hoare(Mozilla)
Mozilla で始まった、ガベージコレクタやランタイムを要せずにメモリ安全とスレッド安全を保証するシステム向け言語。所有権の規則をコンパイラが検査する。C++ の資源管理、ML 系の代数的データ型、Erlang 流の軽量な並行処理など、既存言語の要素を組み合わせている。
影響を受けた言語 9 ・ 影響を与えた言語 1
2011年 ・ オブジェクト指向
Dart
作った人: Lars Bak(Google)
2011年に Google が発表したクラスベースの言語。当初は省略可能な型を持ち、のち型システムを健全なものに改めて、値は null になれると宣言しない限り null にならないようにした。Web・モバイル・デスクトップ向けのクライアント最適化を掲げる。
一覧内で確かめられた影響元なし ・ 一覧内で確かめられた影響先なし
2011年 ・ 関数型
Elixir
作った人: José Valim(Plataformatec(当時))
José Valim が2011年に始めた、Erlang の仮想マシン上で動く言語。Ruby に近い構文や命名と、Erlang の実行基盤、Clojure のプロトコルのような考え方を組み合わせている。
影響を受けた言語 3 ・ 一覧内で確かめられた影響先なし
2011年 ・ オブジェクト指向・関数型・マルチ・その他
Kotlin
作った人: Michail Zarečenskij(現在のリード設計者。FAQ の記述)(JetBrains)
JetBrains が2010年に始め、2011年に発表した JVM 向けの静的型付き言語。Java と100%相互運用でき、null を許す型と許さない型を型システムで区別する。Java、C#、JavaScript、Scala、Groovy などに触発されたと公式 FAQ は述べる。
影響を受けた言語 5 ・ 一覧内で確かめられた影響先なし
2012年 ・ 関数型・マルチ・その他
Julia
作った人: Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman(MIT ほか)
2012年に4人の作者が公表した、科学技術計算向けの動的言語。C のような速度と Ruby のような動的さ、Lisp のようなマクロ、MATLAB のような数式の書きやすさを一つにしたいと動機を書いている。プロトタイプ用と実運用用で言語を分ける必要をなくすことを狙う。
影響を受けた言語 4 ・ 一覧内で確かめられた影響先なし
2012年 ・ オブジェクト指向・スクリプト・マルチ・その他
TypeScript
作った人: Anders Hejlsberg(Microsoft)
2012年に Microsoft が発表した、JavaScript に型注釈などを加えた上位集合の言語。すべての JavaScript は TypeScript として有効で、型は省略でき、コンパイル後は型が消えて通常の JavaScript になる。大規模な JavaScript 開発に型検査とツール支援を持ち込んだ。
影響を受けた言語 2 ・ 一覧内で確かめられた影響先なし
2014年 ・ オブジェクト指向・関数型・マルチ・その他
Swift
作った人: Chris Lattner(Apple)
Chris Lattner が2010年7月に着手した Apple の言語。Objective-C、Rust、Haskell、Ruby、Python、C# などから着想を得たと本人が書く。変数の初期化や配列範囲の検査、nil を明示的に扱うオプショナルなどで、よくある誤りを言語側で防ぐ。
影響を受けた言語 6 ・ 影響を与えた言語 1
冗談と実験の枝もあります。冗談と実験の枝:難解プログラミング言語(Brainf*ck・Malbolge ほか)。ふつうの言語を同じものさしで比べるなら プログラミング言語の比較へ。
プログラミング言語の歴史を知ると何がうれしいか
新しい言語も、前の言語のよいところを受け継ぎ、使いにくさを直して生まれている。
プログラミング言語は、ゼロから突然現れるのではなく、前の言語の考え方を受け継いだり、使いにくい点を直したりして作られます。たとえば C の書き方は、C++・Java・C# にも受け継がれています。
このページは、言語どうしの影響関係を年と系統の図にしたものです。言語の「なぜこうなっているのか」の背景が見えると、仕組みを丸暗記せずに理解できます。
どこで・どんな場面で使うか
-
新しい言語を学ぶとき
系統の近い言語から学ぶと、書き方や考え方が似ていて早く身につきます。
-
言語を選ぶとき
その言語が何を解決しようとして生まれたかを知ると、自分の目的に合うかを判断しやすくなります。
-
古い言語の現場
COBOL や C のように古くからある言語が今も使われる理由は、歴史を知ると納得しやすくなります。
-
研修や勉強会
「この仕組みはどの言語から来たか」を説明できると、後輩や仲間への解説に役立ちます。
-
求人票を読むとき
歴史そのものが募集条件になることはありませんが、求人に挙がる言語名の背景がわかると、仕事の中身を想像しやすくなります。
なぜ覚えておくと得か
- 丸暗記が減る。「前の言語の何を直したか」を理由として覚えられるので、機能の違いが頭に残りやすくなります。
- 似た言語の関係がわかる。どの言語が兄弟や親子の関係かがわかると、1つ覚えたあとに次を学ぶ道筋が見えます。
- 流行に振り回されにくい。新しい言語が出ても、過去の言語とのつながりで位置づけられるようになります。
下の系統図で気になる言語を押して、その祖先と子孫の線をたどってみてください。
思想の歴史
言語の設計に影響した考え方を、年の順に18件並べました。各項目の下に、関わった人・関わった言語・出典を載せています。
-
1960年
ガベージコレクション
McCarthy の Lisp では、リスト構造の不要部分を明示的に消す作業が煩雑だと考え、使えなくなった記憶領域を自動で回収する方式を採った。記憶領域を使い切るまで放置し、使い切ったら変数から辿れる部分に印を付けて残りを回収する。参照カウントの方式も比較されたが、Lisp は印を付けて回収する方を選んだ。この仕組みは1960年の CACM 論文でも言語の特徴に挙げられている。
関わった人: John McCarthy
関わった言語: Lisp
出典: McCarthy, History of Lisp (転載版で内容を確認)
-
1967年
オブジェクト指向の始まり
Simula は ALGOL 60 を拡張して作られ、シミュレーション対象を独立したオブジェクトとして扱った。Dahl と Nygaard は1966年12月に「接頭辞」の考え方に至り、これがクラスとサブクラスの概念になった。Kay は Simula の記憶割り当てが Sketchpad の実体に似ていることに気づき、1972年の Smalltalk の前身になったと述べている。Smalltalk はすべてをオブジェクトとし、メッセージで動かす形にまとめた。
関わった人: Ole-Johan Dahl、Kristen Nygaard、Alan Kay
出典: Nygaard & Dahl, The Development of the SIMULA Languages (転載版で内容を確認)
-
1968年
構造化プログラミング
Dijkstra は、goto 文の多いプログラムほど質が下がると経験から述べ、高水準言語から goto を無くすべきだと主張した。プログラムの文面上の並びと、実行時の経過の対応を分かりやすくすることが理由だった。この主張は1968年に CACM の手紙「Go To Statement Considered Harmful」として公表された。Wirth は Pascal が構造化プログラミングの考えに強く影響されたと書いている。
関わった人: Edsger W. Dijkstra、Niklaus Wirth
-
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 に未対応のため、リンクなし)
-
1977年
関数型の考え方
Backus は1977年のチューリング賞講演で、代入と逐次実行に縛られた従来の言語は大きくなるばかりで強くならないと批判した。代わりに、関数を組み合わせる形式で新しいプログラムを作る関数型のスタイルと、プログラムの代数を提案した。Lisp は関数を値として扱う先行例で、ML や Scheme も関数を中心にしている。この講演は1978年に CACM に掲載された。
関わった人: John Backus
出典: Backus, Can Programming Be Liberated from the von Neumann Style? (転載版で内容を確認)
-
1978年
型推論
Milner は、型を書かなくても自動で型を決め、型の誤りを実行前に見つける多相型の仕組みを1978年に論文で示した。この仕組みは定理証明系 LCF のメタ言語 ML にすでに組み込まれ、約2年使われていた。型検査によって、誤った証明が作れないことが保証される。ML 系の言語は後に型推論・データ型・モジュールなどをそろえた Standard ML に発展した。
関わった人: Robin Milner
関わった言語: ML
-
1986年
並行処理とアクター/耐障害(Erlang)
Erlang は1986年、Ericsson の研究所で Joe Armstrong が Prolog に並行プロセスを足す実験として始めた。軽量なプロセスを互いに強く分離し、メッセージだけで通信させ、失敗したら即座に止まる(フェイルファスト)作りをとる。Armstrong は『let it crash』、つまり誤りは別のプロセスに直させる考え方を述べている。電話交換機のように止まってはならないソフトを作る目的が、言語の形を決めた。なお、アクターモデルとの関係を述べた記述は、今回確かめた資料の範囲では見つからなかった。
関わった人: Joe Armstrong、Robert Virding、Mike Williams
出典: Joe Armstrong, Making reliable distributed systems in the presence of software errors (2003) / Erlang FAQ: Academic and Historical Questions
-
1987年
スクリプト言語の広がり
Perl はテキストを走査して報告書を出す作業から始まり、システム管理の道具として広がった。Python は Amoeba 分散OSでの管理作業のために、C のプログラムや Bourne シェルのスクリプトに代わるものとして作られた。Ruby は Perl や Smalltalk など好きな言語の良さを混ぜ、プログラマが楽しく書けることを目指した。三つとも、速さや小ささより『書く人の手間を減らす』ことを軸にした点が共通する。
関わった人: Larry Wall、Guido van Rossum、Yukihiro Matsumoto
出典: perldoc perlintro / Python docs, General Python FAQ / ruby-lang.org, About Ruby
-
1990年
純粋関数型と遅延評価(Haskell)
1980年代、遅延評価をする関数型言語が各大学で作られ、互いに少しずつ違う言語が乱立していた。そこで共通の言語を委員会で設計することが決まり、1990年4月1日付で Haskell Report 1.0 が出た。設計の目標は非正格で純粋な関数型であること。Haskell は Miranda の影響を強く受け、型クラスやモナドによる入出力など、型システムと副作用の扱いに仕組みを加えた。
関わった人: Paul Hudak、John Hughes、Simon Peyton Jones、Philip Wadler、David Turner
出典: Hudak, Hughes, Peyton Jones, Wadler, A History of Haskell: Being Lazy With Class (HOPL III) (転載版で内容を確認)
-
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
-
1995年
仮想マシンと一度書けばどこでも動く
Java は機種や OS が入り混じるネットワークの環境を前提に、ソースを機種に依存しないバイトコードへ変換し、各機種の仮想マシンで動かす形をとった。公式の白書は、これにより配布や更新の問題を解けると述べる。プロジェクトは1991年に Gosling らが始め、1995年5月に SunWorld で発表された。仮想マシンの考え方は Erlang の JAM 機械(1989年)や OCaml の前身 Caml Light のバイトコード解釈系(1990年)でも使われている。
関わった人: James Gosling、Patrick Naughton、Mike Sheridan
出典: 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
-
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
-
2003年
JVM の上の新言語(Scala・Clojure・Kotlin)
Java の仮想マシン上で動く新しい言語が、2000年代に次々と生まれた。Scala は Java の拡張ではなく、完全に相互運用できる別の言語として設計された。Clojure は JVM を意図的なホストとし、Java のライブラリを直接使える Lisp である。Kotlin は Java と100%相互運用できる静的型付き言語として JetBrains が作った。いずれも既存の Java 資産を捨てずに、新しい書き方を持ち込んだ。
関わった人: Martin Odersky、Rich Hickey
-
2009年
シンプルさと並行処理(Go のゴルーチンと CSP)
Go は Google の大規模なコードでの作業のしやすさを目的に設計された。ビルドの速さ、依存関係の厳密な管理、明快さと単純さを重んじる。並行処理は Hoare の CSP の流れを汲み、チャネルを第一級の値として扱う。この系譜は Newsqueak や Limbo などを経ている。Go FAQ は、並行処理の基本部品が CSP 系の言語に由来すると述べる。
関わった人: Robert Griesemer、Rob Pike、Ken Thompson、Tony Hoare
出典: Pike, Go at Google: Language Design in the Service of Software Engineering
-
2012年
漸進的型付け(TypeScript)
TypeScript は JavaScript の上位集合として2012年に発表された。既存の JavaScript をそのまま TypeScript として受け入れ、型注釈は必要な箇所から少しずつ足せる。型はコンパイル時に消えるので、出力は通常の JavaScript になる。型は省略でき、コンパイラが推論することも多い。同じ2011年の Dart も、省略可能な型を最初から掲げていた。
関わった人: Anders Hejlsberg、Lars Bak
関わった言語: TypeScript・JavaScript・Dart
出典: TypeScript: JavaScript Development at Application Scale (2012)
-
2012年
科学技術計算の「二言語問題」(Julia)
科学技術計算では、試作は書きやすい言語で行い、速さや配備のために別の言語で書き直すことが多い。Julia の作者たちは2012年のブログで、C の速度と Ruby の動的さ、Lisp のマクロ、MATLAB の数式表記を一つの言語で得たいと書いた。2014年の論文は、試作と本番で言語を分ける前提そのものに異を唱えている。なお「二言語問題」という名前は2012年のブログ本文には出てこず、論文は同じ内容を言葉を換えて述べている。
関わった人: Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman
-
2014年
null 安全(Kotlin・Swift・Dart)
null 参照による実行時エラーを、型の仕組みで防ぐ流れ。Swift は nil を許す値をオプショナルとして明示させ、2014年の発表時から option 型を掲げた。Kotlin は null を許す型と許さない型を区別する。Dart は2.12 で、宣言しない限り値は null にならない健全な null 安全を導入した。Dart の公式文書は、Kotlin・Swift・Rust がそれぞれ自分なりの答えを持つ問題だと書く。
-
2015年
メモリ安全と所有権(Rust)
C や C++ は手でメモリを管理し、多くの言語はガベージコレクタに任せる。Rust は第三の方法として、所有権の規則をコンパイラが検査し、守られなければコンパイルを通さない。これにより GC やランタイムなしで、メモリ安全とスレッド安全を保証しようとした。実行時の速度を落とさないことも明言されている。Rust 1.0 は2015年5月15日に公開された。
関わった人: Graydon Hoare
年表(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 | |
| Rust | 2010年 | 命令型・関数型・マルチ・その他 | Graydon Hoare | Mozilla |
| Dart | 2011年 | オブジェクト指向 | Lars Bak | |
| 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。