Haskell に至る歴史

とある Google グループに書いたものだけど、ツッコミが来ることを期待してこっちでも公開してみる

Fortran

まず、世界で最初に本格的に実用化されたプログラミング言語である Fortran が、1955年前後に生まれます。Fortran では、(それまでの "ADD [addr], 1" のような記法に比べれば)"A + 1" のように数式ライクな(名前からして、"For" は formula から来ています)表現ができるようになりました。もっとも、プログラミング言語が数学らしくないと言われるポイントの大きなひとつであるところの "A = A + 1" も同時に広まることになります。

Lisp

次に Lisp が、1960年前後に生まれます。特殊形式の LAMBDA により、値としての関数を表現する、という技法を数学からとり入れ、世界最初の関数型言語と言われます。
誕生の時点では、変数のスコープを持ち運ぶクロージャであるとかそういった概念は確立されておらず、Lisp の実装、普及、発展を通してそれらの問題が明確化され、解決されていくこととなります。なお、Lisp における関数自体は、純粋な関数ではなく、手続き(プロシージャ)とも言えるもので、他にも Lisp には、変数への代入をおこなう set、破壊的リスト操作の replaca/replacd、順番に手続きを記述するための prog 形式

; 初めての人のためのLISP より
(defun length (x)
  (prog (count)
      (setq count 0)
 loop (cond ((null x) (return count)))
      (setq x (cdr x))
      (setq count (1+ count))
      (go loop) ))

といったものを、実装では最初から用意しており(注)、

(注)
"Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I" に "6. A ``program feature'' allows programs containing assignment and go to statements in the style of ALGOL." という記述がある。

手続き型、ないし命令型言語としての性格も多分に持っています。

その他の言語

プログラミング言語史としては、ここらで COBOL, Algol, PL/I と出てくるのですが、関数型言語の話題からは離れすぎるので割愛します。

ISWIM

1966年に Peter Landin が、"The Next 700 Programming Languages" という文章で、ISWIM という言語を提案します。ウィキペディアにも記事がありますが( → wikipedia:ISWIM )SECD マシンによる先行評価ではあるものの、データ型や、見た目ではオフサイドルールなど、Haskell に影響を与えている特徴がいくつもあります。

ML

1976年に、当初は定理証明システムの記述言語として、ML が誕生しています。今日では OCaml など Haskell と負けず劣らずの人気なのはご存知の通り。

Backus のチューリング賞受賞記念講演

1977年、Fortran の開発者で BNF の B である Backus が「プログラミングは von Neumann スタイルから解放されうるか? 関数的スタイルとそのプログラムの代数」という講演をおこない、その中で、「1時に1語」という、状態をちまちまと代入によって変化させることによるプログラミングを断罪します。
これが、今日につながる、純粋な、ないしできるだけ純粋な、関数型言語の興隆のきっかけであったと言われています。情報処理学会の学会誌に載った、発表当時と、「20世紀の名著名論」で取り上げられた時の記事(どちらも東大の米澤先生による)

が、PDF が誰でも読めるようになっていますので見てみると良いでしょう。
この講演で紹介された、脱ノイマンスタイルの言語である FP 自体は、APL の影響を受けた、Haskell のポイントフリースタイルだけでプログラムを書くようなスタイルのためか(実際読んでみても難解です)、ほとんど広まっていません。

型推論

型推論の歴史、というのもあるのですが私がまだよくわかっていない分野なので割愛します。

遅延評価

順序が少し前後しますが、1976年に、David Turner が、自身の SASL という言語を、遅延評価をするように再設計、再実装しています。Turner は遅延評価をする処理系を効率的に実装する(初期の)方法を考案し、"A New Implementation Technique for Applicative Languages" にまとめています。
SASL については → wikipedia:en:SASL_(programming_language)
以後、主に80年代、既存の言語の遅延評価化(LML - LazyML など)や、1985年の Miranda ( wikipedia:Miranda )などの遅延評価をする新言語の提案などがさかんにおこなわれるようになります。

Haskell の誕生

1987年の秋に開かれた "Functional Programming Languages and Computer Architecture" という会議で、数々の(1ダースにのぼったという)提案されている遅延評価をおこなう純粋な関数型言語を統一する、オープンな共通の言語の必要性が共通認識として確認され、委員会が発足しました。1990年に Haskell 1.0 がリリースされました。

Haskell の影響を受けた言語

Clean とかあるわけですが、Haskell まで、をスコープとするので割愛します。


以上となります。コメント等歓迎します。