FORTRAN vs. LISPではじまった言語の歴史
そもそもプログラミング言語とは何なのか。セッションの冒頭、まつもと氏はこの本質的な問いに対し、以下2つの異なる定義を示した。
その1 :プログラム=手順書・手順書記述用人工言語
その2 :プログラム=理想記述・思考表現用人工言語
その1を"機械のため"とするなら、その2は"人間のため"の定義となる。機械が理解できるように手順を記述するのか、それとも達成したい理想を人間にわかる言葉で記述するのか。まつもと氏は「機械のためか人間のためか、せめぎあう2つの立場が交錯してきたのがプログラミング言語の歴史」とする。
その立場の違いが際立つのが、プログラミング言語が登場したばかりの1950年代に見られる"FORTRAN vs. LISP"という構図だ。いずれも機械と人間という2つの立場をそれぞれのやり方で取り入れた言語である。
1954年に誕生した世界初の高級言語、人間にわかる言葉=数式でプログラムできるように開発されたFORTRAN(FORmula TRANSlator)は、ループアンローリングやベクトル化を取り入れ、"速く計算する"ということにこだわった。その時代背景にはコンピュータが非常に遅かったという事情がある。しかし、当時、言語の常識がまだ存在しなかったこともあり、「スペースを全部落とすなど、"人間のため"という点では未熟な部分が多かった」(まつもと氏)という。
一方、1958年に誕生したLISP(LISt Processor)は"人間のため"がFORTRANより向上している。ラムダ計算を理論的基盤とした数学的概念からスタートしたLISPは、IBM 704計算機上で実装されたため、そのレジスタを構成するcar(content of adress part of register)とcdr(content of decrement part of register)が、LISPの基本的関数の名前として現在も使われている。また、Javaでおなじみのガベージコレクタを生み出したのもLISPである。
さて、FORTRAN vs. LISPという戦いはどちらが勝ったのか。まつもと氏は「勝者は結果として漁夫の利を取ったAlgol(Algorithmic Language)だった」とする。原始的すぎるFORTRANと数学的すぎるLISP、いずれも現在に至るまで使われている言語ではあるが、主流となることはなかった。Algolは現在ではほとんど利用されていないものの、アルゴリズム記述をベースとした構造化プログラミングのスタイルは、PL/I、Pascal、Ada、Eifel、C、C++、Java……と数多くの"Algol属"を生み出し、現在に至っている。もちろんRubyもAlgol属だ。
人はなぜ新しい言語を求めるのか?
FORTRAN vs. LISPからやや時を経た1960年代後半から1970年代前半、まつもと氏はこの期間を「言語のカンブリア爆発」と呼ぶ。システムプログラミング言語のC(1972年)、オブジェクト指向言語のSimula(1967年)、スクリプト言語のShell(1971年)、関数型言語のML(1972年)など、現在の主要な言語の基礎はほぼこの時期に出揃ったといっても過言ではない。「言うなれば、現在は言語設計者にとっては受難の時代。新しい言語を考案しても"どうせ既存の言語の組み合わせでしょ"と言われてしまう」(まつもと氏)。
ではなぜ、人は新しい言語を求めるのか。60年代、70年代の思想で十分に表現できるのなら、新しい言語は必要ないはずだ。にもかかわらず、現在人気のある言語は最近になって登場したものがほとんどである。例えば、Perl(1986年)、Python(1990年)、Ruby(1995年)、PHP(1995年)、Java(1995年)、C#(2000年)、Scala(2003年)、Erlang(1986年)、……最近か?と疑問をもたれる向きもあるかもしれないが、「言語の世界で10年、20年ははなたれ小僧のレベル」とまつもと氏。
まつもと氏は、言語設計者が新しい言語をつくる動機として、「10万人にひとりくらいの割合で、言語のデザインそのものに惹きつけられる人間が現れる。そういう人間が"言語を作りたい"という気持ちを持つようになる」と語る。その気持ちが生じたときに、
・新しいパラダイム :構造化プログラミング、オブジェクト指向プログラミング、関数型プログラミングなど(ただしここ20年くらい新しいパラダイムは生まれていない)
・新しい環境 :新しいOS、新しいCPU、新しいアプリケーションなど
・新しい制約 :CPU数、メモリ量、データ量、アクセス量など
といったITの世界の変化のタイミングがうまく合うことで、新たな言語が誕生するという。「例えば、Webという新しいアプリケーションが登場したことでPHPが生まれた。時代を取り巻く環境が変わることで、求められる言語も変わる」(まつもと氏)。 もっとも"言語"とはそもそも、どこからどこまでを指しているのだろうか。まつもと氏は、
・文法、ライブラリ、アーキテクチャ
・デザインパターン、コミュニティ、エコシステム
・思想、人格
までを含むとする。言語の仕様には、設計者の哲学が込められている。逆に言えば、哲学を感じられない言語は言語ではないということなのだろう。