言語進化のダイナミズムとは

未来の言語は「APL」？ Rubyのまつもと氏が講演

「今日はRubyの話はしません」。プログラミング言語「Ruby」の生みの親で開発コアメンバーでもある、まつもとゆきひろ氏は冒頭でそう話すと、自身のプログラミング経歴や半世紀に及ぶプログラミング言語の歴史を外観しつつ、未来のプログラミング言語へ向けた構想について語った。

書籍だけでPascalを習得した高校生

2009年2月12日、翔泳社主催で東京・目黒で行われた「Developers Summit 2009」でまつもと氏は「未来へつながる言語〜ある言語おたくの視点から」と題した講演を行った。立ち見が出るほど詰めかけた観衆に向かって、“最も有名なプログラミング言語オタク”として自身のプログラミング言語観を披露した。

ネットワーク応用通信研究所フェロー／楽天 技術研究所フェローのまつもとゆきひろ氏

1980年代の高校生時代からプログラミング言語が好きだったというまつもと氏だが、一番最初に使った言語はBASICだったという。ところが、ローカル変数や構造化プログラミングの手法が使えないBASICでは、大きなプログラムを書こうと思うと、すぐに限界に突き当たった。雑誌や書籍でPascalの存在を知り「実際に動かしたこともないのに、本を頭から最後まで読んで分かった気になっていた（笑）」と自嘲気味に振り返る。周囲にコンピュータのことを聞ける相手がいるわけでも、インターネットやCD-ROMがある環境でもなく、書籍だけでプログラミングを学んだ高校生のまつもと氏は特殊だったと言えそうだが、もっと特殊なのは「どうしてプログラミング言語を選ばなきゃいけないんだ、もしかして自分にもできるんじゃないかと思った」（まつもと氏）ことだろう。「周りに、そういう話をできる人がいなかったので、プログラミング言語を設計することが普通のことなのかヘンなことなのか、全然分からなかったんですよ」。

その後、実際にさまざまなプログラミング言語を使い、自分の言語を設計・実装するには大学4年生になるまで待たなければならなかったという。

まつもと氏の講演には立ち見が出るほどたくさん聴衆が詰めかけた

世界初の言語は？ Fortran!? ブブッー

無類のプログラミング言語好きのまつもと氏は、自身の言語遍歴を語り終わると、おもむろに会場に向かって“プログラミング言語トリビア・クイズ”を出した。その問題とは「世界最初のプログラミング言語は何でしょう？」というものだ。

ほとんどの人の頭に浮かぶ答えは1950年代に開発された「Fortran」（1954年）、「Lisp」（1958年）、「COBOL」（1959年）辺りだが、まつもと氏が用意していた答えは違った。正解は歴史に埋もれてしまっていたドイツ発の「Plankalkul」（プランカルキュル：英語で言うとPlan Calculus。実際のスペリングはuにウムラウトが付く）というプログラミング言語で、それは1948年にまでさかのぼるのだという。

世界初の言語、それは「Plankalkul」

商業的に成功し、今なおHPC分野では現役のFortranが単純なジャンプ命令程度しかなかったのに対して、Plankalkulには制御構造と呼べるものがあったり、例外処理まで存在していたという。そうしたトリビア知識だけでも、まつもと氏の言語おたくぶりに会場は沸いたが、さらにまつもと氏が「ただ、Plankalkulは仕様が複雑すぎて実装できなかったんですよ。なんと最初の実装が動いたのは2001年だったんですね」というと会場は笑いに包まれた。「作者のコンラート・ツーゼは1995年に亡くなっているので、生前に自分のプログラミング言語が実際に動くのを見ることができなかったというのは不幸です」。

温故知新、1950年代に生まれた言語たち

Fortran、COBOL、Lispはいずれも1950年代に生まれたプログラミング言語だが、半世紀を経た現在も使われている言語でもある。「OSなどに比べると、プログラミング言語の寿命は非常に長いのです」（まつもと氏）。過去の遺物として切り捨てる論調もあるが、まつもと氏がこれらの言語を挙げてプログラミング言語の歴史を語り始めた理由は、それらが現場利用において相変わらず重要な意味を持っていることを示すためと、言語進化のダイナミズムを説明するためだ。

FortranはFormula Translating Systemという名前が示すとおり、数式・計算処理のために開発された言語だ。「Fortranはすばらしいツール。過去のソフトウェア資産を使って、最速に結果がほしい人にはほかに代えられないもの」。Fortranよりも、もっと新しいパラダイムを取り入れたプログラミング言語を使ったほうがいいという主張に対してまつもと氏は、「例えば天気予報をやるような人はコンピュータサイエンスなどどうでもいい」のだと指摘する。Fortranは1つの命令で並列に処理を走らせるSIMD系の処理を得意とし、ベクトル型コンピュータとの相性が良いという面もあるという。

まつもと氏が勤務するネットワーク応用通信研究所（NaCl）は、RubyやRuby on Railsの開発・コンサルティングで知られるが、COBOL案件も同じぐらい多いというのは意外に知られていない。まつもと氏によれば、全国約6000の病院に入っている保険料の点数計算システム「レセプト」は、NaClがオープンソースで実装したシステムを使っているという。既存のシステムを作っていた技術者はCOBOLエンジニア。医療システムや実務の知識に精通していて「彼らの知識を取りこぼすのはあまりに惜しい」という判断から、NaClではLinux上にCOBOL環境を実装したのだという。汎用機のトランザクションモニタやCOBOLコンパイラは独自実装で、X Window System上のGUIライブラリ「GTK」とリンクするライブラリも自作。その上にCOBOLで書いたソフトウェアを載せて全国の病院に納入したという。

COBOLには人的資産、レコード単位での処理などで優れた点がある。「COBOL技術者と話すことが良くあるんですが、右から左に帳票を流すシステムであればCOBOLの生産性はRailsにも負けないと言われることがあるんですよ。ぼくにはよく分かりませんが、ハイと答えるしかないですよね」（まつもと氏）。

言語進化のダイナミズム

FortranもCOBOLも現代に生きている。では、1950年代に生まれたもう1つの言語「Lisp」についてはどうか。Lispは人工知能研究ではデ・ファクト・スタンダードとなったし、アカデミックな世界では使われているが、一般に広く普及した言語とは言いがたい。しかし、Lispに含まれていたアイデアや機能は、現代的な言語にも取り入れられているという。

「VMやGC、例外処理など、Lispで当然だったものがJavaで紹介されて一般化した」（まつもと氏）。

BLISS、C、C++などのシステム記述に適した言語は別として、これらの機能はJavaだけではなく、Ruby、Python、Perlなど現代的なプログラミング言語にも、すべて、あるいは一部が取り入れられている。

LispやSmalltalkといった言語は、それ自身が広く普及することはなかったが、ほかの言語にそのエッセンスが取り込まれていくという流れがあった。まつもと氏は、言語進化は生物の進化にも似ているという。プログラミング言語は、発生や分岐を繰り返し「力」のあるものが生き残って進化を続けていく。力となるような機能やパラダイムは幅広い言語に取り入れられることで生き残っていく。こうした流れには「冒険→改良→普及」というサイクルがあるという。

第1フェーズでは冒険的で革新的な機能を実装するが、普及はしない。JavaのVMがそうであったように「遅くてダメじゃんという話になる」（まつもと氏）ことがある。第2フェーズは洗練のフェーズで、「けっこういいじゃんと、一部に受け入れられる」。そして、普通の人が使えるようになっていく。

講演するまつもとゆきひろ氏

歴史に埋もれたロスト・テクノロジ

現代的言語が似通った機能を取り入れる一方、FortanやCOBOL、あるいはLispの例から分かるのは、まだ現代の言語に入っていない“ロスト・テクノロジ”があるのではないか、というのがまつもと氏の指摘だ。

言語は新しいパラダイムを取り入れる形で進化してきた。「最近は構造型プログラミングという言葉を聞かなくなりましたよね。それは当たり前になったからです」（まつもと氏）。同様にオブジェクト指向も、今やほとんどすべての言語に何らかの形で取り込まれている。

では、次の世代のプログラミング言語が取り入れる可能性があるパラダイムとは何か？ 次に来るロスト・テクノロジとは何か？

まつもと氏は、「まだメインストリームになっていない言語で、パラダイムシフトがある言語、これから来る言語は以下の言語の延長線にあるのではないか」と述べて、Ruby、Haskell、Erlang、APLの4つを挙げた。

Rubyを除くこれらの言語は誕生年代は古いが、次にメジャーになる言語に取り込まれるロスト・テクノロジが含まれているかもしれない。そういう意味では、まつもと氏がいう「冒険」のフェーズにあるかもしれない言語たちだ。「古くからあって忘れられているのだけど、今の状況に適用すると結構面白かった、という技術はあるかもしれない」（まつもと氏）。

Haskell、OCaml、Standard ML、あるいはErlangは、関数型言語として近年注目を集めている。関数型言語は、より抽象度やモジュール性の高いプログラミングが可能で、並列処理に有利な特徴を多く備えている。プロセッサのコア数が増加しつつある現在、並列処理をソフトウェアでサポートするニーズは高まっており、こうした面からも普及が見込まれる。

すでにRubyにも、関数型の特徴が含まれている。ブロックと呼ばれる構造や手続きオブジェクトを使い、高階関数の扱いができることが1つだし、変数の中身を変更してしまうメソッドを「破壊的」と呼ぶのは、関数型言語の特徴の1つとされる「参照透明性」を意識してのことだろう。さらに、先日初の安定版リリースが出たばかりのRuby 1.9では関数型らしさを増す文法やメソッドが追加されているという。「すでに存在する言語、あるいはこれから出てくる言語に対して関数型言語が影響を与えるということは十分にあるのではないか」（まつもと氏）。

Erlangは関数型であると同時にProlog、KL/1などに連なる論理型プログラミングと呼ばれるマイナーなパラダイムの上にもある。論理型言語は、組み合わせの数が多いものの中から条件に合致したものを探すゴールシーキングと呼ばれる問題を解くのに向く、という特徴があるという。

“A Programming Language”を略した「APL」という身もフタもない名前を持つ1960年代生まれのプログラミング言語は、現代的プログラミング言語とは、かなり異質だ。まつもと氏がAPLで書かれたライフゲームのソースコードを示すと、あまりの字面の異様さに会場からは笑いがこぼれた。

APLが登場した当時には、特殊な記号を入力するために専用の入力デバイスまで必要だったという。そんなプログラミング言語トリビアを紹介して会場の笑いを誘いつつも、まつもと氏は、APLが持つ特徴が、今後のプログラミング言語に影響を与える可能性を示唆する。APLは、SIMD系命令の実行に適したようなベクトル演算を基本としている。コア数が増えるプロセッサや、より多くのマルチメディア処理を行うアプリケーションの存在により現在、こうした並列処理に向く言語が見直される可能性があるというわけだ。

APLで使われる記号類は、すでにUnicodeにすべて含まれている。ただ、「さすがにアルファベットの範囲内でやろうということで、APLに似た言語としてKとかJというものが出てきている」（まつもと氏）のだという。さらに、最近データ処理や統計処理に適した言語としてにわかに注目を集めている「R」など、APLのように配列やベクトルの処理を得意とする言語もある。

世界初のプログラミング言語「Plankalkul」から始まり、APLというロスト・テクノロジの話で終わった、まつもと氏の講演。該博なプログラミング言語進化史の知識に裏打ちされた、今後のプログラミング言語パラダイムの展望は、多くの示唆に富んでいる。

※記事初出時、APLを1950年代生まれと記述してありましたが正しくは1960年代です。訂正してお詫びいたします。

関連リンク Developers Summit 2009

（＠IT 西村賢） 情報をお寄せください：