プログラミング言語作りは創造主の愉しみ

プログラミング言語は1つ習得するだけでも大変である。 世の中にはJava、C、Basicなど、すでに数多の言語があり、 もうこれ以上は必要ないという感じもする。 だが、新しいプログラミング言語を自分一人で作ってしまう人々がいる。

オリジナルを作る人々

日本で一番有名なのはRuby言語を開発した まつもとゆきひろ 氏であろう。 Ruby言語は世界でもメジャーになりつつあるほど利用者が増えている。 Ruby言語には1,000名以上の開発協力者はいるが、当初はその大部分をまつもと氏一人で開発してきた。

まつもと氏のようにメジャーになったプログラミング言語の開発者は少ないが、 独自の新言語を作る人はそれなりにいる。 先日行われたオープンソース・プログラミング言語のイベント「Lightweight Language魂」では、 「俺オレ言語の作り方」と題したパネルディスカッションが行われ、 いくつかの独自プログラミング言語が紹介された。

例えば、「なでしこ」 は日本語で書けるプログラミング言語である。 次の4行はなでしこのプログラム例である。 読めば分かるように、3つの変数に値を代入して合計値を求めている。 これまで日本語プログラミング言語は数多く登場したが、 それらの中でもかなり実用性の高いものである。

リンゴの値段は300円
リンゴの個数は5個
消費税率は1.05
リンゴの値段×リンゴの個数×消費税率を表示。

なでしこは、教育用言語として優れているだけでなく、 Windowsの様々な機能を呼び出すことができるので、 日常的な定型業務を自動化するのにとても向いており、 多くのファンを集めている。

なぜ、プログラミング言語を作るのか

せっかく作ってもプログラミング言語を普及させるのは、他のソフトウェアに比べて極めて難しい。 なぜなら、ソフトウェア開発者は手慣れた言語を使いたがり、新しい言語の採用には慎重になる。 業務システムの開発で使うには、十分多くの熟練開発者が育っていなければならないし、 適度に枯れた言語でなければ保守にも支障があるからである。 だから、新しい言語の多くはほとんど普及してない。

そんな状況にもかかわらず、 新しいプログラミング言語を作りたくなるのはなぜであろうか。

なにかスゴいソフトウェアを作ってみたかったいうのが、まず第一。 単に便利なアプリケーションではなく、 ソフトを作るソフトという一段上のソフトウェアを自分の手で作ってみたいという気持ちは プログラマならよく分かるだろう。

次に考えられるのは、自分の使っているプログラミング言語に不満があること。 もっとこうだったら便利なのにという小さな不満から、 そもそもソースコードが美しくないという根本的な不満まで、 プログラムを書いていればいろいろな不満がでてくる。 普通は、せいぜいマクロを書いたり、Eclipseのような開発環境にちょっと手を入れるくらいだが、 ある種の人々は「どうせなら自分でプログラミング言語を作ってしまえ」と考え始めるようだ。

しかし、本格的にプログラミング言語開発にはまってしまう理由としては、 それだけでは不足である。 最大の理由は、 すべてが自分の管理下にある新世界を作りたいという根源的な欲求ではないか。

ソフトウェアの作り方はプログラミング言語の設計に大きく影響される。 欲しいソフトウェアを、直感的に素早く作れるようにすること、 それがプログラミング言語開発者の腕の見せどころである。 つまりプログラミング言語とは、作者のソフトウェア開発方法の世界観を実現したものである。 プログラミング言語を開発するというのは、いわば創造主の仕事なのである。

コンピュータを深く理解する教材として

実は、筆者も大昔にプログラミング言語を作ったことがある。 簡単なBASICに始まりPrologやC言語のサブセットを作った。 作ったと言っても、これらは先人のサンプルを参考に少しだけ改良したものである。 これはスゴいソフトを作ってみたかった典型であろう。 その後、人工知能のルール推論言語や、変数値にファジー関数が使えるC言語など、 新しいプログラミング言語を作った。 当然普及する訳もなく、いくつかの仕事に使われただけであった。

しかし、新しいプログラミング言語作りから学んだ技術や知見には大きなものがある。 他人が開発したプログラムを実行できるようにするのであるから、ある意味当然であるが、 大きく言えばコンピュータの動作原理が深いところでよく分かるのである。

最近、ICT分野の国際競争力強化という言葉をよく耳にする。 日本のソフトウェア分野が特に弱いのは事実である。 OSやミドルウェアなど基盤ソフトウェアが米国企業に席巻されているのは周知の事実である。 日本のソフトウェア産業は、アプリケーション開発に偏っており、 基盤ソフトウェアを開発する人材が育っていないのも一因であろう。

プログラミング言語作りを通して、 ソフトウェア開発の新しい世界観を産み出すような実践的体験を積めるような教育があってもよい。