今,注目のスクリプト言語「Ruby」は,作者であるまつもと氏の好みから生まれた。“プログラミング言語おたく”の行き着く先は,言語の設計,そして作成である。それが多くの人に受け入れられるのは望外の喜びだろう。今回はまず,プログラミング言語が作られる背景と現在に至る道程を簡単に解説した後,筆者の視点からプログラミング言語を分類している。実行モデルによる分類と,データ型の取り扱いによる分類,および計算モデルによる分類である。

(本誌)

 コンピュータはソフトウェアがなければただの箱です。そしてコンピュータを動かすソフトウェアは誰か人間が書いたものです。そのソフトウェアを書く時に使うのは日本語でも英語でもなく,コンピュータが分かる人工言語を使います。これがプログラミング言語です。

 みなさんもプログラミング言語の一つや二つ,名前くらいはご存じでしょう。代表的なプログラミング言語にはCやC++,Javaなどがあります。私が作っているRubyもそのようなプログラミング言語の一つです。

 では,この世の中にコンピュータが誕生してから約半世紀,いったいどのくらいのプログラミング言語が誕生したのでしょう。正確な数は誰にも分かりませんが,「The Language List」というサイトには1995年の時点で2000を超えるプログラミング言語が登録されています。誕生しただけで広く世の中に知られなかった言語も含めると何万になるのか想像もつきません。ではなぜこんなにもたくさんのプログラミング言語が誕生し続けるのでしょうか。

「言語おたく」を惹き付けてやまない

 私はプログラミング言語に,人間,特にコンピュータ好きの人間を引きつける魅力があるからではないかと考えています。私自身,若い時からプログラミング言語の魅力に取りつかれている一人です。このような人間を私は「言語屋」とか「言語おたく」とか呼んでいます。私の観察では,決して多い割合ではないものの,コンピュータ好きのうち,ある一定の割合でこのような人がいるようです。

 プログラミング言語が登場する前から人間は言語の創造に興味を持ってきました。ザメンホフによるエスペラント語などはその端的な例と言えるでしょう。しかし,日常生活に必要な語彙を人工言語のために用意するのは現実的ではありません。エスペラント語はその点でも頑張っているのですが。

 ところが,言語に興味を持つ人間にとって,プログラミング言語には自然言語にない優れた性質がいくつもあります。まず文法が小さい。日常生活のすべてを表現する必要がある自然言語に比べると,プログラミング言語が表現すべきものは,コンピュータがなすべき仕事に限定されます。微妙な表現は不要で文法が単純で済みます。

 次に語彙が小さい。文法が小さいのと同じ理由から,プログラミング言語があらかじめ備えるべき語彙も少なくて済みます。

 そして更新が簡単です。ほとんどすべてのプログラミング言語は,実際にコンピュータで実行させることができます。プログラミング言語を処理するプログラムを「言語処理系」と呼びますが,プログラミング言語が進化した場合,この言語処理系を取り替えることで簡単に対応できます。人間の言語が変化していくのに長い長い時間がかかるのに比べてなんと簡単なことでしょう。

 このような性質から現代の「言語好き」がプログラミング言語に向かう理由は十分にあると思います。

中身を深く知りたい

 もう一つ,プログラマあるいはコンピュータ好きがプログラミング言語に引きつけられる理由が考えられます。

 コンピュータ好きの中には物事の裏側の仕組みに興味を持つタイプの人間が多いような気がします。子供のときに時計を分解して仕組みを確かめようとしたタイプですね。たいてい元に戻せなくなってしまうのですが。私もそうなんですが,そのようなタイプはコンピュータを使っていても,それを走らせるソフトウェアの仕組みに興味を感じて,ひいてはソフトウェアを作る側に回ることになります。

 中には,それだけではあきたらず,ただソフトウェアを作るだけではなく,ソフトウェアを作るためのソフトウェア(プログラミング・ツールやライブラリなど)に手を染めたりと,どんどん仕組みの奥底の方に潜っていく人たちがいます。そういう人たちはどんどん潜っていって自分のバランスのちょうどいいところで留まるんですが,私の見るところ,その究極の行き先はハードウェアかOSか,プログラミング言語のいずれかのようです。

プログラミング言語は総合芸術

 さて,プログラミング言語はコンピュータ・サイエンスの総合芸術です。プログラミング言語の文法は人間が使いやすくあるべきですから,人間工学や心理学に関連する分野です。その文法を解釈する部分は言語理論というコンピュータ・サイエンスの一分野です。また,効率の良い実行のためには最適化,実行時のメモリー管理にはガーベジ・コレクションなど,コンピュータ・サイエンスにおいて非常に重要なテーマを盛り沢山に含んでいます。

 さらに言語処理系にはそれにともなうライブラリが付き物ですが,その場合にはそれぞれのライブラリが重要なデータ構造やアルゴリズムを実装することになりますので,大きなチャレンジです。物作りを愛するものにとって,プログラミング言語はチャレンジの宝庫,まさに宝の山のようなものです。

 世の中にこれだけプログラミング言語が存在したのは,プログラミング言語にたどりついたコンピュータ好きがたくさんいたという証拠でもあるのです。

それはパッチボードから始まった

 とはいうものの,プログラミング言語は最初から今のような形では存在していませんでした。世界最初のプログラマは詩人バイロンの娘エイダ・ラブレースであったと言われていますが,彼女は別にFORTRANでプログラムを書いたわけではありません。彼女の書いたプログラムはチャールズ・バベッジが開発に取り組んだ,蒸気機関を原動力とする「解析機関」用で,プログラムはパンチカードに表現されていたようです。

 電気が使われるようになると,パッチボードと言われるものが登場しました。いや,私自身はそんな時代のことは当然直接は知りませんが。パッチボードとはイヤフォン・ジャックのようなコネクタが大量についたボードです。これを両端にプラグのついたケーブルで配線することにより,計算するための回路を作り出したのだそうです。当然複雑な処理を表現しようとすれば,回路は複雑になり,ケーブルはからまり,まるでスパゲッティの塊のようになるわけです。

 私は大学時代の実習でこのパッチボードを経験しました。数百本のケーブルをたぐってのデバッグは悪夢のようでした。この経験からスパゲッティプログラムという言葉はこのパッチボードが由来ではないかと考えていたのですが,現在までのところその証拠は見つかっていません。