“プログラム言語*1を作る”って一体どういうこと?──この特集のタイトルを見てそう思った方もいるでしょう。最初に,その疑問にお答えしましょう。

 普段,皆さんはプログラミングをするとき,出来合いのコンパイラやインタプリタを使っている方がほとんどだと思います。最初にプログラム言語を選んだとき,実際は,その言語を使ったプログラミングに必要なコンパイラやインタプリタを含む「プログラム言語処理系」(単に処理系と呼ぶことが多いです)を選んでいるわけです*2

 コンパイラやインタプリタなどの処理系は,アプリケーションを開発するための基盤となるソフトウエアですから,中身を知らなくてもきちんと動くことが前提です。正しくプログラムを書けば,実行可能なファイルを生成(インタプリタの場合はすぐに実行)しますし,プログラムが間違っていればエラーを返します。それが具体的にどんな処理をしているのかを気にすることはありません。いわゆるブラックボックスですね(図1)。

図1●プログラム言語処理系はブラックボックス
図1●プログラム言語処理系はブラックボックス

 しかし,ブラックボックスといえども,コンパイラやインタプリタもOSの上で動くアプリケーションの一つに過ぎません。つまり,誰かが何らかの言語を使って作ったプログラムなのです。

 もうおわかりですね。“プログラム言語を作る”とは,既存の言語を使って処理系を作る=プログラミングすることを意味します。そうすると今度は,「なぜそんなことをするの?」「今ある言語では足りないの?」と思うかもしれません。いえいえ,プログラム言語が不足しているわけではありませんし,既存の言語がダメだと言うのでもありません。処理系を作る理由は,ひとえに「おもしろくてためになる」からです。

普段できない体験のおもしろさ

 皆さんは,プログラミングを始めてからこれまでに,おもしろくてためになるプログラムをたくさん作ってこられたことでしょう。この場合の“ためになる”には,実用的で役に立つプログラムを作ったという意味のほかに,プログラム自体はあまり役立たないものでも,プログラミングのスキルアップにつながる経験をしたという意味もあります。

 今回のプログラム言語作りは,後者の意味でとても貴重な体験になります。なぜなら,ソースコードから動くプログラムが作られるまでの過程(処理系がどんな仕事をしているのか)を知ることができるからです。

 プログラムを動かすプログラムを作る──これは,どれだけたくさんのサンプル・プログラムを作っても体験できない“究極”のプログラミングだと言えるでしょう。そして,普通の人があまりやらない体験をすることほど,おもしろいことはありません。加えて,処理系を作ることは,想像しているほど難しいことではないのです。たくさんの先人たちのおかげで,処理系の仕組みはある程度パターン化されているからです。だからこそ,世の中にはたくさんのプログラム言語が次から次へと生まれてくるのです。

自分が作った言語が
世界に広がる可能性もある

 プログラム言語はすべてのプログラマが使う道具ですから,優れたものを作って公開すれば,広く使われるようになるかもしれません。日本で作られたプログラム言語が世界に広まった例として有名なのは,まつもとゆきひろさんが開発したオブジェクト指向スクリプト言語「Ruby」でしょう(図2)。Rubyは世界中にたくさんのユーザーがおり,英文の解説書も出版されているほどです。

図2●Rubyの公式Webサイト。英語の情報も提供し,海外でも熱心なユーザーを獲得している
図2●Rubyの公式Webサイト。英語の情報も提供し,海外でも熱心なユーザーを獲得している

 また,Free Software Foundation(FSF)のGNUプロダクトの一つ「GNU Common Lisp(GCL)」というLisp処理系も,日本で開発されたものが世界に広まった有名な例です(図3)。GCLはもともと京都大学で開発されたKyoto Common Lisp(KCL)がFSFに寄贈され,GNUプロダクトとしてメンテナンスされているものです。

図3●GNU Common Lispの公式Webサイト。京都大学で開発されたものをFSFに寄贈しGNUプロダクトになった
図3●GNU Common Lispの公式Webサイト。京都大学で開発されたものをFSFに寄贈しGNUプロダクトになった

 もっとも,自分が作った処理系が広く使われるようになることは,どちらかといえば例外的な話です。一般に知られているプログラム言語には,すでに定番とも言うべき処理系があります。そのような処理系と張り合うのは現実には無理でしょう。といって,全く新しいオリジナルの言語を考案してその処理系を作れば普及するかというと,それも容易ではありません。たいていの人は,わざわざ身に付けるなら広く普及した言語のほうが後々役に立つだろうと考えるでしょう。それでも使いたいと思ってもらうだけの魅力ある言語を創造するのはとても難しいのです。

理屈抜きに楽しい

 しかし,プログラム言語の処理系を作ることは,たとえ誰にも使ってもらえなくても楽しいものです。この特集では,三つのパートで,オリジナルの処理系を作った作者の方に,その作成過程や仕組み,どんな点を工夫したかなどをそれぞれ解説してもらいました。三つとも全く異なる処理系ですが,みんな楽しんで作っていることがよくわかると思います。

 “書いた通り”にしか動いてくれないコンピュータを“思った通り”に動かせた瞬間は実に楽しいものです。プログラミングの楽しみがそこにあることは,多くの人が認めるところでしょう。自分が思った通りの処理系を作ることは,プログラムを完成させるという本来の楽しみに加えて,出来上がるものがコンピュータを思い通りに動かすためのプログラムであるという二重の楽しみがあります。

 プログラム言語作りに必要なのは,どんな特徴を持つ言語を作るかというアイデアと,自分でやってみようと思うやる気や好奇心,そして処理系の構造やパターンなどのちょっとした知識です。最初の二つは皆さん次第ですので,ここでは最後の一つについて少し説明したいと思います。